在AndroidStudio中配置Gradle进行 “动态编译期间,根据远程服务器地址 ,生成多类安装包”
原文地址:http://www.cnblogs.com/vir56k/p/4763810.html
需求:
在產(chǎn)品開發(fā)中,經(jīng)常需要發(fā)布各個版本,每個版本的服務(wù)器地址有不同的服務(wù)器地址。比如
-
- 開發(fā)?服務(wù)器使用 192.168.1.232服務(wù)器,
- 測試?服務(wù)器使用 192.168.1.245服務(wù)器,
- 正式上線后服務(wù)器地址是http://xxxx.com。
在配合git開發(fā)中還要分支管理,常用的有:
-
- dev
- test
- master
我們起初的開發(fā)過程是:
在上面的這些步驟中我們看到,需要多次修改服務(wù)器地址,對相關(guān)的技術(shù)能力有一定要求,認(rèn)為操作還容易操作,比如寫了一個不存在的服務(wù)地址。
?
改進(jìn):
引入 Jenkins?服務(wù)自動打包,Jenkins是個非常優(yōu)秀的自動構(gòu)建工具,可以為我們的打包提供很棒的體驗。使得 測試人員 在需要時,自己就能進(jìn)行打包而不需要其他更多操作。當(dāng)然,這需要我們配置好構(gòu)建腳本。在使用Android studio之后,就需要了解 gradle腳本了。
?
技術(shù)關(guān)鍵詞:?buildConfigField,?BuildConfig
?
思路:
在gradle腳本中,使用?buildConfigField 聲明一個字段,編譯成功后,會為這個字段生成靜態(tài)常量,我們可以在代碼中使用這個常量。而在配合 gradle 的?buildTypes 配置不同的編譯類型(比如測試,開發(fā),上線三種類型),每個類型指定不同的 字段的值。而在成功build后,gradle會為 美工不同的類型環(huán)境生成不同的apk包,比如一次性就生成了 測試,開發(fā),上線三個apk包。
?
實現(xiàn)方式:
1. 修改 build.gradle , 配置buildTypes 下的 ?buildConfigField字段 :
buildTypes {release {minifyEnabled falsebuildConfigField("String", "API_HOST", "\"http://www.jinlinbao.com\"")signingConfig signingConfigs.zyfkey}debug245 {debuggable trueminifyEnabled falsebuildConfigField("String", "API_HOST", "\"http://192.168.1.245\"")signingConfig signingConfigs.zyfkey}}
注意上面帶下劃線字體的部分。
這個方法需要三個參數(shù),分別是 ?字段變量類型,變量名,和值。比如這里的?
"String", "API_HOST", "\"http://192.168.1.245\"" // 一定注意 右斜杠后面跟著 轉(zhuǎn)義字符分號 就會生成: public static final String API_HOST = "http://192.168.1.245";2. 修改 build.gradle ,?配置?defaultConfig?下的 ?buildConfigField字段 ,這是為了 代碼編譯的方便,使得在各個環(huán)境下都有?API_HOST 這個字段。
buildConfigField("String", "API_HOST", "\"http://192.168.1.232\"")
3. 開始 build ,完成后,可以在代碼中使用:
String str = BuildConfig.API_HOST;
下面是完整的 配置腳本:
apply plugin: 'com.android.application'android {signingConfigs {zyfkey {keyAlias '-'keyPassword '-'storeFile file('/Users/zhangyunfei/git/vocabulary/zhangyf.keystore')storePassword '-'}}compileSdkVersion 19buildToolsVersion "22.0.1"defaultConfig {applicationId "vir56k.vecabulary"minSdkVersion 14targetSdkVersion 19versionCode 1versionName "1.0"buildConfigField("String", "API_HOST", "\"http://192.168.1.232\"")}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'buildConfigField("String", "API_HOST", "\"http://www.jinlinbao.com\"")signingConfig signingConfigs.zyfkey}debug245 {debuggable trueminifyEnabled falsebuildConfigField("String", "API_HOST", "\"http://192.168.1.245\"")signingConfig signingConfigs.zyfkey}}productFlavors {} }dependencies {compile fileTree(dir: 'libs', include: ['*.jar']) }
下面是代碼演示:
package vir56k.vecabulary;import android.app.Activity; import android.os.Bundle; import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String str = BuildConfig.API_HOST;TextView txt1 = (TextView) findViewById(R.id.txt1);txt1.setText(str);}}
這樣就可以避免因為疏忽而將包打錯,也可以節(jié)省一定的時間和精力。
另:以上的方式中通過修改defaultConfig的配置地址是無效的,Gradle在構(gòu)建的時候不是根據(jù)這里的配置構(gòu)建的,而是要通過AndroidStudio中的Build配置設(shè)置的,就像下面這樣:
根據(jù)修改Build Variant的值來配置默認(rèn)的開發(fā)配置。至于這里配置的這個值保存在什么地方,我還一直沒找到,至少工程中的文件是沒有找到。
總結(jié)
以上是生活随笔為你收集整理的在AndroidStudio中配置Gradle进行 “动态编译期间,根据远程服务器地址 ,生成多类安装包”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: 2020年跨行业跨领域工业互联网平台