cra*_*535 5 eclipse android release build apk
在该指令http://developer.android.com/tools/publishing/preparing.html表明,我应该把它释放到公众面前导出我的Android应用程序.导出中执行的步骤是什么?
这是我所知道的:
zipalign在已签名的APK上运行
我在AndroidManifest.xml中手动将android:debuggable设置为false,并比较了调试和导出的apk.这些是唯一不同的文件:
Binary files ../../release/x//classes.dex and x/classes.dex differ
Binary files ../../release/x//META-INF/CERT.RSA and x/META-INF/CERT.RSA differ
diff -r ../../release/x//META-INF/CERT.SF x/META-INF/CERT.SF
diff -r ../../release/x//META-INF/MANIFEST.MF x/META-INF/MANIFEST.MF
那么我上面的列表包括一切吗?或者不同的classes.dex是否表明调试和导出的apk之间存在其他差异?
感谢错误454的回答,我在每个apk的classes.dex文件中运行了baksmali,我发现了一个区别:
diff -r out/xx/xx/xx/BuildConfig.smali ../../../release/x/out//xx/xx/xx/BuildConfig.smali
7c7
< .field public static final DEBUG:Z = true
---
> .field public static final DEBUG:Z
所以我想我可以在这个列表中添加第四项:
在BuildConfig类(gen /.../ BuildConfig.java)中,DEBUG设置为false.
除了你列出的内容之外,proguard也在导出期间运行.
如果你对classes.dex的差异性质感到非常好奇,你可以抓住baksmali,解压缩你的apk并反编译classes.dex文件:
java -jar baksmali-1.3.3.jar classes.dex
Run Code Online (Sandbox Code Playgroud)
这将创建一个out /文件夹,其内容可以在旧/新之间进行区分.
BuildConfig.DEBUG标志不同的原因是您导出Release版本与Debug版本,如SDK发行说明修订版17中所述:
添加了一项功能,允许您仅在调试模式下运行某些代码.Builds现在生成一个名为BuildConfig的类,其中包含一个DEBUG常量,该常量根据您的构建类型自动设置.您可以检查代码中的(BuildConfig.DEBUG)常量以运行仅调试函数.
或者不同的classes.dex是否表明调试和导出的apk之间存在其他差异?
即使使用相同的代码,生成的classes.dex也不必与之前编译的版本具有相同的二进制内容。这是因为编译器优化代码的方式不同。
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |