productFlavors {
debug_mode{ //不上报出错到bugly
applicationId "com.demo.exampletest"
manifestPlaceholders = [
APP_ID : applicationId,
DEBUG_MODE: true,
APP_NAME : "@string/app_name_test"
]
}
release_debug_mode{ //上报出错到bugly,测试阶段选这个,1-2
applicationId "com.demo.exampletest"
manifestPlaceholders = [
APP_ID : applicationId,
DEBUG_MODE : false,
APP_NAME: "@string/app_name_test"
]
}
release_mode{ // 正式的包
applicationId "com.demo.example"
manifestPlaceholders = [
APP_ID : applicationId,
DEBUG_MODE : false,
APP_NAME: "@string/kg_app_name"
]
}
}
以上配置了三种打包方式,第一种就是插usb直接安装的时候采用的配置,这种配置的特点是不会上报出错日志到系统,至于如何通过读取配置文件的常量,可以看一下代码:
private void initEnvironment() {//初始化,在application的onCreate中调用
APPEnvironment.init(this);
mDebugMode = readManifestAsBoolean("DEBUG_MODE");
APPBuildConfig.ENABLE_PROFILING = mDebugMode;//全局变量,配置打点相关,上报崩溃相关服务
}
public boolean readManifestAsBoolean(String key) {//读取配置文件常量的通用方法,
ApplicationInfo appInfo = null;
boolean value = false;
try {
appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if(null!=appInfo)
value = appInfo.metaData.getBoolean(key,false);
return value;
}
public String readManifestAsString(String key) {
ApplicationInfo appInfo = null;
String value = null;
try {
appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if(null!=appInfo)
value = appInfo.metaData.getString(key);
return value;
}
manifest文件
<meta-data
android:name="DEBUG_MODE"
android:value="${DEBUG_MODE}" />
值得注意的是读取的key要保持一致,例如代码中的DEBUG_MODE
回到上面的三种打包方式,第二种就是关闭了调试模式,但是包名和第一种(调试模式)的报名时一样的,这种打包如果希望调试只能通过收集崩溃信息后台来查看了,但是由于包名和正式包不一样,可以方便的在同一台手机进行两个同种app之间的通信
第三种就是正式的包