Android Studio中如何自定義Android BuildConfig配置檔案
一個project會有多個app,不同module中都要配置compileSdkVersion、buildToolsVersion等變數值,這時候每個app中的compile工程如果不能統一,在以後升級裡會很麻煩,所以我們要把這些公共的配置項稱為共享變數。
步驟:
1、在專案的根目錄下定義了一個build_config.gradle的配置文
config.gradle:
configField 陣列中定義 測試環境和正式環境的地址還有API版本和apk的名字
ext { configField = [ ServerAddress_release : "\"https://s.xxxx.com/\"", // ServerAddress_release : "\"http://inflexion.xxxx.com/\"", // ServerAddress_debug : "\"https://s.xxxx.com/\"", ServerAddress_debug : "\"http://inflexion.xxxx.com/\"", APIVersionName : "\"ver\"", APIVersionCode : "\"2.36\"", APKVersionName_release : "車店長Boss_正式版_", APKVersionName_debug : "車店長Boss_測試版_", ]
android = [ compileSdkVersion : 25, buildToolsVersion : "26.0.2", minSdkVersion : 20, targetSdkVersion : 25, versionCode : 15, versionName : "3.13.0" ]
versions陣列,用來存放compileSdkVersion、versionCode、versionName等資料:
version = [ // androidSupportSdkVersion: "23.1.1", androidSupportSdkVersion: "25.0.0", retrofitSdkVersion : "2.3.0", dagger2SdkVersion : "2.11", glideSdkVersion : "4.0.0", butterknifeSdkVersion : "8.7.0", rxlifecycleSdkVersion : "1.0", rxlifecycle2SdkVersion : "2.1.0", espressoSdkVersion : "2.2.2", canarySdkVersion : "1.5.1", rxbindingSdkVersion : "0.4.0" ]
dependencies陣列,用來存放第三發依賴的地址;
dependencies = [
//support
"appcompat-v7" : "com.android.support:appcompat-v7:${version["androidSupportSdkVersion"]}",
"design" : "com.android.support:design:${version["androidSupportSdkVersion"]}",
"support-v4" : "com.android.support:support-v4:${version["androidSupportSdkVersion"]}",
"cardview-v7" : "com.android.support:cardview-v7:${version["androidSupportSdkVersion"]}",
"annotations" : "com.android.support:support-annotations:${version["androidSupportSdkVersion"]}",
"recyclerview-v7" : "com.android.support:recyclerview-v7:${version["androidSupportSdkVersion"]}",
"gridlayout-v7" : "com.android.support:gridlayout-v7:${version["androidSupportSdkVersion"]}",
//network
"retrofit" : "com.squareup.retrofit2:retrofit:${version["retrofitSdkVersion"]}",
"retrofit-converter-gson" : "com.squareup.retrofit2:converter-gson:${version["retrofitSdkVersion"]}",
"retrofit-adapter-rxjava" : "com.squareup.retrofit2:adapter-rxjava:${version["retrofitSdkVersion"]}",
"retrofit-adapter-rxjava2" : "com.squareup.retrofit2:adapter-rxjava2:${version["retrofitSdkVersion"]}",
"okhttp3" : "com.squareup.okhttp3:okhttp:3.8.1",
"okhttp-urlconnection" : "com.squareup.okhttp:okhttp-urlconnection:2.0.0",
"glide" : "com.github.bumptech.glide:glide:${version["glideSdkVersion"]}",
"glide-compiler" : "com.github.bumptech.glide:compiler:${version["glideSdkVersion"]}",
"glide-loader-okhttp3" : "com.github.bumptech.glide:okhttp3-integration:${version["glideSdkVersion"]}",
"picasso" : "com.squareup.picasso:picasso:2.5.2",
//view
"autolayout" : "com.zhy:autolayout:1.4.5",
"butterknife" : "com.jakewharton:butterknife:${version["butterknifeSdkVersion"]}",
"butterknife-compiler" : "com.jakewharton:butterknife-compiler:${version["butterknifeSdkVersion"]}",
"pickerview" : "com.contrarywind:Android-PickerView:3.2.5",
"photoview" : "com.github.chrisbanes.photoview:library:1.2.3",
"numberprogressbar" : "com.daimajia.numberprogressbar:library:[email protected]",
"nineoldandroids" : "com.nineoldandroids:library:2.4.0",
"paginate" : "com.github.markomilos:paginate:0.5.1",
"vlayout" : "com.alibaba.android:vlayout:[email protected]",
//rx1
"rxandroid" : "io.reactivex:rxandroid:1.2.1",
"rxjava" : "io.reactivex:rxjava:1.2.1",
"rxlifecycle" : "com.trello:rxlifecycle:${version["rxlifecycleSdkVersion"]}",
"rxlifecycle-components" : "com.trello:rxlifecycle-components:${version["rxlifecycleSdkVersion"]}",
"rxcache" : "com.github.VictorAlbertos.RxCache:runtime:1.7.0-1.x",
"rxcache-jolyglot-gson" : "com.github.VictorAlbertos.Jolyglot:gson:0.0.3",
"rxbinding-recyclerview-v7": "com.jakewharton.rxbinding:rxbinding-recyclerview-v7:1.0.1",
"rxpermissions" : "com.tbruyelle.rxpermissions:rxpermissions:[email protected]",
"rxerrorhandler" : "me.jessyan:rxerrorhandler:1.0.1",
//rx2
"rxandroid2" : "io.reactivex.rxjava2:rxandroid:2.0.1",
"rxjava2" : "io.reactivex.rxjava2:rxjava:2.1.1",
"rxlifecycle2" : "com.trello.rxlifecycle2:rxlifecycle:${version["rxlifecycle2SdkVersion"]}",
"rxlifecycle2-components" : "com.trello.rxlifecycle2:rxlifecycle-components:${version["rxlifecycle2SdkVersion"]}",
"rxcache2" : "com.github.VictorAlbertos.RxCache:runtime:1.8.1-2.x",
"rxpermissions2" : "com.tbruyelle.rxpermissions2:rxpermissions:[email protected]",
"rxerrorhandler2" : "me.jessyan:rxerrorhandler:2.0.2",
//rxbinding
"rxbinding" : "com.jakewharton.rxbinding:rxbinding:${version["rxbindingSdkVersion"]}",
"rxbinding-design" : "com.jakewharton.rxbinding:rxbinding-design:${version["rxbindingSdkVersion"]}",
"rxbinding-kotlin" : "com.jakewharton.rxbinding:rxbinding-kotlin:${version["rxbindingSdkVersion"]}",
"rxbinding-support-v4" : "com.jakewharton.rxbinding:rxbinding-support-v4:${version["rxbindingSdkVersion"]}",
"rxbinding-support-v7" : "com.jakewharton.rxbinding:rxbinding-appcompat-v7:${version["rxbindingSdkVersion"]}",
//tools
"dagger2" : "com.google.dagger:dagger:${version["dagger2SdkVersion"]}",
"dagger2-compiler" : "com.google.dagger:dagger-compiler:${version["dagger2SdkVersion"]}",
"androideventbus" : "org.simple:androideventbus:1.0.5.1",
"otto" : "com.squareup:otto:1.3.8",
"gson" : "com.google.code.gson:gson:2.8.1",
"multidex" : "com.android.support:multidex:1.0.1",
"javax.annotation" : "javax.annotation:jsr250-api:1.0",
"arouter" : "com.alibaba:arouter-api:1.2.1.1",
"arouter-compiler" : "com.alibaba:arouter-compiler:1.1.2.1",
"progressmanager" : "me.jessyan:progressmanager:+",
//test
"junit" : "junit:junit:4.12",
"androidJUnitRunner" : "android.support.test.runner.AndroidJUnitRunner",
"runner" : "com.android.support.test:runner:0.5",
"espresso-core" : "com.android.support.test.espresso:espresso-core:${version["espressoSdkVersion"]}",
"espresso-contrib" : "com.android.support.test.espresso:espresso-contrib:${version["espressoSdkVersion"]}",
"espresso-intents" : "com.android.support.test.espresso:espresso-intents:${version["espressoSdkVersion"]}",
"mockito-core" : "org.mockito:mockito-core:1.+",
"timber" : "com.jakewharton.timber:timber:4.5.1",
"logger" : "com.orhanobut:logger:2.1.1",
"canary-debug" : "com.squareup.leakcanary:leakcanary-android:${version["canarySdkVersion"]}",
"canary-release" : "com.squareup.leakcanary:leakcanary-android-no-op:${version["canarySdkVersion"]}",
"umeng-analytics" : "com.umeng.analytics:analytics:6.0.1"
]
}
2、在專案根目錄的build.gradle中直接引入我們配置的build_config.gradle配置檔案。
apply from: “config.gradle”
3、當我們編寫完自定義的gradle files,在Android Studio中實時保持同步
4、使用的時候:在各個module的build.gradle裡面使用
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion '26.0.2'
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.icarzoo"
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
...
}
buildTypes {
release {
buildConfigField('boolean', 'isShowLoaCat', "false")
buildConfigField('String', 'APIVersionName', rootProject.ext.configField["APIVersionName"])
buildConfigField('String', 'APIVersionCode', rootProject.ext.configField["APIVersionCode"])
buildConfigField('String', 'ServerAddress', rootProject.ext.configField["ServerAddress_release"])
signingConfig signingConfigs.release
debuggable true
minifyEnabled true
zipAlignEnabled true
pseudoLocalesEnabled false //預設false,是否支援本地化整理
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
buildConfigField('boolean', 'isShowLoaCat', "true")
buildConfigField('String', 'APIVersionCode', rootProject.ext.configField["APIVersionCode"])
buildConfigField('String', 'APIVersionName', rootProject.ext.configField["APIVersionName"])
buildConfigField('String', 'ServerAddress', rootProject.ext.configField["ServerAddress_debug"])
//signingConfig signingConfigs.release
debuggable true
minifyEnabled false
zipAlignEnabled true
pseudoLocalesEnabled false //預設false,是否支援本地化整理
}
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
// def outputFile = output.outputFile
// def outputFile = outputFileName
def fileName
if (variant.buildType.name.equals('release')) {
fileName = "${rootProject.ext.configField["APKVersionName_release"]}.apk"
} else if (variant.buildType.name.equals('debug')) {
fileName = "${rootProject.ext.configField["APKVersionName_debug"]}.apk"
}
// ${project.projectDir}/../outputs/apks/+ variant.name
outputFileName = new File("", fileName)
// output.outputFile = new File(outputFile.parent, fileName)
// outputFileName = new File(outputFile.parent, fileName)
}
}
dependencies {
testCompile 'junit:junit:4.12'
// 所需的support包
compile rootProject.ext.dependencies["multidex"]
compile rootProject.ext.dependencies["appcompat-v7"]
compile rootProject.ext.dependencies["annotations"]
compile rootProject.ext.dependencies["recyclerview-v7"]
compile rootProject.ext.dependencies["design"]
compile rootProject.ext.dependencies["support-v4"]
compile rootProject.ext.dependencies["gridlayout-v7"]
compile rootProject.ext.dependencies["cardview-v7"]
// Rxbinding
compile rootProject.ext.dependencies["rxbinding"]
compile rootProject.ext.dependencies["rxbinding-design"]
compile rootProject.ext.dependencies["rxbinding-kotlin"]
compile rootProject.ext.dependencies["rxbinding-support-v4"]
compile rootProject.ext.dependencies["rxbinding-support-v7"]
...
}
buildConfigField使用的時候 這樣呼叫:
public class NetWorkURLBean {
/**
* 訪問服務端的地址
*/
public static String ADDRESS = BuildConfig.ServerAddress + "api/";
public static String ADDRESS_2 = BuildConfig.ServerAddress;
/**
* 登入
*/
public static final String STAFF = ADDRESS + "store_staff/staff_user/lunch_login";
相關推薦
在 Android Studio 中自定義註釋模板及顏色(基於TODO)
前言 最近在開發安卓專案時,發現 TODO 註釋(// todo) 更能起到提醒的作用,於是我將自己覺得重要的程式碼部分也用 todo 高亮出來,效果還不錯。 但是這樣做會有一個缺點,就是意義上有些混亂,todo 的原意是提醒該完成而未完成的事情,而我想要的
Android studio:自定義Android Studio方法註釋模板
前言 你們從Eclipse轉到Android Studio的時候,是不是會懷念Eclipse的方法註釋模版? 敲/**加回車,模板就出來了,而Android Studio卻不能自定義(或者我沒有找到) 現在我找到替代方法了,就是用live templates 步驟
android studio中自帶的小圖示自定義使用方法,Android 5.0後Material design icons(金屬設計風格圖示大全)及如何使用
首先我們需要外掛,如圖找到file–New–最後一項Material design icons,開啟在這裡我們可以找我們經常需要的一些圖示,可以自定義大小,顏色,以及生成各個解析度大小的圖示,相當的方便,那麼這些圖示都有哪些呢?大家可以把它下載下來在本地檢視:大致包含的目錄:分
Android studio 使用自定義mk檔案編譯jni專案
最近將公司ndk專案從eclipse遷移到as,為了方便省事,直接使用原有mk檔案。參考網路資料,順利完成遷移工作。現貼出使用自定義mk檔案的關鍵程式碼,mark以備後面使用。 buildTypes { release { minifyEna
Android Studio建立自定義jks簽名檔案(Mac os系統)
1,開啟你的專案,選擇Build-->Generate singed APK-->到達所需要的介面,如圖所示: 2,到達所需介面如圖所示: 注意:2,顯示的介面的呈現結果是因為我已經建立過jks檔案了,如果你沒有建立過的話就在圖2中箭頭所指的“Create new
Android Studio 打包自定義apk檔名
使用Android Studio打包的時候,我們有時候需要自定義apk的檔名,在此記錄一下。 在app的build.gradle中,根節點下使用關鍵詞def宣告一個全域性變數,用於獲取打包的時間,格式可自定義,如下所示: 然後,在android節點中新增以下程式碼,注意:Gradle 3.0.0之前和3
Android Studio使用自定義的Android.mk檔案編譯ffmpegyuv-bgr
概述 最近做專案的時候,領導安排一個任務,讓測試一下,用ffmpeg中的yuv轉bgr函式的速度。之前編譯so庫大部分都是用eclipse,本次博主花了兩天時間,在Android studio上編譯並執行,在此做一下記錄。 設定Android Studio ndk 1、開啟setings
Android Studio新增自定義類註釋模板 自定義方法註釋模標
註釋模板 給類註釋或者方法註釋肯定要有的,但是系統自帶的又很不適用,那怎麼辦呢?看下方 類註釋模板 第一種方法 開啟Android Studio後,點選File -> Settings -> Editor -> File and Code Te
Android studio中git使用及git配置路徑
原文地址: http://blog.csdn.net/asdf717/article/details/54290796 非常感謝原作者 此文很詳細 本人看到後壓抑不住內心的激情 想轉載 為以後自己忘記好找而轉 也為廣大新手而轉 一. Android Stutio配置git set
Android開發中自定義表情併發送出去之經典的傳送表情
本文例項講述了Android程式設計開發實現輸入(自定義表情包)QQ表情影象併發送出去別人收到並解析出來的方法。分享給大家供大家參考,原來QQ微信等傳送表情其實發送的都不是表情,而是一個富文字,收到訊息後再解析得來的,具體效果如下 : 表情傳送出去是這樣: 最近在
Android Studio 生成自定義apk、aar名稱
在Android studio中預設生成的apk、aar的名稱都是app-release.apk、app-debug.apk、app-release.aar、app-debug.aar。通過修改app下的build.gradle可以自定義生成的apk、aar名稱一、自定義ap
Android開發中自定義檢視
很多時候,Android自身提供給我們的檢視可能不能滿足我們的需求,這個時候我們就需要 自定義檢視 。 雖然自定義檢視很多,但總體歸為兩個類別: 簡單檢視 。簡單檢視內部當然也可以很複雜,之所以稱之為簡單檢視是因為,簡單檢視中不包括子檢視。簡單檢視幾乎總是用來處理定製繪製。
為Android Studio編寫自定義Gradle外掛的教程
Google已經建議Android開發全部轉向Android Studio開發,Android Studio 是使用gradle編譯、打包的,那麼問題來了,gradle可是有一堆東西...,為了徹底瞭解gradle,今天就來學習下如何寫自己的gradle外掛(當然外掛原始碼是使用groovy寫的),先看如下
Android Studio中ArcGIS Runtime Android SDK 100.1.0(100.2.0,100.3.0)開發原生地圖應用(入門環境配置)
前言 最近因為工作關係,需要使用ArcGIS Runtime SDK for Android搭建一個簡單的入門Demo,也就是傳說中的Hello GISer。翻了一遍官方文件,ArcGIS Runtime SDK for Android的安裝推薦使用Gradle,而
Android 平板中 自定義鍵盤(popuwindow) 居於螢幕左下方 仿微信的密碼輸入介面
之前部落格中,介紹過使用谷歌提供的鍵盤的一些api,可以很好地自定義鍵盤,參考我之前的部落格連結:android 自定義鍵盤 ,這個有一個侷限性,只能佔滿螢幕,無法做到只能佔一部分的需求鍵盤,如下圖我平板中的鍵盤需求:(由於公司保密需要,所以比較恐怖一點,嘿嘿)
在Android Studio使用自定義屬性
public MyStyleView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);Log.i(TAG, "MyStyleView3");/** * 獲得我們所定
Android Studio 設定自定義註釋模板
一、註釋模板說明 我們平時用到的的註釋模板有三種:類註釋、方法註釋、成員變數註釋,一般為了書寫程式碼方便、快捷,需要設定類註釋模板和方法註釋模板,成員變數註釋模板可根據個人需求進行設定。 二、設定自定義註釋模板 1.
Android系統中自定義按鍵的短按、雙擊、長按事件
在專案中碰到這樣的問題: 由於系統中的按鍵在底層做了重新定義或者新增了按鍵,此時需要在APP層對按鍵事件(keyevent)做分解處理,模擬Android系統做法,把keyevent分解成: 1、單擊事件:就是普通key的單擊; 2、雙擊事件:500ms內同一按鍵單擊兩次;
Android studio中使用retrolambda之前的配置
1.首先Android studio的jdk需要是1.8 2.在專案的build.gradle中需要新增 mavenCentral()和 classpath 'me.tatarka:gradle-r
Android Studio生成自定義jar包
眾所周知android studio會在library所依賴的app執行或者build之後自動生成jar,路徑為build/intermediates/bundles/debug or release/classes.jar,這樣生成的jar是可以用的,但不是我們可以控制的,所以我們需要通過其他方式來解決這