一、简介:
Android的App开发好了,要上线不同的平台,那么需要打一个个的渠道包。如果一个一个打包,那是很麻烦且淡腾。比如我们之前的一个App,上线8个平台,91、anzhi、appchina、baidu、chinapnr、gfan、hiapk和tencent。所以我们考虑到使用批量打渠道包工具。
二、方法:
使用第三方插件打包,简单、快捷且速度。
大家可以看看他的帮助文档和插件的下载。
二、配置文件:
1.在bom.xml 文件中的配置
<?xml version="1.0" encoding="UTF-8"?>
<project>
<dependencies>
<dependency>
<groupId>
com.marsor.android.common
</groupId>
<artifactId>
MarsorUtils
</artifactId>
<version>
1.0.0-SNAPSHOT
</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>
MarsorRepository
</id>
<name>
Marsor Maven Mirror
</name>
<url>
http://maven.marsorstudio.cn:8088/
</url>
</repository>
</repositories>
<package>
<!-- 不区分大小写,逗号隔开的metaName,代表不同SDK的渠道标识符 -->
<channels keyname="channel" >
<!-- channel的数量代表最终生成的apk文件的数量 -->
<channel value="91" />
<channel value="anzhi" />
<channel value="appchina" />
<channel value="baidu" />
<channel value="chinapnr" />
<channel value="gfan" />
<channel value="hiapk" />
<channel value="tencent" />
</channels>
<keystore
passwd="chinapnr"
path="E:\key\chinapnr_b2a.key" >
<alias
name="android.key"
passwd="chinapnr" />
</keystore>
<outpath value="E:\key_output\" />
</package>
</project>
注意:
1 需要指定渠道号的value和所有所有渠道
2 需要指定我的签名文件路径以及输出工程路径
2.在AndroidManifest.xml 文件中的配置
主要是在这里配置application中添加meta-data:注意name( android:name=”channel”) 要和bom.xml中指定的渠道号key保持一致(channels keyname=”channel”)。
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="channel"
android:value="chinapnr" />
3.从代码中读取渠道号
由于我们在访问接口会使用到渠道号,那么需要在代码中从AndroidManifest.xml 动态的获取渠道号,也就是说要获取meta-data的值。下面贴出来方法:
/**
*
* @author kevin.li
* @date 20150620
* @function 获取metaData数据
* @version 1.2.0
*/
public class MetaInfoUtils {
private static final String key = "channel";
/**
* 在application应用<meta-data>元素。
*
* @param context
* @param key
* @return
*/
public static String getApplicationMetaInfo(Context context) {
ApplicationInfo appInfo = null;
String channel = "";
try {
appInfo = context.getPackageManager().getApplicationInfo(
context.getPackageName(), PackageManager.GET_META_DATA);
channel = appInfo.metaData.getString(key);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (TextUtils.isEmpty(channel)) { // 避免有91 这样的情况 因为meta-data中值不确定
channel = appInfo.metaData.getInt(key) + "";
}
return channel;
}
}
四、总结:
第三方插件打包很方便,但是也有缺陷,比如不能批量的修改包名。当然还有其他打包方式比如Ant或者gradle,感兴趣的小伙伴也可以试试。