导出Android应用程序的具体用途是什么?
上的说明指出,在向公众发布android应用程序之前,我应该先将其导出。导出过程中执行的步骤是什么 以下是我所知道的:导出Android应用程序的具体用途是什么?,android,eclipse,build,release,apk,Android,Eclipse,Build,Release,Apk,上的说明指出,在向公众发布android应用程序之前,我应该先将其导出。导出过程中执行的步骤是什么 以下是我所知道的: android:debugable in在AndroidManifest.xml中设置为false APK由开发人员(my)密钥签名,而不是内置调试密钥 zipalign在已签名的APK上运行 我在AndroidManifest.xml中将android:debugable手动设置为false,并比较了调试和导出的apk。以下是唯一不同的文件: 二进制文件.././releas
二进制文件.././release/x//classes.dex和x/classes.dex不同
二进制文件.././release/x//META-INF/CERT.RSA和x/META-INF/CERT.RSA不同
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
--
.字段公共静态最终调试:Z
因此,我想我可以在这个列表中添加第四项:即使使用相同的代码,生成的classes.dex也不必与以前编译的版本二进制相同。这是由于编译器优化代码的方式不同造成的。除了您列出的内容之外,proguard在导出过程中也会运行 如果您对classes.dex中差异的性质非常好奇,可以抓取、解压缩apk并反编译classes.dex文件:
java -jar baksmali-1.3.3.jar classes.dex
这将创建一个out/文件夹,其中的内容可以在旧/新之间进行区分
BuildConfig.DEBUG标志不同的原因是您导出的版本与调试版本不同,如中所述:
添加了一个功能,允许您仅在调试模式下运行某些代码。
构建现在生成一个名为BuildConfig的类,该类包含调试
根据生成类型自动设置的常量。你
可以检查代码中要运行的(BuildConfig.DEBUG)常量
只调试函数
无论目标是
debug
还是release
,构建都有许多步骤。这不是一个直接的答案,但我建议看一下androidsdk/tools/ant/build.xml
打开文件后,搜索target name=“release”
。您将看到dependens
属性,该属性列出了将被调用的同一文件中的其他目标。您可以将release
运行的目标与debug
目标进行比较。在每个目标内部,您可以看到具体运行的是什么(例如android sdk/platform tools
中的一些实用程序),以及确定是否运行的内容
您还可以查看在目标调用期间传递给外部实用程序的参数,该调用允许您阅读有关实用程序这些参数的文档,以查看特定步骤的具体情况
需要注意的是,当您可能在eclipse中导出应用程序时,研究antbuild.xml提供了一种方法,可以系统地识别完整构建将执行的每个步骤
例如,如果您查看目标
-set release mode
,您可以看到一个实例,其中可以生成一个使用发布密钥而不是调试密钥签名的调试包。谢谢。我运行baksmali并修改了我的问题。BuildConfig被添加到SDK版本17中