gradle 变体打包 productFlavors

简介: gradle 变体打包 productFlavors

1.需求,板型有很多,一套代码在不同板子上,使用的签名不同,需要单独签名,于是就有了如下配置

2.配置app的build.gradle

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}
android {
    namespace 'com.example.test'
    compileSdk 31
  添加signingConfigs 配置不同的签名文件 
    signingConfigs {
        RK3568 {
            keyAlias 'fe-a3568'
            keyPassword '123456'
            storeFile file('../key/fe-a3568-old.keystore')
            storePassword '123456'
        }
        RK3399 {
            keyAlias '3399androidkey'
            keyPassword 'abc.123'
            storeFile file('../key/3399androidp.keystore')
            storePassword 'abc.123'
        }
    }
    defaultConfig {
        applicationId "com.example.test"
        minSdk 24
        targetSdk 31
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        签名配置需要设置为null 不然指定具体签名文件后,就不会根据product的变化选择不同的签名文件了
            signingConfig null
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig null
        }
    }
配置不同的板型属性,使用不同的签名文件
    productFlavors {
        RK3568 {
            signingConfig signingConfigs.RK3568
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
        RK3399 {
            signingConfig signingConfigs.RK3399
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    dataBinding {
        enabled = true
    }
}
dependencies {
    implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'org.greenrobot:eventbus:3.0.0'
    implementation 'androidx.core:core-ktx:1.8.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

productFlavors配置签名 - 简书 (jianshu.com)

(345条消息) Android Studio 通过gradle配置 配置构建变体 组合多个产品风味 打包生成不同包名不同资源apk_蓝色的天空yyy的博客-CSDN博客

使用gradle的productFlavors实现Android项目多渠道打包 - 知乎 (zhihu.com)

dimension属性为多维度:可以设置多个,当项目设置了多个dimension时,flavorDimensions 也需要设置多个,并用逗号,隔开

flavorDimensions "platform","1"

defaultConfig {
        applicationId "com.example.test"
        minSdk 24
        targetSdk 31
        versionCode 1
        versionName "1.0"
        flavorDimensions "platform","1"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
productFlavors {
        RK3568 {
            signingConfig signingConfigs.RK3568
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
        RK3399 {
            signingConfig signingConfigs.RK3399
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
        RK3568T {
            signingConfig signingConfigs.RK3568
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "1"
        }
        RK3399T {
            signingConfig signingConfigs.RK3399
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "1"
        }
    }


productFlavors {
        RK3568 {
            signingConfig signingConfigs.RK3568
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
        RK3399 {
            signingConfig signingConfigs.RK3399
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
        RK3568T {
            signingConfig signingConfigs.RK3568
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
        RK3399T {
            signingConfig signingConfigs.RK3399
            versionCode 1//该风味版本码
            versionName "1.0"//该风味版本名称
            dimension "platform"
        }
    }
defaultConfig {
        applicationId "com.example.test"
        minSdk 24
        targetSdk 31
        versionCode 1
        versionName "1.0"
        flavorDimensions "platform"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

 

安装时报All flavors must now belong to a named flavor dimension.


 

这个错误是说:必须要保证所有的flavor 都属于同一个维度。

studio 3.0之前配置多版本打包是不会有问题的,可以正常运行、打包。但是AndroidStudio升级到3.0之后,配置多版本打包运行的时候会提示这个错误,这是plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度。

解决方案为:在build.gradle 的defaultConfig 中加入,指定dimension

flavorDimensions "platform"


目录
相关文章
|
11天前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
23 0
|
8月前
|
jenkins Java Shell
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
68 4
|
开发工具
Gradle使用命令行打包apk
Gradle使用命令行打包apk
436 0
Gradle使用命令行打包apk
|
Java Android开发
Android Gradle 多渠道打包
Android Gradle 多渠道打包
591 2
Android Gradle 多渠道打包
|
Web App开发 Java 开发工具
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 五 )
这篇是直接给大家上代码,希望让大家了解到友盟
395 0
|
Web App开发 Java 开发工具
|
Java
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 三 )
接上两篇的知识,这篇也是分享一下配置信息
275 0
|
Web App开发 Android开发 数据安全/隐私保护
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 二 )
自从Google放弃对Eclipse的维护,并力推Android studio时,其版本的更新迭代速度也是非常快的,而且开发的工程中经常需要用到gradle的相关操作
95 0
|
XML Java 开发工具
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 一 )
自从Google放弃对Eclipse的维护,并力推Android studio时,其版本的更新迭代速度也是非常快的,而且开发的工程中经常需要用到gradle的相关操作
86 0
|
Android开发
Gradle实现的两种简单的多渠道打包方法
Gradle实现的两种简单的多渠道打包方法