美文网首页
Gradle的基本操作:AndroidManifest.xml中

Gradle的基本操作:AndroidManifest.xml中

作者: ag4kd | 来源:发表于2018-12-26 13:57 被阅读0次

    一、manifest中的元数据标签

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

    语法格式

    <meta-data android:name="string"
               android:resource="resource specification"
               android:value="string" />
    

    1.Activity标签中:

    <activity...>
          <meta-data android:name="sex" android:value="man"></meta-data>
    </activity>
    

    在代码中动态获取:

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

    2.application标签中:

    <application...>
          <meta-data android:name="sex" android:value="man"></meta-data>
       </application>
    

    在代码中动态获取:

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

    3.在service标签中:

    <service android:name="MetaDataService">
               <meta-data android:name="sex" android:value="man"></meta-data>
    </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标签中:

    <receiver android:name="MetaDataReceiver">
                <meta-data android:name="sex" android:value="man"></meta-data>
                <intent-filter>
                   <action android:name="android.intent.action.PHONE_STATE"></action>
                </intent-filter>
    </receiver>
    

    在代码中获取:

    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节点中添加

    <application...>
          <meta-data android:name="sex" android:value="$sexValue"></meta-data>
    </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中

          本文链接:https://www.haomeiwen.com/subject/irjhlqtx.html