1. 程式人生 > >Android Studio —— 多服務端介面地址打包技巧

Android Studio —— 多服務端介面地址打包技巧

Android開發中必不可少的就是向服務端請求資料,服務端小夥伴就會給你一個URL(http://192.168.1.194:8080)這樣
你就可以愉快的進行開發;但是隨著app的開發然後又多了外網測試地址、正式地址等等….

所以這篇文章就來說說,如何優雅的管理專案中各種介面地址

我這裡使用的是Retrofit2進行網路請求,需要定義一個BASE_URL供Retrofit進行初始化;當地址多了就會出現下面這種情況:

public interface ApiService {
    /**
     * 內網
     */
//    String BASE_URL = "http://192.168.1.161:8191/openapi/";
// String BASE_URL = "http://192.168.1.42:8080/openapi/"; /** * 外網 */ String BASE_URL = "http://119.147.139.149:8191/openapi/"; // ...... }

現在我們就可以通過gradle來進行優化

在編譯專案的時候系統會為我們生成一個BuildConfig.java類,該類位於ProjectName\app\build\generated\source\buildConfig\buildTypes\packageName\下;(buildTypes就是當前的打包型別)

這個類中的屬性是可以通過build.gradle進行新增我們來看下預設生成的有哪一些:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.azhon.test";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = ""
; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "1.0"; }

這個檔案生成了一些應用的資訊:應用包名、當前打包型別、版本資訊等….

  • 通過build.gradle根據不同的打包型別生成我們的BASE_URL屬性和值,如下:
android {

    // 測試介面地址
    def DEBUG_BASE_URL = "\"http://192.168.1.161:8191/openapi/\""
    // 正式介面地址
    def RELEASE_BASE_URL = "\"http://119.147.139.149:8191/openapi/\""
    // 其它介面地址
    def OTHER_BASE_URL = "\"http://119.147.129.149:8191/openapi/\""

    signingConfigs {
        config {
         // .....
        }
    }
    defaultConfig {
        //....
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            // 定義生成在 BuildConfig.java 類中的屬性
            buildConfigField("String", "BASE_URL", "${RELEASE_BASE_URL}")
        }
        debug {
            signingConfig signingConfigs.config
            buildConfigField("String", "BASE_URL", "${DEBUG_BASE_URL}")
        }
        //自定義打包型別時 好像必須指定簽名
        beta {
            signingConfig signingConfigs.config
            buildConfigField("String", "BASE_URL", "${OTHER_BASE_URL}")
            //(當依賴了其他module時)自定義打包型別需要加上下面這行程式碼
            matchingFallbacks = ['debug']
        }
    }
  • 然後再來修改之前在ApiService中定義的URL
public interface ApiService {

    //直接獲取 BuildConfig中生成的BASE_URL
    String BASE_URL = BuildConfig.BASE_URL;

    //....
}

這樣當我們通過Build-->Generate Signed APK選單打包時就可以選擇對應的打包版本了
這裡寫圖片描述

當我們直接點選執行按鈕進行安裝的時候預設打包的是debug版本,那如果想除錯其他版本的地址怎麼辦呢?

  • 解決辦法當然是有的了,進入Build Variants面板進行打包型別選擇這樣執行出來的apk就是你選擇的對應版本了:
    這裡寫圖片描述

通過這個案例,你可以進行舉一反三看看在開發中還有什麼地方也是可以這樣進行玩耍的