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







目录
相关文章
|
1月前
|
JavaScript Android开发
【问题篇】打包Vue-cli3创建的vue项目成App的apk文件
【问题篇】打包Vue-cli3创建的vue项目成App的apk文件
25 0
|
3月前
|
JavaScript Android开发
AutoJs4.1.0实战教程---js文件打包发布成APK文件
AutoJs4.1.0实战教程---js文件打包发布成APK文件
98 0
AutoJs4.1.0实战教程---js文件打包发布成APK文件
|
3月前
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
26 0
|
2月前
|
算法 数据库 Android开发
安卓逆向 -- APK文件结构
安卓逆向 -- APK文件结构
21 0
|
2月前
|
算法 Java Android开发
安卓逆向 -- 调用其他APK的SO文件
安卓逆向 -- 调用其他APK的SO文件
17 0
|
2月前
|
Java 开发工具 Android开发
cordova打包android apk
cordova打包android apk
15 0
|
2月前
|
Android开发 数据安全/隐私保护
打包 android apk签名
打包 android apk签名
19 0
|
2月前
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】
|
6月前
|
SQL 人工智能 算法
Android性能优化之应用瘦身(APK瘦身)
Android性能优化之应用瘦身(APK瘦身)
|
6月前
|
数据安全/隐私保护 Android开发
Android bundetool 转换 .aab 为apk 步骤
Android bundetool 转换 .aab 为apk 步骤
264 0
Android bundetool 转换 .aab 为apk 步骤