1,Android可以在module的build.gradle中配置不同环境,比如测试环境和生产环境。可以在其中配置一些对于不同环境不同的参数。如下代码所示:
buildTypes {
debug {
//配置一些自定义参数——测试环境
manifestPlaceholders = [//友盟key
MANIFEST_UMENG_KEY: "友盟key",
//高德地图key
MANIFEST_GAODE_KEY: "高德地图key",
//极光推送-包名
JPUSH_PKGNAME : "com.mumu.mmcommon",
//极光推送-appKey
JPUSH_APPKEY : "极光推送-appKey",
//极光推送-渠道
JPUSH_CHANNEL : "mm",
//服务器接口地址
MANIFEST_BASE_URL : "https://www.baidu.com/test/",
//服务器webSocket地址
MANIFEST_BASE_ASS : "wss://www.baidu.com/test/"]
//显示log
buildConfigField "boolean", "LOG_DEBUG", "true"
//包名后缀
versionNameSuffix "_debug"
//混淆
minifyEnabled false
//Zipalign优化
zipAlignEnabled false
//移除无用的resource文件
shrinkResources false
//加载默认的混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//签名
// signingConfig signingConfigs.debug
}
release {
//配置一些自定义参数——生产环境
manifestPlaceholders = [//友盟key
MANIFEST_UMENG_KEY: "友盟key",
//高德地图key
MANIFEST_GAODE_KEY: "高德地图key",
//极光推送-包名
JPUSH_PKGNAME : "com.mumu.mmcommon",
//极光推送-appKey
JPUSH_APPKEY : "极光推送-appKey",
//极光推送-渠道
JPUSH_CHANNEL : "mm",
//服务器接口地址
MANIFEST_BASE_URL : "https://www.baidu.com/",
//服务器webSocket地址
MANIFEST_BASE_ASS : "wss://www.baidu.com/"]
//关闭log
buildConfigField "boolean", "LOG_DEBUG", "false"
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
//移除无用的resource文件
shrinkResources true
//加载默认的混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//签名
// signingConfig signingConfigs.release
}
}
,2,配置完成如何使用呢?
,2.1,在对应的manifest中添加如下代码,其中只有BASE_URL是自定义的属性,这个属性怎么获取呢?:
<!-- 友盟统计key -->
<meta-data
android:name="UMENG_APPKEY"
android:value="${MANIFEST_UMENG_KEY}" />
<!--友盟多渠道打包-->
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
<!-- 高德地图key -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="${MANIFEST_GAODE_KEY}" />
<!-- 普通请求服务器BaseURL -->
<meta-data
android:name="BASE_URL"
android:value="${MANIFEST_BASE_URL}" />
<!-- webSocket服务器BaseURL -->
<meta-data
android:name="BASE_ASS"
android:value="${MANIFEST_BASE_ASS}" />
,2.2,在需要使用的地方使用如下方法获取参数:
//普通请求服务器BaseURL
public final static String BaseUrl = CommonUtils.getAppManifestApplicationMetaData("BASE_URL");
,2.3,getAppManifestApplicationMetaData()方法如下:
/**
* 获取AndroidManifest中的Application的MetaData的value值
*
* @param applicationMetaDataName
* @return
*/
public static String getAppManifestApplicationMetaData(String applicationMetaDataName) {
try {
ApplicationInfo appInfo = App.getInstance().getPackageManager()
.getApplicationInfo(App.getInstance().getPackageName(), PackageManager.GET_META_DATA);
String value = appInfo.metaData.getString(applicationMetaDataName);
return value;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}
3,上面1和2都是普通的属性,如果要更改Manifest.xml中application的属性(例如:不同环境的包对应的icon图标不一样,该怎么配置?),该怎么办呢?如果你尝试使用以上方法配置,发现是走不通的。应该使用如下方法:
3.1,首先切换到project目录,然后找到app/src目录。
3.2,在该目录下新建一个debug的文件夹,然后在该文件夹下新建一个res的资源文件夹。如下图所示:
3.3,然后在该文件夹下新增和main文件夹下的res文件夹中的icon同样名称的图片。保持图片名称一致,图片内容不一致。然后打包即可。这样在打包测试环境的时候,他就会使用debug文件夹下的同名的资源文件。而生产环境则使用main文件夹下的res文件夹中资源。
如果有发现错误欢迎指正我及时修改,如果有好的建议欢迎留言。如果觉得对你有帮助欢迎给小星星,谢谢。