导出 Android 应用程序是什么意思?

5
http://developer.android.com/tools/publishing/preparing.html上的说明指出,在发布Android应用程序之前,我应该先将其导出。在导出过程中执行了哪些步骤呢?
以下是我所了解的:
1. 在AndroidManifest.xml中,将中的android:debuggable设置为false。
2. APK由开发者(即我)的密钥签名,而不是内置的调试密钥。
3. 对已签名的APK运行zipalign。
我在我的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之间还有其他差异?
感谢下面Error 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 因此,我想我可以将第四个项目添加到这个列表中:
4. 在BuildConfig类(gen/.../BuildConfig.java)中,将DEBUG设置为false。
3个回答

5
除了你列出的内容,proguard在导出过程中也会运行。
如果您非常好奇classes.dex之间的差异性质,可以获取baksmali,解压您的apk并反编译classes.dex文件:
java -jar baksmali-1.3.3.jar classes.dex

这将创建一个 out/ 文件夹,其中包含您可以在旧版和新版之间进行差异比较的内容。
BuildConfig.DEBUG 标志不同的原因是因为您导出了发布版本和调试版本,如 SDK Release Notes Revision 17 中所述:
添加了一项功能,允许您仅在调试模式下运行某些代码。现在生成一个名为 BuildConfig 的类,其中包含一个 DEBUG 常量,该常量根据您的构建类型自动设置。您可以检查您的代码中的 (BuildConfig.DEBUG) 常量以运行仅限于调试的功能。

谢谢。我运行了baksmali并修改了我的问题。 - craig65535
BuildConfig在SDK版本17中被添加。http://developer.android.com/tools/sdk/tools-notes.html - Error 454

1

构建过程中会发生许多步骤,无论目标是debug还是release。这不是一个直接的答案,但我建议查看android-sdk/tools/ant/build.xml

打开文件后,搜索target name="release"。您将看到depends属性,其中列出了同一文件中将被调用的其他目标。您可以比较release运行的目标与debug目标。在每个目标内部,您可以看到具体运行了什么(例如android-sdk/platform-tools中的某些实用程序),以及确定是否运行某些内容的内容。

您还可以查看在调用目标时传递给外部实用程序的参数,这使您可以阅读有关该实用程序参数的文档,以查看特定步骤的情况。

需要注意的是,虽然您可能正在Eclipse中导出应用程序,但调查ant build.xml提供了一种系统地识别完整构建的每个步骤的方法。

作为一个复杂性的例子,如果你看一下目标-set-release-mode,你会发现有一种情况可以生成一个使用发布密钥而不是调试密钥签名的调试包。

0
即使代码相同,生成的classes.dex文件也不一定与之前编译的版本二进制完全相同。这是由于编译器优化代码的方式不同所致。那么,不同的classes.dex是否表明调试版和导出版apk之间存在其他差异呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接