日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...

發(fā)布時間:2024/9/27 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

你也能夠查看我的其它同類文章。也會讓你有一定的收貨

關(guān)于使用Gradle來控制版本號和生成不同版本號的代碼。我總結(jié)了三篇文章,網(wǎng)上關(guān)于這些知識,都比較零散。我在學(xué)習(xí)這些的之前。根本不知道還有這種方法。所以說不知道并不可怕,可怕的是不知道自己不知道。相信這三篇文章,會給你不少靈感

前言

在項目中,我們有時會須要依據(jù)不同的項目環(huán)境,使用不同的項目變量,

舉例:

在測試環(huán)境中須要app訪問的server地址是測試server

正式公布下的app須要訪問正式server。

能夠使用以下三種技術(shù)來滿足要求:

使用 gradle 在編譯時動態(tài)設(shè)置 Android resValue

改動 res value 的方式。比方改動 strings.xml 文件里的 AppName 的值

在你的 gradle 文件 buildTypes 或者 productFlavors 以下,如 release 體內(nèi)寫上相似:

resValue "string", "AppName", "app1"

意為把名為 AppName 的 string value 值改為 app1

使用 gradle 在編譯時動態(tài)設(shè)置 Android BuildConfig

在你的 gradle 文件 buildTypes 或者 productFlavors 以下,如 release 體內(nèi)寫上相似:

buildConfigField "String", "ENDPOINT", "\"http://example.com\""

gradle sync 一下后,BuildConfig.ENDPOINT 就會被賦值為 http://example.com 就能夠供 Java 代碼調(diào)用了。

以下介紹怎樣設(shè)置標(biāo)簽中的變量,怎樣使用標(biāo)簽中的變量,請參考這里

使用 gradle 在編譯時動態(tài)設(shè)置 Android Manifest

方法一:(不推薦)

在之前版本號的gradle中,大部分的思路都是在AndroidManifest中定義一個變量。然后在編譯的時候,找出那個AndroidManifest中的變量,將它替換掉。

如友盟的多渠道打包,在原來的 AndroidManifest.xml 文件里加入:

android:name="UMENG_CHANNEL"/>

然后使用在build.gradle中找出UMENG_CHANNEL_VALUE這個值,而且替換掉

android.applicationVariants.all{ variant ->

println "${variant.productFlavors[0].name}"

variant.processManifest.doLast{

copy{

from("${buildDir}/manifests"){

include "${variant.dirName}/AndroidManifest.xml"

}

into("${buildDir}/manifests/$variant.name")

filter{

String line ->line.replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")

}

variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")

}

}

}

方法二:使用manifestPlaceholders改變< meta-data>(推薦)

而在新版本號的gradle中,processManifest這種方法被移除掉了,而提供了一個新的功能manifestPlaceholders。我們能夠在AndroidManifest中定義一個變量。在build.gradle中動態(tài)的替換掉,十分方便。語法也十分簡單。

對照上面的功能,我們須要動態(tài)替換友盟的appkey,須要在AndroidManifest中定義一個變量

android:name="UMENG_APPKEY"

android:value="${umeng_app_key}"/>

接著,我們在build.gradle文件里依據(jù)不同的環(huán)境。生成不同appkey的apk。

buildTypes {

debug {

manifestPlaceholders = [umeng_app_key: "你替代的內(nèi)容"]

}

release {

manifestPlaceholders = [umeng_app_key: "你替代的內(nèi)容"]

}

develop {

manifestPlaceholders = [umeng_app_key: "你替代的內(nèi)容"]

}

}

注意:這里的“你替代的內(nèi)容”。不能為特殊關(guān)鍵詞,比方:TRUE,否則在Java代碼中獲取不到meta-data中的值。

錯誤演示樣例:

manifestPlaceholders = [oem: "TRUE"]

執(zhí)行g(shù)ralde clean build。你就能夠生成不同的appkey的apk,是不是感覺好多了。^ ^

假設(shè)你想要替換多個變量,假如你須要兩個變量要替換,須要依照以下形式進(jìn)行

android:name="UMENG_APPKEY"

android:value="${umeng_app_key}"/>

android:name="UMENG_SECRET"

android:value="${umeng_app_secret}"/>

buildTypes {

debug {

manifestPlaceholders = [umeng_app_key: "你替代的內(nèi)容",umeng_app_secret:"你要替換的內(nèi)容"]

}

...

}

總結(jié)

以上是生活随笔為你收集整理的android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。