
有没有一种简单的方法可以为不同的处理器架构为Android构建单独的APK文件,使用旧的ANT或新的Gradle构建过程?我这样做的方法是构建一个包含所有支持的本地库的“胖”APK,然后将它们拆分为单独的APK,就像我explained here.但是,似乎应该有一个更直接的方法来做到这一点……
解决方法:
我决定在这里重新发布我的answer from elsewhere,所以这一切都在一页上以方便访问.如果这违反SO政策,请告诉我并从此处删除此帖子.
以下是关于如何为每个支持的处理器架构创建单独的APK文件的想法:
>使用您使用的任何工具构建一个“胖”APK,包含您支持的所有本机代码库,例如armeabi,armeabi-v7a,x86和mips.我将其称为’原始’APK文件.
>将原始APK解压缩到一个空文件夹,使用任何zip / unzip实用程序,最好使用命令行工具,以便以后可以使用shell脚本或批处理文件自动执行.实际上,正如我在下面发布的示例批处理脚本所示,我只是使用命令行zip / unzip工具直接 *** 作APK,而不是完全解压缩,但效果是一样的.
>在原始APK未压缩到的文件夹中(或在原始.apk / .zip中),删除meta-inf子文件夹(这包含签名,我们需要在所有修改后重新签名APK,所以必须删除原来的meta-inf).
>更改为lib子文件夹,并删除新APK文件中不需要的任何处理器体系结构的子文件夹.例如,只留下’x86’子文件夹为Intel Atom处理器制作APK.
>重要提示:每个APK适用于不同的体系结构,AndroIDManifest.xml中必须具有不同的“versionCode”编号,以及例如版本代码. armeabi-v7a必须略高于armeabi(在这里阅读Google创建多个APK的说明:http://developer.android.com/google/play/publishing/multiple-apks.html).不幸的是,清单文件在APK中以编译的二进制形式存在.我们需要一个特殊的工具来修改那里的versionCode.见下文.
>使用新版本代码修改清单后,删除不必要的目录和文件,重新压缩,签名并对齐较小的APK(使用AndroID SDK中的jarsigner和zipalign工具).
>对需要支持的所有其他体系结构重复此过程,创建具有略微不同版本代码(但版本名称相同)的较小APK文件.
唯一突出的问题是在二进制清单文件中修改’versionCode’的方法.很长一段时间我找不到解决方案,所以最后不得不坐下来动摇我自己的代码来做到这一点.作为起点,我采用了Java编写的Prasanta Paul,http://code.google.com/p/apk-extractor/的APKExtractor.我是旧学校,对C更加舒服,所以用C编写的小实用程序’aminc’现在在GitHub上:
https://github.com/gregko/aminc
我在那里发布了整个Visual Studio 2012解决方案,但整个程序是一个.cpp文件,可能可以在任何平台上编译.这是一个示例windows批处理脚本文件,用于将名为atVoice.apk的“胖”apk拆分为4个较小的文件,名为atVoice_armeabi.apk,atVoice_armeabi-v7a.apk,atVoice_x86.apk和atVoice_mips.apk.我实际上将这些文件提交给Google Play(请参阅我的应用程序https://play.google.com/store/apps/details?id=com.hyperionics.avar)并且完美无缺:
@echo offREM My "fat" apk is named atVoice.apk. Change below to whatever or set from %1set apkfile=atVoicedel *.apkREM My tools build atVoice-release.apk in bin project sub-dir. REM copy it herefor splitting.copy ..\bin\%apkfile%-release.apk %apkfile%.apkzip -d %apkfile%.apk meta-inf/*REM ------------------- armeabi ------------------------unzip %apkfile%.apk AndroIDManifest.xmlcopy/y %apkfile%.apk %apkfile%.zipzip -d %apkfile%.zip lib/armeabi-v7a/* lib/x86/* lib/mips/*aminc AndroIDManifest.xml 1zip -f %apkfile%.zipren %apkfile%.zip %apkfile%_armeabi.apkjarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore d:\users\greg\.androID\Hyperionics.keystore -storepass MyPass %apkfile%_armeabi.apk MyKeynamezipalign 4 %apkfile%_armeabi.apk %apkfile%_armeabi-aligned.apkdel %apkfile%_armeabi.apkren %apkfile%_armeabi-aligned.apk %apkfile%_armeabi.apkREM ------------------- armeabi-v7a ---------------------copy/y %apkfile%.apk %apkfile%.zipzip -d %apkfile%.zip lib/armeabi/* lib/x86/* lib/mips/*aminc AndroIDManifest.xml 1zip -f %apkfile%.zipren %apkfile%.zip %apkfile%_armeabi-v7a.apkjarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore d:\users\greg\.androID\Hyperionics.keystore -storepass MyPass %apkfile%_armeabi-v7a.apk MyKeynamezipalign 4 %apkfile%_armeabi-v7a.apk %apkfile%_armeabi-v7a-aligned.apkdel %apkfile%_armeabi-v7a.apkren %apkfile%_armeabi-v7a-aligned.apk %apkfile%_armeabi-v7a.apkREM ------------------- x86 ---------------------copy/y %apkfile%.apk %apkfile%.zipzip -d %apkfile%.zip lib/armeabi/* lib/armeabi-v7a/* lib/mips/*aminc AndroIDManifest.xml 9zip -f %apkfile%.zipren %apkfile%.zip %apkfile%_x86.apkjarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore d:\users\greg\.androID\Hyperionics.keystore -storepass MyPass %apkfile%_x86.apk MyKeynamezipalign 4 %apkfile%_x86.apk %apkfile%_x86-aligned.apkdel %apkfile%_x86.apkren %apkfile%_x86-aligned.apk %apkfile%_x86.apkREM ------------------- MIPS ---------------------copy/y %apkfile%.apk %apkfile%.zipzip -d %apkfile%.zip lib/armeabi/* lib/armeabi-v7a/* lib/x86/*aminc AndroIDManifest.xml 10zip -f %apkfile%.zipren %apkfile%.zip %apkfile%_mips.apkjarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore d:\users\greg\.androID\Hyperionics.keystore -storepass MyPass %apkfile%_mips.apk MyKeynamezipalign 4 %apkfile%_mips.apk %apkfile%_mips-aligned.apkdel %apkfile%_mips.apkren %apkfile%_mips-aligned.apk %apkfile%_mips.apkdel AndroIDManifest.xmldel %apkfile%.apk:done额外的保障措施
我在Google Play开发者控制台上收到了一些错误报告,指出无法找到本机方法.最有可能的原因是用户安装了错误的APK,例如ARM设备上的Intel或MIPS APK.为我的应用添加了额外的代码,针对Build.cpu_ABI检查VersionCode编号,然后在出现不匹配的情况下显示错误消息,要求用户从Google Play(或我自己的网站,我发布“胖”APK)重新安装)在这种情况下.
格雷格
总结以上是内存溢出为你收集整理的Android – 为不同的处理器架构构建单独的APK全部内容,希望文章能够帮你解决Android – 为不同的处理器架构构建单独的APK所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)