zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    做了半年的答题小程序上线了
    党建答题助手小程序
    党建答题活动小程序
    微信答题活动小程序
    微信答题活动小程序
    如何搭建在线考试小程序
    如何搭建在线考试小程序
    基于云开发的在线答题小程序
    XLua访问C#中的List或者数组
    字符串、字节数组、流之间的相互转换以及文件MD5的计算
  • 原文地址:https://www.cnblogs.com/zhaohongtian/p/6808962.html
Copyright © 2011-2022 走看看