【CodeSnippet】Gradle

1. 配置簽名

android {
    //...
    signingConfigs {
        debug {
            keyAlias 'hyrelease'
            keyPassword 'password'
            storeFile file('HyTech.jks')
            storePassword "password"
        }
        release {
            keyAlias 'hyrelease'
            keyPassword 'password'
            storeFile file('HyTech.jks')
            storePassword "password"
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
            buildConfigField "boolean", "LOG_DEBUG", "true"
            minifyEnabled false
            zipAlignEnabled true
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            signingConfig signingConfigs.release
            buildConfigField "boolean", "LOG_DEBUG", "false"
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //...
}
複製代碼

2. 使用JDK1.8

android {
    //...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    //...
}
複製代碼

3. 配置實用aar庫

普通的在App模塊中的aar,若是在子模塊中的aar須要寫成下面的寫法android

android {
    //...
    repositories {
        flatDir {
            dirs 'libs'
            dirs project(':QrCode').file('libs')
        }
    }
    //...
}
複製代碼

4. productFlavor配置

android {
    //...
    //聲明維度:產品
    flavorDimensions "ProductFeature"
    productFlavors {
        RobotA {//機器人A
            dimension "ProductFeature"
            resValue "string", "app_name", "機器人A"
            applicationId 'com.xxx.a'
            versionCode = 9
            versionName = '1.3.1'
            manifestPlaceholders = [updateApkPathFlag: applicationId,
                                    app_icon_x   : "@mipmap/ic_launcher"]
            buildConfigField "String", "channel", "\"RobotA\""
        }
        RobotB {//機器人B
            dimension "ProductFeature"
            resValue "string", "app_name", "機器人B"
            applicationId 'com.xxx.b'
            versionCode = 4
            versionName = '1.0.3'
            manifestPlaceholders = [updateApkPathFlag: applicationId,
                                    app_icon_x   : "@mipmap/ic_launcher_common"]
            buildConfigField "String", "channel", "\"RobotB\""
        }
    }
    //...
}
複製代碼
  • flavorDimensions 中聲明產品的維度,只有一個:ProductFeature
  • RobotA,RobotB 是 ProductFeature 維度的取值
  • RobotA 下,就是一個產品,這裏定義成是一個不一樣的APK
    • dimension:所屬的維度
    • resValue,新建一個變量,這裏代替的是app的名稱,而後就能夠直接經過 R.string.app_name 訪問到,或者是:@string/app_name 訪問到。
    • applicationId,聲明特有的包名
    • versionCode,聲明特有的版本代號
    • versionName,聲明特有的版本名稱
    • manifestPlaceholders,設置manifest中的字段,例如這裏,app_icon_x : "@mipmap/ic_launcher" 設置的是不一樣的圖標,那麼對應的 manifest 中就須要這樣寫:android:icon="${app_icon_x}",這樣才能對應起來。同理,updateApkPathFlag: applicationId 也是同樣。
    • buildConfigField,新建變量,會直接編譯到 BuildConfig 中,經過 BuildConfig.channel 訪問到

5. 配置語言包

android {
    //...
    defaultConfig {
        //...
        resConfigs "zh", "en"
    }
    //...
}
複製代碼

6. 配置So庫

android {
    //...
    defaultConfig {
        //...
        ndk {
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        }
    }
    //...
}
複製代碼

7. 修改編譯的APK名稱

buildTypes {
        debug {
            signingConfig signingConfigs.debug
            buildConfigField "boolean", "LOG_DEBUG", "true"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String", "channel", "\"test\""
        }
        release {
            signingConfig signingConfigs.release
            buildConfigField "boolean", "LOG_DEBUG", "false"
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                variant.outputs.all {
                    def buildTypeName = ''
                    if (buildType.name.contains("debug"))
                        buildTypeName = 'debug-'
                    outputFileName = "${variant.productFlavors[0].name}-${buildTypeName}${xVersionName}-${xVersionCode}.apk"
                }
            }
        }
    }
複製代碼

這裏,還在 debug 模式中,把字符串 channel 改成了 test。api

8. Java代碼,Manifest,build.gradle中統一一個變量

Java:bash

/*IDs*/
String Wx_Pay_App_Id = BuildConfig.WX_Pay_AppId;
複製代碼

Manifest:微信

<!-- 微信支付 -->
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="${WX_Pay_AppId}" />
    </intent-filter>
</activity>
複製代碼

build.gradle:app

def WX_Pay_AppId = "xxx"
android {
    //...
    defaultConfig {
        //...
        manifestPlaceholders = [
                //微信支付APPID
                WX_Pay_AppId : WX_Pay_AppId,
        ]
    }
    //...
    buildTypes {
        debug {
            //...
            buildConfigField "String", "WX_Pay_AppId", WX_Pay_AppId
            //...
        }
        release {
            //...
            buildConfigField "String", "WX_Pay_AppId", WX_Pay_AppId
            //...
        }
    }
    //...
}
複製代碼
相關文章
相關標籤/搜索