• 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");
  • 相关阅读:
    AOJ.866 飞越原野 (三维BFS)
    UVA.129 Krypton Factor (搜索+暴力)
    UVA.10986 Fractions Again (经典暴力)
    UVA.10305 Maximum Product (暴力)
    UVA.725 Division (暴力)
    HDU.3342 Legal or Not (拓扑排序 TopSort)
    HDU.2647 Reward(拓扑排序 TopSort)
    13 成都
    15 沈阳
    14 鞍山
  • 原文地址:https://www.cnblogs.com/zhaohongtian/p/6808962.html
Copyright © 2020-2023  润新知