編輯:關於Android編程
在項目中,我們有時會需要根據不同的項目環境,使用不同的項目變量,
舉例:
可以使用下面三種技術來滿足要求:
修改 res value 的方式,比如修改 strings.xml 文件中的 AppName 的值
在你的 gradle 文件 buildTypes 或者 productFlavors 下面,如 release 體內寫上類似:
resValue "string", "AppName", "app1"
意為把名為 AppName 的 string value 值改為 app1
在你的 gradle 文件 buildTypes 或者 productFlavors 下面,如 release 體內寫上類似:
buildConfigField "String", "ENDPOINT", "\"http://example.com\""
gradle sync 一下後,BuildConfig.ENDPOINT 就會被賦值為http://example.com就可以供Java代碼調用了。
下面介紹如何設置標簽中的變量,如何使用標簽中的變量,請參考這裡
在之前版本的gradle中,大部分的思路都是在AndroidManifest中定義一個變量,然後在編譯的時候,找出那個AndroidManifest中的變量,將它替換掉。
如友盟的多渠道打包,在原來的 AndroidManifest.xml 文件中添加:
然後使用在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") } } }
而在新版本的gradle中,processManifest這個方法被移除掉了,而提供了一個新的功能manifestPlaceholders,我們可以在AndroidManifest中定義一個變量,在build.gradle中動態的替換掉,十分方便,語法也十分簡單。對比上面的功能,我們需要動態替換友盟的appkey,需要在AndroidManifest中定義一個變量
接著,我們在build.gradle文件中根據不同的環境,生成不同appkey的apk。
buildTypes { debug { manifestPlaceholders = [umeng_app_key: "你替代的內容"] } release { manifestPlaceholders = [umeng_app_key: "你替代的內容"] } develop { manifestPlaceholders = [umeng_app_key: "你替代的內容"] } }
注意:這裡的“你替代的內容”,不能為特殊關鍵詞,比如:TRUE,否則在Java代碼中獲取不到meta-data中的值,
錯誤示例:
manifestPlaceholders = [oem: "TRUE"]
運行gralde clean build,你就可以生成不同的appkey的apk,是不是感覺好多了。^ ^
如果你想要替換多個變量,假如你需要兩個變量要替換,需要按照下面形式進行
buildTypes { debug { manifestPlaceholders = [umeng_app_key: "你替代的內容",umeng_app_secret:"你要替換的內容"] } ... }
從開源項目中看到 這個,就不由自主的收藏了~
由於Linux系統的權限限制和Android封裝架構限制,很多涉及底層設備、接口、驅動控制的應用開發,不得不使用到本文的NDK開發環境(基於Android源碼或內核源碼修
Long Long ago...已經成為了歷史,我還是要說出一個真相:早年前,那時候,android還不被大眾所認知的時候,當然開發者也沒不像現在那樣趨於飽和狀態。一位大
本文實例講解的是如何畫一個滿滿圓形水波紋loadingview,這類效果應用場景很多,比如內存占用百分比之類的,分享給大家供大家參考,具體內容如下效果圖如下:預備的知識: