• Android Gradle manifestPlaceholders 占位符详解


    Android Gradle manifestPlaceholders 占位符详解

    在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也可以,但是累啊,在我之前他们打包是用手动替换,但我觉得这是是在没办法的办法,但是有了manifestPlaceholders占位符后就简单的多了,只需要改一个地方就行了.

    1. 概括

    下面介绍下manifestPlaceholders占位符的使用,其实很好理解,你可以认为它可以在 build.gradle文件中定义字符串并将值映射到 AndroidManifest清单文件的指定位置.

    下面说下使用方法:

    2. AndroidManifest 文件定义占位符

    部分代码如下:

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
                
                // 这是在Activity 标签下
                <meta-data android:name="nameActivity" android:value="${test_value_activity}"/>
            </activity>
            
    		 // 这是在Activity 标签下
            <meta-data android:name="nameApplication" android:value="headword${test_value}append_word"/>
        </application>
    

    总结如下:

    ${你定义名称}

    当然${}的前后面直接添加字符串.

    例如:

    android:value="${test_value_activity}"
    
    android:value="headword${test_value}append_word"
    

    3. build.gradle 给占位符赋值

    部分代码如下:

    defaultConfig {
            applicationId "com.didikee.wififriend"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
            manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值"]
        }
    

    总结如下:

    manifestPlaceholders = [symbol1: "value1", symbol2:"value2"]

    多个值时用,分隔开.

    4. 在Java代码获取占位符的值

    在获取值的时候是区分占位符在 Activity标签,Application标签,service标签,receiver标签下,所以有两种获取方式:

    Activity标签下:

                    ActivityInfo activityInfo = null;
                    try {
                        activityInfo = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
                    } catch (PackageManager.NameNotFoundException e) {
                        e.printStackTrace();
                    }
                    if (activityInfo == null)return;
                    String value = activityInfo.metaData.getString("nameActivity");
    

    Application标签下:

                    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("nameApplication");
    

    同理,在service标签,receiver标签下分别为:

    String value=  MainActivity.this.getPackageManager().getServiceInfo(ComponentName,PackageManager.GET_META_DATA).metaData.getString("symbol");
    
                   String value=  MainActivity.this.getPackageManager().getReceiverInfo(ComponentName,PackageManager.GET_META_DATA).metaData.getString("symbol");
    
  • 相关阅读:
    如何缓解考前紧张和焦虑
    **浅谈差分【复习】**
    杂题训练之十一
    浅谈dfs/Tarjan找环【复习】
    杂题训练之十一
    杂题训练之十
    动态规划训练之二十
    浅谈欧拉函数【复习】
    数论训练之五
    浅谈杨辉三角【复习】
  • 原文地址:https://www.cnblogs.com/didikee/p/6757072.html
Copyright © 2020-2023  润新知