时间:2021-05-20
本文介绍将渠道号写入assets文件里面,通过解压apk修改assets里的文件,用Java代码生成jarsigner脚本并运行脚本二次打包的方式来获取新的渠道包
此打包方式一个渠道包只需要5秒左右,可实现快速打渠道包
对于为了在assets获取渠道号来打渠道包的方法,其实很简单,你只要知道apk里面装的什么东西,就会了
将apk用压缩方式解压,你会得到像
这样的文件列表,其中就有assets文件夹;当然前提条件是你在项目中必须创建assets文件夹。既然有了这个文件夹,安卓里面又能通过代码获取这个文件夹里面的文件,并读取文件:
private static String getChannel(Context context){ try { InputStream in = context.getAssets().open("qudao.txt"); int size = in.available(); byte[] buffer = new byte[size]; in.read(buffer); in.close(); String txt = new String(buffer, "utf-8"); Log.d("qudaobiaoji:",txt); return txt; } catch (IOException e) { e.printStackTrace(); } return "未知"; }那么接下来就只需要通过修改里面的文件,并重新打包,签名来打渠道包了。
如何修改里面的文件,并打包签名,我特地写了一个打包工具,通过java工程生成jar,通过命令行运行jar读取配置文件然后生成打包脚本,自动运行脚本进行打包
介绍
在java工程中的入口是
main函数,
public static void main(String[] args) {}以前一直不知道args是干嘛的,后来通过命令行传入参数,才知道args可以带入命令行的参数
1.读取配置文件:
通过文件的方式传入要打的渠道包,及渠道包的名字,渠道号
读文件操作很简单,就是通过流的形式,不多介绍,可以自行阅读源码
文件配置:
app_path=app-release_aligned_signed.apk;keystore=ej_v3.jks;keyAlias=ej_v3;keyPassword=123456;storePassword=123456;contents=优亿,魅族;apkname=youyi,meizu;2.解压apk文件
3.替换渠道号文件
获取解压后的assets路径,并修改里面的渠道文件内容,
//------修改内容 String content = contents[i]; String apkn = apkNames[i]; buffer.setLength(0); String path = buffer .append(prefixName).append(ZipUtil.UPDATE_PATH_NAME).toString(); System.out.println("path:"+path); br = new BufferedReader(new InputStreamReader(new FileInputStream(path),"UTF-8")); while ((br.readLine()) != null) { osw = new OutputStreamWriter(new FileOutputStream(path),"UTF-8"); osw.write(content, 0, content.length()); osw.flush(); }4.重新压缩生成.apk文件,此文件是未签名文件
ZipUtil.compress(prefixName,targetPath+"\\"+unsing+"\\"+apkn+"_unsin.apk");5.生成签名脚本内容
复制代码 代码如下:
batStr+="jarsigner -verbose -keystore "+keystore+" -signedjar "+targetPath+"\\"+sing+"\\"+apkn+"_sin.apk "+targetPath+"\\"+unsing+"\\"+apkn+"_unsin.apk"+" "+keyAlias+"\n";
6.运行签名脚本
public static void runbat(String batName) { String cmd = "cmd /c start "+ batName;// pass try { Process ps = Runtime.getRuntime().exec(cmd); ps.waitFor(); } catch (IOException ioe) { ioe.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("child thread donn"); }有兴趣的同学可以看下源码,在增加别的渠道的情况下不需要另外配置gradle参数,直接修改配置文件,运行脚本就行了
今天网上查了下jarsigner打包命令,发现可以直接在脚本中输入密码,可直接打包,不用反复输入密码
脚本:
jarsigner -verbose -keystore test.jks -storepass 123456 -keypass 123
456 -signedjar target\sing\youyi_sin.apk target\unsing\youyi_unsin.apk test
源码地址:https://github.com/dengzhi00/ApkQuDao
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
作为Android开发者,工作中少不了要反编译别人的apk,当然主要目的还是为了学习到更多,取彼之长,补己之短。今天就来总结一下Android反编译和二次打包的
我是因为构建多渠道包的时候有这个需求,平常工作多个渠道包频繁的打包,总会忘记versioncode提高一下,从而打包出来的apk无法覆盖原先的安装包,这里只介绍
1.替换符的使用(1)在app-android-defaultConfig(或者多渠道打包)下面可以这样使用android{defaultConfig{mani
1、什么是多渠道打包 在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。在安装包中添加不同的标识
本文介绍了Android多渠道打包的方法步骤,分享给大家,具体如下:1.生成签名文件点击Build->GenerateSignedAPK:2.创建一个签名红色填