开头声明:
这个多渠道打包插件,是使用命令行来运行的。不依赖任何IDE的,你的开发环境是Eclipse还有Android Studio都是可以的。不需要APK的源代码,仅仅需要一个打包好的APK就可以。(一般是正式版本的并且已经签名和混淆的APK文件)。速度大约是:Rate = 10apk/20sec(300apk/10min)
开源地址:https://github.com/ihrthk/android-gradle-mulchannel-plugin
参考地址:http://tech.meituan.com/mt-apk-packaging.html
如果能正确显示gradle的帮助信息,说明机器上已经安装了gradle。这时,你可以跳过安装Gradle
,进行下一步。否则,你需要按照安装Gradle
一步一步操作,把Gradle安装到自己的计算机里。
注意:我这里显示的Gradle版本是2.7,要保证自己计算机安装的gradle是2.1以上才行。因为配置mulchannel插件的时候使用了plugins关键字,这个关键字是Gradle 2.1添加一种简单写法。代替了原来classpath和apply plguin两个关键字的用法。
打开gradle的官网gradle.org(由于现在正在从gradle.org,往gradle.com中迁移,以后官网会变成gradle.com,请大家注意)
找到并点击右上角的Download,推荐大家下载Complete distribution。这里包括二进制执行文件,源码,还有文档。
也可以直接使用浏览器打开https://services.gradle.org/distributions/gradle-2.10-all.zip进行下载
解压gradle-2.10-all.zip文件,可以看到这里有一个bin目录
在我的桌面上的计算机,点击右键。
点击高级设置
在点击环境变量
在系统变量里面找到Path并打开
最后在bin目录添加到环境变量,就OK了。
打开cmd,在任意目录下。执行gradle,看一下是否可以显示gradle的帮助信息。
找到那个要进行多渠道打包的APK文件,在其同级目录下建立一个build.gradle的文件。
打开build.gradle文件,输入配置的脚本。
buildscript {
repositories {
mavenLocal()
jcenter {
url 'http://jcenter.bintray.com'
}
}
}
plugins {
id "me.zhangls.mulchannel" version "0.0.2"
}
打开build.gradle文件,接着写
mulchannel {
//APK文件的路径,相对路径
inputFile = file('lite-cmxj-debug.apk')
//APK解压之后的目录,可选
tempDir = file('temp')
//多渠道APK输出之后的路径
outputDir = file('out')
//渠道号列表
channels = ["qihu360","baidu","yingyongbao","wandoujia","taobao","xiaomi","nearme","anzhuo","anzhi","meizu"]
}
public static String getChannel(Context context) {
ApplicationInfo appinfo = context.getApplicationInfo();
String sourceDir = appinfo.sourceDir;
String ret = "";
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.startsWith("META-INF/mulchannel")) {
ret = entryName;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String[] split = ret.split("_");
if (split != null && split.length >= 2) {
return ret.substring(split[0].length() + 1);
} else {
return "";
}
}