美文网首页
关于 AndroidManifest.xml 通过 build.

关于 AndroidManifest.xml 通过 build.

作者: 捡贝壳的小男孩_839c | 来源:发表于2019-03-30 13:32 被阅读0次

    在 AndroidManifest.xml 文件中间可以通过 build.gradle 做中转,去获取 gradle.property 中的变量,主要是在使用 jenkins 自动构建的时候动态配置构建参数。

    给出一个 gradle.property 文件

    # Project-wide Gradle settings.
    
    APP_NAME = 安卓应用
    APP_ID = com.example
    

    这里的字符串可以不用加引号。前面是字段名,后面的是字段对应的值。可以在 build.gradle 文件里直接使用这些字段的值。

    apply plugin: 'com.android.application'
    
    def getAppName() {
        return new String(APP_NAME.getBytes("UTF-8"), "UTF-8")
    }
    
    ext {
        appVersionCode = 277
        appVersionName = 277
        appid = APP_ID
        appName = getAppName()
    }
    
    android {
        flavorDimensions "default"
        compileSdkVersion 26
        buildToolsVersion '26.0.2'
        defaultConfig {
            applicationId "com.xjj.cloud.ypjczd"
            minSdkVersion 15
            targetSdkVersion 26
            versionCode 1
            versionName appVersionName
            resValue("string", "SERVER_URL", XJJ_SN_SERVER_URL)
            resValue("string", "useVpn", XJJ_USE_VPN)
        }
    
        productFlavors {
            example {
                applicationId appid
                manifestPlaceholders = [APP_ICON: "@drawable/ic_launcher",
                    APP_NAME: appName]
            }
        }
    
    }
    

    上面是在 app 目录底下的 builde.gradle 文件的部分内容。

    在 ext 里面定义的变量 appid 和 appName 是可以在当前的 build.gradle 中直接使用,这两个变量后面的赋值 APP_ID 和 APP_NAME 是自动从 gradle.property 中读取。这里定义了一个 getAppName 是因为直接使用 APP_NAME 会导致乱码。所以这里转换了一下。另外记得去 setting - editor - File Encodings 里面把所有的编码都改为 UTF-8 的。如下图所示:

    Setting.png

    然后为了在 AndroidManifest.xml 文件里面使用,所以我们在 build.gradle 文件里面的 manifestPlaceholders 定义了 APP_ICON 和 APP_NAME。

        productFlavors {
            example {
                applicationId appid
                manifestPlaceholders = [APP_ICON: "@drawable/ic_launcher",
                    APP_NAME: appName]
            }
        }
    

    这样子,我们就可以在 AndroidManifest.xml 文件中通过 "${APP_ICON}" 这种方式来调用 build.gradle 中的变量。如下所示:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              android:installLocation="auto"
              package="com.xjj.demo">
    
    
        <application
            android:name=".MyApplication"
            android:allowBackup="true"
            android:icon="${APP_ICON}"
            android:label="${APP_NAME}"
            android:roundIcon="${APP_ICON}"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <activity
                android:name="com.example.MyActivity"
                android:alwaysRetainTaskState="true"
                android:hardwareAccelerated="true"
                android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
    
    </manifest>
    

    所以 AndroidManifest.xml 就通过 build.gradle 文件来调用 gradle.property 中定义的变量了。

    相关文章

      网友评论

          本文标题:关于 AndroidManifest.xml 通过 build.

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