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文件

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

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

时间: 2024-07-29 08:32:52

android 二次打包完成apk多渠道打包的方法的相关文章

Android studio 3.0上进行多渠道打包遇到的问题小结(超简洁版)

Error:All flavors must now belong to a named flavor dimension. The flavor 'xiaomi' is not assigned to a flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html Android studio 3.0上进行多渠道打包时编译时出现这个错误 多渠道

Android Studio系列教程六--Gradle多渠道打包

转:  http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/     由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了. 友盟多渠道打包 废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段: <meta-data android:name="

Android Studio多渠道打包套路

说到多渠道,这里不得不提一下友盟统计,友盟统计是大家日常开发中常用的渠道统计工具,而我们的打包方法就是基于友盟统计实施的.按照友盟官方文档说明,渠道信息通常需要在AndroidManifest.xml中配置如下值: <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/> 上面的value值Channel_ID就是渠道标识.我们的期望的就是在编译时候这个值能够自动变化以满足区

Android多渠道打包的方法步骤

本文介绍了Android多渠道打包的方法步骤,分享给大家,具体如下: 1.生成签名文件 点击 Build -> Generate Signed APK: 2.创建一个签名 红色填写部分需要认真填写,并牢记,其余部分随意填写 有了签名,单个app打包我就不详细说了,具体说下多渠道打包的步骤 2.多渠道打包 作用:就是根据不同的渠道值,去具体分析每个渠道的用户情况 步骤一: 在AndroidManifest.xml的application标签里添加一个meta-data标签定义 <meta-dat

Android Studio使用教程(六):Gradle多渠道打包_Android

由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了. 友盟多渠道打包 废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段: 复制代码 代码如下: <meta-data     android:name="UMENG_CHANNEL"     android:value="Channel_ID" /&g

Android Studio(十一):代码混淆及打包apk

Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Android Studio编码 Android Studio(四):Android Studio集成Genymotion Android Studio(五):修改Android Studio项目包名 Android Studio(六):Android Studio添加注释模板 Android Studio

Android 的apk重新打包签名后,安装成功后,手机中转屏(横竖屏切换)软件强行自动关闭了

问题描述 Android 的apk重新打包签名后,安装成功后,手机中转屏(横竖屏切换)软件强行自动关闭了 Android 的apk重新打包.签名后,安装成功后,手机中转屏(横竖屏切换)软件强行自动关闭了什么情况,我用apktool打包签名的. 解决方案 最好是接上调试,看看出错时的 logcat 的输出.如果是所有手机都出错,还比较好解决的,就怕重现不了. 解决方案二: 这种情况应该是不支持或不兼容. 解决方案三: activity在转屏的时候会执行onResume(),你可能是有一些变量在转屏

.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译

原文:.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译 apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包apk有几种方式可取 一.最简单的方法(类似我们的winfrom) 只要我们调试或者运行过项目,在项目下的bin debug下就有同名apk文件了(Eclipse)下是这样的.在Android下变成了\app\build\apk下了 当然我们不能把这个apk放在商店.没有签名会被人家的apk替换 二

Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解_Android

随着工程越来越复杂,项目越来越多,以及平台的迁移(我最近就迁了2回),还有各大市场的发布,自动化编译android项目的需求越来越强烈,后面如果考虑做持续集成的话,会更加强烈.    经过不断的尝试,在ubuntu环境下,以花界为例,我将一步一步演示如何使用命令行,使用ant编译android项目,打包多渠道APK.    要点:    (1). 编译android的命令使用    (2). ant基本应用    (3). 多项目如何编译(包含android library)    (4). 如