首页 > 代码库 > Jenkins+Gradle+Android+多渠道包 (一)

Jenkins+Gradle+Android+多渠道包 (一)

目的是QA可以自己登陆Jenkins选择要构建的版本,结果以邮件的方式通知(包括构建信息,静态代码分析结果,APK下载链接,二维码等),然后存档。

  • 构建使用Gralde。
  • 打包,生成二维码,存档是Python脚本实现。

打多渠道包

打多渠道包有很多方法,我用的是,生成一个签名后的APK,然后在APK包种META-INF目录下添加一个空文件,文件名包含渠道信息,Android中读这个文件来获取信息,通过代码的方式设置给友盟。这样可以避免反复编译,签名。
修改脚本 Python:

def generate( channel_name ):
    shutil.copy(apk_file, target_apk)
    zipped = zipfile.ZipFile(target_apk, 'a', zipfile.ZIP_DEFLATED)
    content_file = "META-INF/Channel_"+channel_name+".txt"
    zipped.write(empty_content, content_file)
    zipped.close()
    return target_apk

怎样取渠道信息然后循环修改就看个人情况了

Android中读取

private static String getContent(Context context, String channelKey){
    String sourceDir = context.getApplicationInfo().sourceDir;
    String key = "META-INF/" + channelKey;
    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(key)) {
                ret = entryName;
                break;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (zipfile != null) {
            try {
                zipfile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    String[] split = ret.split("_");
    String channel = "DEV";
    if (split != null && split.length >= 2) {
        channel = ret.substring(split[0].length() + 1);
    }
    return channel;
}

给友盟设置给友盟

AnalyticsConfig.setChannel(String channel)


Jenkins+Gradle+Android+多渠道包 (一)