MutiChannelPackup android多渠道N种方法android多渠道N种方法

程序名称:MutiChannelPackup

授权协议: Apache

操作系统: 跨平台

开发语言: Java

MutiChannelPackup 介绍

 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(channelPrefix); String channel = ""; if (split != null && split.length >= 2) {             channel = ret.substring(key.length());         } return channel;     } 2、在build-config.properties中配置渠道识别前缀(可选) 3、把AndroidChannelBuild.war上传到Java服务CHANNEL_VALUE器上 4、输入 5、上传文件、填写渠道前缀(可选)、输入渠道名称 6、下载打包完成的渠道包 ## [](https://github.com/pengjianbo/MutiChannelPackup#gradle版)Gradle版 * 支持manifest渠道配置 * 使用简单不易出错 ### [](https://github.com/pengjianbo/MutiChannelPackup#manifest渠道配置)manifest渠道配置 网络上有好多人都是通过添加 android {       productFlavors {         xiaomi {}         360 {}         baidu {}         wandoujia {}     }       productFlavors.all {          flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]      } } 代码实现的多渠道打包,这样有个问题,我们项目渠道号经常变,每个版本都有不同的渠道号,不停的在增加导致gradle文件就非常长。我今天特别为这个事情纠结了一上午发现还可以这么写: productFlavors {         for (int i = 0 ; i  ... 4、执行打包./gradlew assembleRelease或通过android studio->generate signed apk打包 5、在module目录下可以看到所有的渠道包 ## [](https://github.com/pengjianbo/MutiChannelPackup#python版)Python版 * 支持META-INF渠道识别 * 极速生成渠道包 * 使用简单不易出错 ### [](https://github.com/pengjianbo/MutiChannelPackup#使用方法-1)使用方法 1、在android中获取渠道名:     /**  * 友盟配置  */ private void umengConfig() { String channel = getChannelFromApk(this, "channel-"); if (StringUtils.isEmpty(channel)) {             channel = "paojiao";         } if ( Constants.DEBUG ) { Toast.makeText(IApplication.this, "当前渠道:" + channel, Toast.LENGTH_SHORT).show();         } AnalyticsConfig.setChannel(channel);     } /**  * 从apk中获取版本信息  * @param context  * @param channelPrefix 渠道前缀  * @return  */ public static String getChannelFromApk(Context context, String channelPrefix) { //从apk包中获取 ApplicationInfo appinfo = context.getApplicationInfo(); String sourceDir = appinfo.sourceDir; //默认放在meta-inf/里, 所以需要再拼接一下 String key = "META-INF/" + channelPrefix; 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(channelPrefix); String channel = ""; if (split != null && split.length >= 2) {             channel = ret.substring(key.length());         } return channel;     } 2、配置channels-config.ini文件 [Build-Config] #配置apk路径 apk.path = /Users/pengjianbo/Documents/dev/android_dev/workspace/GradleBuildChannels/app/demo.apk #配置渠道识别前缀 channel.prefix = channel- #配置渠道列表 channel.list = baidu,qq,360,paojiao 3、执行build-channels-script.py脚本 python build-channels-script.py 4、可以看到生成了一个apks_{apk file name}的文件夹 ## [](https://github.com/pengjianbo/MutiChannelPackup#jar版)Jar版 * 支持META-INF渠道识别 * 极速生成渠道包 * 使用简单不易出错 ### [](https://github.com/pengjianbo/MutiChannelPackup#使用方法-2)使用方法 1、在android中获取渠道名:     /**  * 友盟配置  */ private void umengConfig() { String channel = getChannelFromApk(this, "channel-"); if (StringUtils.isEmpty(channel)) {             channel = "paojiao";         } if ( Constants.DEBUG ) { Toast.makeText(IApplication.this, "当前渠道:" + channel, Toast.LENGTH_SHORT).show();         } AnalyticsConfig.setChannel(channel);     } /**  * 从apk中获取版本信息  * @param context  * @param channelPrefix 渠道前缀  * @return  */ public static String getChannelFromApk(Context context, String channelPrefix) { //从apk包中获取 ApplicationInfo appinfo = context.getApplicationInfo(); String sourceDir = appinfo.sourceDir; //默认放在meta-inf/里, 所以需要再拼接一下 String key = "META-INF/" + channelPrefix; 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(channelPrefix); String channel = ""; if (split != null && split.length >= 2) {             channel = ret.substring(key.length());         } return channel;     } 2、配置build-config.properties文件 #配置apk路径 apk.path = /Users/pengjianbo/Documents/dev/android_dev/workspace/GradleBuildChannels/app/demo.apk #配置渠道识别前缀 channel.prefix = channel- #配置渠道列表 channel.list = baidu,qq,360,paojiao 3、执行JarBuild.jar java -jar JarBuild.jar 4、可以看到在apk.path文件夹下生成了所有渠道包 # [](https://github.com/pengjianbo/MutiChannelPackup#bat版)BAT版 **Upcoming...**

MutiChannelPackup 官网

https://github.com/pengjianbo/MutiChannelPackup

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


BBGestureBack Full screen return gesture(全屏手势返回 滑动返回 pop 动画效果) iOS 侧滑返回
Framework7 或者叫 F7 是全功能的绑定 iOS 7 应用的 HTML 框架。Framework7 是免费开源的 HTML
iOS 调试库,支持 iOS8+,无需添加任何代码,方便 iOS 开发和测试。 屏幕截图 使用教程
DarkModeKit是在Apple官方的深色模式发布之前设计和开发的。 它提供了一种机制来支持iOS 11+(包括iOS 13)上的应用程序的暗模式。
SimpleNote iOS 版客户端。SimpleNote 是一款在多平台上发布的笔记应用。 开发准备条件:
Kivy iOS,此工具旨在为 iOS 编译必要的库以运行应用程序并管理 Xcode 项目的创建。
TYDownloadManager是一个iOS的文件下载管理器包,可以提示下载过程中的最新进展和状态的变化。
mruby是一款轻量级的Ruby实现,遵循ISO标准。它可以以解释的形式或者在VM上编译和执行形式运行。
因为涉嫌危害消费者的隐私问题,苹果公司决定停止使用原有的UDID系统,移动应用软件开发者们正在竞相寻找新的替代方案。移动应用销售平台Appsfire目前推出了OpenUDID,它是一个开源版本的UDID。Appsfire声称他们已
EasyIOS 开源至今已经1周年,全新Swift版本今日发布,支持利用HTML来开发IOS应用,支持模拟器实时预览,基于MVVM思想,HTML数据绑定,反射所有
在 iOS 领域使用 Pod 来进行组件化开发时常常需要手动进行一系列的操作,来实现Pod 组件的更新目的。特别是一些业务关联性比较强的 Pod
PokerCard,一款 iOS 多样式弹窗开源库。 Basic Usage import PokerCard class ViewController: UIViewController {
MiaowShow MiaowShow是高仿《喵播APP》的iOS视频直播项目。 项目具体讲解地址 iOS视频直播初窥:高仿<喵播APP>
ZJAttributedText 是高性能轻量级富文本框架 前言 如果遇到上面一个需求, 你会怎么处理, 若干个 UILabel + UIImageView? NSAttributedString拼接? CoreText?
DynamicCocoa,是滴滴 App 架构组自研的 iOS 动态化方案,可以让现有的 Objective-C 代码转换生成中间代码(JS),下发后动态执行。滴滴客户端 App 架构团队表示正在积极准备相关事项,计划于 2017 年初开源。
ObjectiveSupport aims to bring some of the popular Rubyisms found in ActiveSupport to Objective-C. This project originated as a component of
StyleKit 是能让你使用一个简单的 JSON 文件美化你的应用的微框架。 它如何工作?
XCActionBar 是一个用于 Xcoded 的通用生产工具。
Social Go是一个基于iOS平台,在人群中获取小精灵的雷达和匿名聊天App。它使用Swift
Swift版本最新发布 : https://github.com/EasyIOS/EasyIOS- Swift 全新基于MVVM(Model-View-ViewModel)编程模式架构,开启EasyIOS开发函数式编程新篇章。