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

 更新时间:2017年10月30日 09:18:42   作者:君莫醉  
本篇文章主要介绍了android 二次打包完成apk多渠道打包的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

  1. 通过java代码将apk解压出来、
  2. 通过ZipFile来解压文件
  3. 解压完后删除签名文件

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

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

相关文章

  • android换肤功能 如何动态获取控件中背景图片的资源id?

    android换肤功能 如何动态获取控件中背景图片的资源id?

    这篇文章主要为大家详细介绍了android换肤功能中如何动态获取控件中背景图片的资源id? ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android实现弹出列表、单选、多选框

    Android实现弹出列表、单选、多选框

    这篇文章主要为大家详细介绍了Android实现弹出列表、单选、多选框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • android dialog根据弹窗等级排序显示的示例代码

    android dialog根据弹窗等级排序显示的示例代码

    这篇文章主要介绍了android dialog根据弹窗等级排序显示,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Android Activity之间相互调用与传递参数的原理与用法分析

    Android Activity之间相互调用与传递参数的原理与用法分析

    这篇文章主要介绍了Android Activity之间相互调用与传递参数的原理与用法,较为详细的分析了Android组件的构成以及Activity的创建、调用、切换等相关操作技巧,需要的朋友可以参考下
    2016-08-08
  • Flutter实现一个支持渐变背景的Button示例详解

    Flutter实现一个支持渐变背景的Button示例详解

    这篇文章主要为大家介绍了Flutter实现一个支持渐变背景的Button示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android端权限隐私的合规化处理实战记录

    Android端权限隐私的合规化处理实战记录

    大家应该都发现了,现在很多应用市场都要求应用上架需要用户协议,这篇文章主要给大家介绍了关于Android端权限隐私合规化处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • android实现session保持简要概述及实现

    android实现session保持简要概述及实现

    其实sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,感兴趣的你可以参考下本文或许对你有所帮助
    2013-03-03
  • Android 自定义标题栏的实例详解

    Android 自定义标题栏的实例详解

    这篇文章主要介绍了 Android 自定义标题栏的实例详解的相关资料,希望通过本文能帮助到大家,让大家实现这样类似的功能,需要的朋友可以参考下
    2017-10-10
  • Android Socket实现多个客户端即时通信聊天

    Android Socket实现多个客户端即时通信聊天

    这篇文章主要为大家详细介绍了Android Socket实现多个客户端即时通信聊天,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 详解Android使用@hide的API的方法

    详解Android使用@hide的API的方法

    这篇文章主要介绍了详解Android使用@hide的API的方法的相关资料,希望通过本文大家能理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09

最新评论