1、manifestPlaceholders
这个占位符我们在平时开发中用的多吗?
先简单介绍一下这个东东的使用场景:
在实际项目中,AndroidManifest
里十几个地方的值是需要动态的改变(生成apk文件的时候)。如果每次去改也可以,但是累啊,在我之前他们打包是用手动替换,但我觉得这是是在没办法的办法,但是有了manifestPlaceholders
占位符后就简单的多了,只需要改一个地方就行了。
作用:
它可以在 build.gradle
文件中定义字符串并将值映射到 AndroidManifest
清单文件的指定位置。
<application
android:name="com.icbc.PhoneApplication"
android:allowBackup="false"
android:debuggable="true"
//我们引用的地方
android:icon="${icon}"
android:label="${app_name}"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
tools:ignore="HardcodedDebugMode">
...
</application>
productFlavors {
test{
...
//我们配置的地方
manifestPlaceholders = [app_name: "测试一", icon:"@drawable/ic_launcher1"]
...
}
}
当然我们在引入第三方的时候是不是如下:
<meta-data
android:name="qq"
android:value="${value}">
</meta-data>
我们的value值赋值之后,你可知道怎么获取的吗?
ApplicationInfo applicationInfo = null;
try {
applicationInfo = getPackageManager().getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (applicationInfo == null)return;
String value = applicationInfo.metaData.getString("qq");
这么一个小小的占位符可以帮我们节省这么多的操作。
2、BuildConfig
这个东东我们先介绍一下
BuildConfig是android studio在打包时自动生成的一个java类。
BuildConfig类在项目工程的build/generated/source/buildConfig/androidTest或debug或release中,这些目录中的BuildConfig类中有相同的常量字段。
那它有什么神奇之处呢?
如果你想实现多渠道打包你就会发现他的好处。
我们就可以通过定义一些常量使其在debug以及release中生成不同的字段来实现我们的目的。
怎么做呢?
当然要实现多渠道打包还需要添加许多配置,我们这里只是介绍一这个BuildConfig文件的用处
我们可以将敏感信息存放在BuildConfig文件,同时通过将敏感信息存放在工程中的gradle.properties中,可以避免将其上传到版本控制系统(svn或者git上),从而将敏感信息控制在少数人手里,而不是暴露给所有svn或者git权限的人。
但是安全级别也是很低的,我们可以对生成的APK反编译,查看BuildConfig.class文件,还是可以看到API Key的取值。
未完待续。。。