Android studio android打包apkk出现错误

10976人阅读
1.Build -& Generate Signed APK...,打开如下窗口
2.假设这里没有打过apk包,点击Create new,窗口如下
这里只要输入几个必要项
Key store path(生产key文件的保存路径 )
Key store password(key 存储密码)
Key alias(key别名)
Key password(key密码)
可以输入机构或个人名字
点击OK,点击finish,apk包就生成好了
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场收藏,17.5k 浏览
原文链接:
Android Studio + Gradle的组合用起来非常方便,很多第三方开源项目也早都迁移到了Studio,为此今天就来介绍下查看、编译并导入第三方开源项目的方法。
Sublime + Terminal编译并查看源码
首先来给大家介绍一种简便并且个人最喜欢的一种办法。很多时候我们在GitHub上看到一个不错的开源项目,一般有两种需求,阅读源码和查看运行效果,如果是单纯的查看源码我更喜欢用一些轻量级编辑器,如vim,sublime等,vim不是很熟练,所以个人一种都习惯用sublime来查看并阅读源码(实际开发还是Android Studio、Eclipse等IDE更有效率);至于查看运行效果首先得需要apk,对于一些开源项目已提供apk下载,那就好办,直接安装到手机即可。 而对于一些没有提供apk下载的,则需要自己手动编译打包。
下面以为例来讲解下命令行Gradle编译的过程。
1、切换到9GAG项目的根目录,执行 ./gradlew -v 来查看下项目所用的Gradle版本
如果你是第一次执行会去下载Gradle,这个过程如果不翻墙非常慢,建议翻墙
紧接着下载成功会看到如下信息:
------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------
Build time:
09:45:35 UTC
Build number: none
6fcb59c06f43a4e6b1bcb401ffb4a
Apache Ant(TM) version 1.9.3 compiled on December 23 2013
1.7.0_60 (Oracle Corporation 24.60-b09)
Mac OS X 10.9.5 x86_64
2、接着执行 ./gradlew clean
执行这个命令会去下载Gradle的一些依赖,下载成功并编译通过时会看到如下信息:
:app:clean UP-TO-DATE
:extras:ShimmerAndroid:clean UP-TO-DATE
BUILD SUCCESSFUL
3、最后执行 ./gradlew build
这个命令会直接编译并生成相应的apk文件,如果看到如下字样就代表build成功了
BUILD SUCCESSFUL
Total time: 31.456 secs
紧接着在 9GAG/app/build/outputs/apk 目录下会看到类似于app-debug-unaligned.apk, app-release-unsigned.apk等,看名字应该能理解意思,unaligned代表没有进行zip优化的,unsigned代表没有签名的。然后就可以直接安装apk查看运行效果了。
以上是我个人习惯的一种阅读第三方源码的习惯,关于上面提到的一些gradle命令大家应该还不理解,后面会一一进行说明的。
导入Android Studio
但是如果你还是想导入Android Studio的话,下面就来简单介绍下导入Studio的方法以及一些注意事项。
1、选择File-&Import Project, 选择本地9GAG项目的目录
2、第一次依然会下载Gradle,其实自己在命令行已经下载过了,但是这次依然还要下载一次(依然要翻墙),可能是个bug
3、导入之后你需要注意以下几个地方
每个Module下的 build.gradle 下的buildToolsVersion,即9GAG/app/build.gradle 和 9GAG/extras/ShimmerAndroid/build.gradle , 可以打开 SDK Manager 查看本地你安装的 SDK Build-tools, 如下图,如果相应版本没有安装请先下载。
项目根目录下的 build.gradle 下gradle插件的版本,如 9GAG/build.gradle 的内容:
classpath 'com.android.tools.build:gradle:1.0.0'
Android Studio 1.0必须指定gradle插件1.0的版本
Gradle Wrapper的版本,在 9GAG/gradle/wrapper/gralde-wrapper.properties 文件里有如下内容:
Thu Dec 18 16:02:24 CST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip
上述内容制定了gradle的版本使用2.2.1,在Studio中如果你手动改了gradle插件的版本会有提示要不要更新Gradle Wrapper的版本。
如果以上几个地方确定版本是ok的,那么导入Android Studio应该没有问题,有些老的项目可能gradle版本比较老,仍然在使用一些老的语法,如果编译还通不过参考更改成最新的语法。
Gradle常用命令
上面大家接触了一些命令如 ./gradlew -v ./gradlew clean ./gradlew build, 这里注意是./gradlew, ./代表当前目录,gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper, 在9GAG/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。
理解了gradle wrapper的概念,下面一些常用命令也就容易理解了。
./gradlew -v 版本号
./gradlew clean 清除9GAG/app目录下的build文件夹
./gradlew build 检查依赖并编译打包
这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 assemble, 如
./gradlew assembleDebug 编译并打Debug包
./gradlew assembleRelease 编译并打Release的包
除此之外,assemble还可以和productFlavors结合使用,具体在下一篇多渠道打包进一步解释。
./gradlew installRelease Release模式打包并安装
./gradlew uninstallRelease 卸载Release模式包
下一篇来介绍用Gradle进行方便的多渠道打包,以及项目中完整的Gradle配置。有问题或建议欢迎大家直接博客留言。
你可能感兴趣的文章
51 收藏,61.9k 浏览
27 收藏,26.7k 浏览
59 收藏,33.4k 浏览
不要错过 TA 的任何更新
如果这篇文章对你有帮助,记得点赞收藏哦,你的支持是我们的动力 ^___^
本文隶属于专栏
Android Developer
微信公众号: AndroidDeveloper
GitHub: stormzhang
61.9k 浏览
26.7k 浏览
35.2k 浏览
33.4k 浏览
分享到微博?
举报理由:
推广(招聘、广告、SEO 等)方面的内容
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复(请编辑该提问指向已有相同问题)
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:
扫扫下载 AppAndroid Studio上如何混淆打包apk - CSDN博客
先分享个链接,这个链接解决了我在用AS混淆打包apk时遇到的一个大问题
当时遇到的问题:
这个问题,导致我一直在查找failed for task ':项目名:proguardRelease'是怎么一回事,当然查找的结果是少得可怜,几乎没有,后来stackoverflow上的大神回复的一句(也就是上面分享的链接里的一个回答):
Basically the proguard task will halt execution if there are any warnings. You can see the Proguard warnings, and the stacktrace, by adding &-d& to the build (as in: gradle clean assembleRelease -d).
Note that the stacktrace mentions to &Please correct the above warnings first.&
问题解决了,是有些类需要进行dontwarn 我的程序里是需要对引用的第三方类进行dontwarn的提示,例如我在程序里用到了腾讯移动分析的SDK,其中应该对com.tencent.stat进行dontwarn
可以在AS的终端打入下面命令行:gradlew assembleRelease --stacktrace
执行完后,会看到warning,最后也会有Please correct the above warnings first的提示
在解决这个问题时我最大的问题就是不认真看提示,不把warning放在眼里,以为只有error才是真正需要解决的问题。查了半天,其实最后在执行命令行后给出的提示就已经告诉我该怎么解决问题,由于我的视而不见让我折腾了大半天。即使是自己解决了问题,但是我还是觉得是stackoverflow上的大侠在告诉我,你要看清log啊,要这么改,那么改...和别人手把手教你没区别。仔细看log,学会自己分析很重要,重要的是每个值得一试的地方,即使不确定,也要抱着排除可疑性的心态解决掉,不要怕浪费时间。
具体如何用AS混淆打包apk,今天先不写了,回头再补上吧输入关键字或相关内容进行搜索
预备环境\n
Android开发环境,推荐使用ADT开发工具;
并要求安装Android4.0(API 14)SDK。
下载HBuilder离线打包Android版SDK()。
\n离线打包SDK目录说明\n
HBuilder-Hello:离线打包演示应用;
libs:SDK库文件目录;
Feature列表.xls:Android平台各扩展Feature API对应的permission;
Readme.txt:版本说明文件。
\n配置编译工程\n
导入演示应用HBuilder-Hello工程
\n启动带ADT的eclipse程序,菜单中选择“File”-& “Import”,打开Import对话框,选中Android下的“Existing Android Code Inot Workspace”:
点击“Browse...”选择模板应用的目录,并选中“Copy project into workspac”将应用导入到Workspace中:
演示工程中已经配置好HelloH5应用相关资源,完成导入后,可Ctrl+F11直接编译运行:
从SDK目录中拷贝要使用的feature库到工程libs目录
\n参考“Feature列表.xls”文档确定应用中使用到的扩展API,拷贝libs目录中对应的jar/so文件到应用工程的libs目录下。如使用分享功能(新浪微博分享、腾讯微博分享,微信分享),则需要拷贝以下文件:
拷贝完成后在工程中F5刷新可在工程的libs目录下显示:
注意:如果不需要使用到HTML5Plus API,则仅需要pdr.jar包即可。
配置应用的权限
\n参考“Feature列表.xls”文档确定应用中使用到的扩展API,在AndroidManifest.json文件中删除不用到API的权限。如不使用音频(plus.audio.*)相关5+ API,则可删除Audio相关的权限:
配置其它第三方库的数据
\n由于第三方库需要使用一些特定的数据,所以在使用时需要将相关参数配置到AndroidManifest.json文件中。如使用分享功能,则需要配置各分享平台的申请应用的相关参数:
如果不使用此类API,则可将此数据删除。
配置应用的包名及版本号
\n打开AndroidManifest.xml文件,在代码视图中修改根节点的package属性值,如下:
其中package为应用的包名,采用反向域名格式,为应用的标识;versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中version -& code值一致;versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中version -& name值一致。注意:因为其它第三方的SDK也使用到包名相关资源配置,所以需要在AndroidManifest.xml将所有“io.dcloud.HBuilder.Hello”替换成要修改成的包名。
配置应用名称
\n打开res -& values -& strings.xml文件,修改“app_name”字段值,该值为安装到手机上桌面显示的应用名称:
配置应用图标和启动界面
\n将应用的图标(文件名为icon.png)和启动图片按照对应的尺寸拷贝到工程的res -& drawable-XXX目录下:
更新应用资源
\n打开assets -& apps 目录,将下面“HelloH5”目录名称修改为应用manifest.json中的id名称(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:
配置应用信息
\n打开assets -& data下的control.xml文件,修改appid值:
其中appid值为HBuilder应用的appid,必须与应用manifest.json中的id值完全一致;appver为应用的版本号,用于应用资源的升级,必须保持与manifest.json中的version -& name值完全一致;version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。配置完成编译运行\n应用配置完毕,按Ctrl+F11编译运行应用:
选择“Android Application”启动应用,在弹出的设备列表对话框中选择要运行的设备:
点击OK后启动应用:
编译运行后在bin目录下会生成apk,此apk不能提交到应用市场
如果要生成提交到应用市场的正式apk请搜索“”编译过程中碰到问题可参考
iOS平台请参考
上边的sdk立即下载链接怎么没法下载啊?
如果能直接在hb里面搞定就好了...可惜啊
作为新人,折腾了好久,把安卓环境搞定,然后,发现还是没办法直接生成APK,痛苦,希望高手出个比较详细的教程,怎么把HTML5就转换成APK了!
我想问的是,这个 Existing Android Code,在哪里?我们在hbuilder里面操作的代码怎么变成Android code的?用cordova还是?
要用eclipse,参考本页开头。
其实也可以安装adt插件,但是,装了adt插件后HBuilder启动会非常慢
教程上是用的已配置好的实例工程; 但对于新手来说重要的是如何配置一个新的工程(一个空白的Android工程, 如何集成mui工程);另外现在的SDK目录结构是有四个东东
hello, integrate, plugin, sdk , 这四个东东都没有说明(作用, 关系等)
导入演示应用HBuilder-Hello工程,为什么根本导入不进去,HBuilder里面的工程,Eclipse根本不认啊
不是hbuilder,人家说的很清楚,是带ADT的开发工具,比如eclipse
请问你搞明白 怎么把一个 H5的项目打包成APK了么?我感觉还是自己写个 webview打开asset下的html页呢,这么理解对么?
assets 中的那些图片资源 和 data下的 control.xml都是从哪来的?这教程完全没说明白啊
请问你看明白怎么打包了么?
离线包里少gen包项目根本运行不起来
自带的演示工程直接运行没问题,但是打包就报这样一堆错误,完全新手直接不知所措了。
[ 10:17:34 - HBuilder-Hello] Proguard returned with error code 1. See console
[ 10:17:34 - HBuilder-Hello] Note: there were 1934 duplicate class definitions.
[ 10:17:34 - HBuilder-Hello] Warning: com.baidu.mapapi.map.SupportMapFragment: can't find referenced method 'void onViewStateRestored(android.os.Bundle)' in class android.support.v4.app.Fragment
[ 10:17:34 - HBuilder-Hello] Warning: com.sina.weibo.sdk.widget.LoginButton: can't find referenced class com.sina.weibo.sdk.R$drawable
[ 10:17:34 - HBuilder-Hello] Warning: com.sina.weibo.sdk.widget.LoginButton: can't find referenced class com.sina.weibo.sdk.R$drawable
[ 10:17:34 - HBuilder-Hello] Warning: com.sina.weibo.sdk.widget.LoginButton: can't find referenced class com.sina.weibo.sdk.R$drawable
[ 10:17:34 - HBuilder-Hello] Warning: com.sina.weibo.sdk.widget.LoginButton: can't find referenced class com.sina.weibo.sdk.R$drawable
[ 10:17:34 - HBuilder-Hello] Warning: com.sina.weibo.sdk.widget.LoginButton: can't find referenced class com.sina.weibo.sdk.R
[ 10:17:34 - HBuilder-Hello] Warning: com.sina.weibo.sdk.widget.LoginoutButton: can't find referenced class com.sina.weibo.sdk.R$string
[ 10:17:34 - HBuilder-Hello]
You should check if you need to specify additional program jars.
[ 10:17:34 - HBuilder-Hello] Warning: there were 127 unresolved references to classes or interfaces.
[ 10:17:34 - HBuilder-Hello]
You may need to specify additional library jars (using '-libraryjars').
[ 10:17:34 - HBuilder-Hello] Warning: there were 1 unresolved references to program class members.
[ 10:17:34 - HBuilder-Hello]
Your input classes appear to be inconsistent.
[ 10:17:34 - HBuilder-Hello]
You may need to recompile them and try again.
[ 10:17:34 - HBuilder-Hello]
Alternatively, you may have to specify the option
[ 10:17:34 - HBuilder-Hello]
'-dontskipnonpubliclibraryclassmembers'.
[ 10:17:34 - HBuilder-Hello] java.io.IOException: Please correct the above warnings first.
[ 10:17:34 - HBuilder-Hello]
at proguard.Initializer.execute(Initializer.java:321)
[ 10:17:34 - HBuilder-Hello]
at proguard.ProGuard.initialize(ProGuard.java:211)
[ 10:17:34 - HBuilder-Hello]
at proguard.ProGuard.execute(ProGuard.java:86)
[ 10:17:34 - HBuilder-Hello]
at proguard.ProGuard.main(ProGuard.java:492)
这个是没有找到例子中引用的库,修改下工程的属性
找不到入口activity PandoraEntry
o{com.susk.H5Test/com.susk.H5Test.PandoraEntry}: java.lang.ClassNotFoundException: Didn't find class &com.susk.H5Test.Pa
ndoraEntry& on path: DexPathList[[zip file &/data/app/com.susk.H5Test-1.apk&],nativeLibraryDirectories=[/data/app-lib/co
m.susk.H5Test-1, /vendor/lib, /system/lib]]
代码中就没有这个类PandoraEntry
we are sorry。。。
05-22 17:18:37.193
V ViewRootImpl: scheduleConsumeBatchedInput: mConsumeBatchedInputScheduled = false,mFirst
PendingInputEvent = null, this = ViewRoot{ com.susk.H5Test/io.dcloud.PandoraEntry,ident = 1}
05-22 17:18:37.194
D ViewGroup: addInArray been called, this = io.dcloud.DHInterface.SplashView{425a3890 V.E
..... ......ID 0,0-720,1230}call stack =
05-22 17:18:37.194
D ViewGroup: java.lang.Throwable: addInArray
05-22 17:18:37.194
D ViewGroup:
at android.view.ViewGroup.addInArray(ViewGroup.java:3677)
05-22 17:18:37.194
D ViewGroup:
at android.view.ViewGroup.addViewInner(ViewGroup.java:3635)
05-22 17:18:37.194
D ViewGroup:
at android.view.ViewGroup.addView(ViewGroup.java:3477)
05-22 17:18:37.194
D ViewGroup:
at android.view.ViewGroup.addView(ViewGroup.java:3453)
05-22 17:18:37.194
D ViewGroup:
at io.dcloud.DHInterface.SplashView.onShowProgressBar(SplashView.java:76
05-22 17:18:37.194
D ViewGroup:
at io.dcloud.DHInterface.SplashView$1.run(SplashView.java:67)
05-22 17:18:37.194
D ViewGroup:
at android.os.Handler.handleCallback(Handler.java:800)
05-22 17:18:37.194
D ViewGroup:
at android.os.Handler.dispatchMessage(Handler.java:100)
05-22 17:18:37.194
D ViewGroup:
at android.os.Looper.loop(Looper.java:194)
05-22 17:18:37.194
D ViewGroup:
at android.app.ActivityThread.main(ActivityThread.java:5469)
05-22 17:18:37.194
D ViewGroup:
at java.lang.reflect.Method.invokeNative(Native Method)
05-22 17:18:37.194
D ViewGroup:
at java.lang.reflect.Method.invoke(Method.java:525)
05-22 17:18:37.194
D ViewGroup:
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit
.java:857)
05-22 17:18:37.194
D ViewGroup:
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
05-22 17:18:37.194
D ViewGroup:
at dalvik.system.NativeStart.main(Native Method)
就不能整个干净点的demo么?弄那么多乱七八糟的jar干啥?什么个推,百度,新浪啥的...谁需要那些东西?能整个正经点demo,实话给这样一个demo我真心觉得很不专业...
由hbuilder的项目怎样生成elipse能识别的安卓项目?本文开头就是“导入演示应用HBuilder-Hello工程”,那么开发者自己的项目怎么办呢?举一个详细过程的例子嘛
真是醉了,老子他们看了半天没看出重点在哪里,怎么把Hbuilder 下的项目搞到Eclipse下!,这么大个网站专业点行不!
逗我呢,根本没说明白怎么将HBuilder项目转为eclipse项目
androidstudio怎么搞
完全看不懂,我等不会Android根本无从下手
这个类是在jar中PandoraEntry,pdr.jar包中封装了。PandoraEntry继承WebAppActivity,WebAppActivity继承a ,a继承b,b最后才真正继承Activity
看着例子 能打包Apk 了 ,但是为什么我只是替换一下 assets/apps/HelloH5/www 下面的内容 打包出来的Apk
运行后就显示 ” null 无法显示该页“
启动页面index.html页面是我自己写的一个页面。换回示例工程的index.html 在打包又可以 ,不知道你的这个关联关系怎么回事,感觉很不科学
虽然写的不怎么清楚,但是还是摸索出来了,但是不知道为嘛,引导页的图片变形,被拉伸了,不知道各位遇到过了吗?我调了好多遍都搞不好。
急!急!急! 找人离线打包个安卓APP
与 苹果APP 重谢给米给米啦!有的速度联系我Q
其实可以自己先在Eclipse下新建一个Android的空项目,里面不需要创建任何activity。然后根据这个教程里面的步骤,把相关的lib文件,assets文件,res文件,还有src里面的RInformation.java按照demo的目录拷贝过去,之后把相关的配置文件按照教程的指引修改一下就可以了。
我也遇到过,发现其实是图片的分辨率不够。你需要把相应分辨率的图片放到drawable-xhdpi, drawable-xxhdpi, drawable-hdpi等目录下就可以了。
要回复文章请先或

我要回帖

更多关于 androidstudio打包apk 的文章

 

随机推荐