博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站
1、首先在AndroidManifest.xml文件中的application标签内加入
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
2、在应用的build.gradle文件中,添加如下代码
plugins {
//表示这是一个应用程序模块,com.android.library表示这是一个库模块
id 'com.android.application'
}
android {
//编译SDK版本
compileSdkVersion 30
//编译工具版本
buildToolsVersion "30.0.3"
defaultConfig {
//appId
applicationId "com.example.exercisetest"
//最小支持SDK版本
minSdkVersion 23
//目标版本
targetSdkVersion 30
//版本号
versionCode 1
//版本名称
versionName "1.0"
//测试单元
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//必须要保证所有的flavor 都属于同一个维度
flavorDimensions "default"
}
//构建类型
buildTypes {
//生产环境
release {
//表示是否对项目的代码进行混淆,true表示混淆 false表示不混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
//方式一
// productFlavors {
// wandoujia {
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
// }
// xiaomi {
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
// }
// yingyongbao {
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
// }
// }
//优化1
// productFlavors {
// wandoujia {
// }
// xiaomi {
// }
// yingyongbao {
// }
// }
// productFlavors.all { flavor ->
// flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
// }
//优化二
productFlavors {
wandoujia {
}
xiaomi {
}
yingyongbao {
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//打包的apk包名变为了
//app-具体的渠道名-release-1.0.apk
def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
outputFileName = fileName
}
}
}
}
//依赖相关信息
dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
3.可以在Java代码中,获取apk对应的渠道名
public String getChannel() {
ApplicationInfo applicationInfo = null;
try {
//getPackageManager():返回PackageManager实例以查找全局包信息。
//getApplicationInfo(String packageName, int flags):
// 检索我们所了解的有关特定软件包/应用程序的所有信息。
//参数一: getPackageName():返回此应用程序包的名称
//参数二:PackageManager.GET_META_DATA
// ComponentInfo标志:返回与组件关联的metaData数据Bundle 。 这适用于返回ComponentInfo子类的任何API。
applicationInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
//metaData属性在其ApplicationInfo类的父类PackageItemInfo里面
//metaData:与此组件关联的其他元数据。
//BaseBundle.getString():返回与给定键相关联的值
return applicationInfo.metaData.getString("UMENG_CHANNEL");
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}