Ant打包安卓apk(4)-多渠道(配置)打包方案

简介: 目标 虽然用不上渠道的概念, 其实其实和渠道的概念类似, 其实就是多几个可以变更的字段配置目前我需要一个boolean, 一个请求的url,config.url =http://10.1.64.42:9082/insure-pad/padServer.do,config.bool = false我想加快apk打包速度啊, 一方面是还在用eclipse, 二来如果用普通的gradle的farvor方式还是不够快,美团都有v2方案了, 自己搞一搞比较有意思而已META-INF目录下添加额外信息(不推荐)然后从代码中读取需要的字段即可探测敌情我的思考我写出了这种形式,htt

目标 虽然用不上渠道的概念, 其实其实和渠道的概念类似, 其实就是多几个可以变更的字段配置


目前我需要一个boolean, 一个请求的url,


config.url =http://10.1.64.42:9082/insure-pad/padServer.do,


config.bool = false


我想加快apk打包速度啊, 一方面是还在用eclipse, 二来如果用普通的gradle的farvor方式还是不够快,美团都有v2方案了, 自己搞一搞比较有意思而已


META-INF目录下添加额外信息(不推荐)



然后从代码中读取需要的字段即可


探测敌情


image.png

我的思考


我写出了这种形式,http://10.1.104.28:8081/insure-

pad/padServer.do,true, 间隔符用的是逗号, 因为需要和META-INF拼接后的区分,  


这样就能用String#split进行分割


可是在Windows环境下文件名不能包含\/:*?"<>|这九种字符


我查询Java的Unicode编码, 想用对应字符替代


  • 用166¦替代:


  • 用643ʃ替代/


但是从文件名在安卓上读取的字符想扑克牌的方片,识别不了, 此路不走罢


试试URL编码


URL编码 遵循下列规则: 每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上"%"。比如"",它的ascii码是92,92的十六进制是5c,所以""的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:"胡"的ascii码是-17670,十六进制是BAFA,url编码是"%BA%FA"。


但是由于我写的地址%2Chttp%3A%2F%2F10.1.64.42%3A9082%2Finsure-pad%2FpadServer.do%2Cfalse由于我试的是android 5.1的机器, 暂时判定存在特殊

字符串, 导致Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]


URL编码也不好走


通过文件名转成对应的字符串


其实解决的就是冒号 和 斜杠的转义, 写法如下


,http://10.1.64.42:9082/insure-pad/padServer.do,false


其中用[SLASH]  表示斜杠/ , 用[COLON] 表示冒号:


还是存在同样的问题, 存在特殊字符串, 会导致


Failure[INSTALL_PARSE_FAILED_NO_CERTIFICATES]


所以仍然解决不了问题, 心灰意冷了


APP文件的注释字段中添加渠道信息。(不推荐)



该种方式利用了APK本身是一种zip包的特点,在zip的注释字段中添加渠道信息,并提供了gradle插件。其中数据格式定义如下:


image.png


而添加的渠道信息如下所示:


image.png


该种方式较前两种方式实现相对麻烦些,特别是渠道信息的获取需要读取整个APK,解析注解,获取渠道信息,另外就是兼容性不是很好


AndroidManifest.xml中添加渠道信息 (推荐)


渠道信息将被添加到application结点下的子结点meta-data中,如下:

<application
          android:icon="@7F03000A"
          android:label="@7F060014"
          android:theme="@7F090083">
      <meta-data
            android:name="Goapk_Market"
            android:value="Goapk">
      </meta-data>


该种方式是目前应用最广的一种,比如友盟统计sdk,腾讯统计sdk等。其中name和value可以自由定义,比较灵活。APP可以利用系统API,方便的获取渠道信息,示例代码如下:

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
String channel = appInfo.metaData.getString("Goapk_Market");


这里采用的是网易云捕精英大队开发了多渠道打包工具,该工具主要基于manifest和meta渠道包制作方式,实现快速批量多渠道包的生成。


命令行下,运行:java -jar makechannels.jar 查看版本号与使用方法:


image.png


配置的channels.txt(以|分割, 第一个是配置value, 第二个是配置key, 第三个是配置输出的文件名)

false,http://10.1.104.28:8081/xxx|CUSTOM_KEY|保全技术
true,http://10.1.104.28:8099/yyy|CUSTOM_KEY|技术微服务


image.png


插入成功, 很靠谱


推荐采用通用性较好的manifest方式


java -jar makechannels.jar -apk xxx.apk -config channels.txt -out outputApk


接下来得重新签名, 这里注意安卓从Android 7.0开始引入了v2签名,但是由于app需要兼容之前的机器,所以也必须进行v1签名才可以。如果只进行v2签名,将导致在android7.0之前的机器安装失败;我尝试Java自带的jarsigner可是报错META-INF/MANIFEST.MF has invalid digest for AndroidManifest.xml, 后来查资料发现还是用网易提供的极速签名工具点击下载靠谱


java -jar apksigner.jar -appname 测试 -keystore debug.keystore -pswd android -alias androiddebugkey -aliaspswd android -v1 true -v2 false in.apk


  • -appname 待签名的应用程序名,可选,但建议不同的 APP 填上对应的 app 名(可以为中文),有助于【加速】


  • -keystore:后跟.keystore 签名文件


  • -alias:后跟签名别名


  • -pswd:后跟对应签名的密码,例如这里是 android 可选,如果不填,则签名的时候需要手动输入
    最后跟待签名的 apk 路径或者目录路径,如果跟的是目录则是批量签名。
    签名后如果包能正确安装到手机(无需运行)则没有问题,如果安装失败请用命令安装 :adb install apkfile查看出错信息


最后一步zipalign优化


zipalign -v -f [alignmentSize] in.apk out.apk


(可选)再进行v2签名。


java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] -v1 false -v2 true out.apk


参考



  • 详解高速神器python脚步打包android apk,超级快!!(打包系列教程之六) - CSDN博客

https://blog.csdn.net/javazejian/article/details/50760590







目录
相关文章
|
8月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
821 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1676 83
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
976 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
582 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】
|
数据安全/隐私保护 Android开发
Android bundetool 转换 .aab 为apk 步骤
Android bundetool 转换 .aab 为apk 步骤
1788 0
Android bundetool 转换 .aab 为apk 步骤
|
SQL 人工智能 算法
Android性能优化之应用瘦身(APK瘦身)
Android性能优化之应用瘦身(APK瘦身)
|
XML API Android开发
android S 上 安装apk出现android.os.FileUriExposedException
android S 上 安装apk出现android.os.FileUriExposedException
616 6
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
1281 0