【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
            //...
        }
    }
    //...
}
复制代码
相关文章
相关标签/搜索