android 二次打包完成apk多渠道打包的方法

android 二次打包完成apk多渠道打包的方法,第1张

概述本文介绍将渠道号写入assets文件里面,通过解压apk修改assets里的文件,用Java代码生成jarsigner脚本并运行脚本二次打包的方式来获取新的渠道包

本文介绍将渠道号写入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文件

通过java代码将apk解压出来、 通过Zipfile来解压文件 解压完后删除签名文件

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,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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的android 二次打包完成apk多渠道打包的方法全部内容,希望文章能够帮你解决android 二次打包完成apk多渠道打包的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存