Gradle的基本操作:AndroidManifest.xml中的meta-data标签、gradle中的manifestPlaceholder

一、manifest中的元数据标签

在Android中环可以在manifest设置元信息meta-data为四大组件配置元信息,然后通过Java代码读取的来使用。

语法格式


1.Activity标签中:


      

在代码中动态获取:

ActivityInfo info=this.getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
String msg =info.metaData.getString("sex");

2.application标签中:


      
   

在代码中动态获取:

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("sex");

3.在service标签中:


           

在代码中获取:

ComponentName cn=new ComponentName(this, MetaDataService.class);
ServiceInfo info=this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
String msg=info.metaData.getString("sex");

4.在receive标签中:


            
            
               
            

在代码中获取:

ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
ActivityInfo info=context.getPackageManager()
                             .getReceiverInfo(cn, PackageManager.GET_META_DATA);
String msg=info.metaData.getString("sex");

二、AndroidGradle为我们提供了非常便捷的方式让我们来替换AndroidManifest文件中的内容,他就是manifestPlacholder、Manifest占位符。

ManifestPlaceholders 是 ProductFlavor 的一个属性,ProductFlavorsandroid的一个属性,可以再android闭包中配置,ProductFlavors同时又是ProductFlavor的一个容器,可以在ProductFlavors的闭包参数中配置任意个ProductFlavor

apply plugin: 'command.android.application'
android {
    compileSdkVersion 28
    defaultConfig {...}
    buildTypes {...}
    flavorDimensions "api"
    productFlavors {
        xiaomi {
            dimension "api"
            manifestPlaceholders.put("sex","男")
        }
        huawei {
            dimension "api"
            applicationIdSuffix ".demo"
            manifestPlaceholders.put("sex","女")
        }
        full {
            dimension "api"
            applicationIdSuffix ".full"
            versionNameSuffix "-full"
        }
        tetd {
            dimension "api"
        }
    }
}

dependencies {...}

三、AndroirdManifest.xmlgradlejava代码三者结合,针对appliation中的meta-data举例

1.在AndroirdManifest.xml中的application节点中添加


      

2.在profuctFlavor中设置占位符的值。比如小米版本的设置为,华为版本的设置为

 productFlavors {
        xiaomi {
            dimension "api"
            manifestPlaceholders.put("sexValue","男")
        }
        huawei {
            dimension "api"
            applicationIdSuffix ".demo"
            manifestPlaceholders.put("sexValue","女")
        }
    }

3.在Java代码中

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("sex");

这样取值因版本而已,比如小米版本取出来的值就是,华为版本取出来的就是

四、实际案例

根据
参考有梦多渠道打包

你可能感兴趣的:(Gradle的基本操作:AndroidManifest.xml中的meta-data标签、gradle中的manifestPlaceholder)