标签: android-productflavors

Android - 根据风味更改应用程序版本名称

我想将应用程序更改为versionNameAndroidManifest 文件中为我正在构建的特定风格定义的任何内容。

因此,如果我只构建我拥有的 4 种已定义风格中的一种,例如:
gradle assembleFlavor1Debug

我期望Flavor1具有与其特定清单定义的版本名称相同的版本名称(因为清单文件的合并),但这并没有发生。

在构建期间,我如何知道正在构建哪种特定风格?
因为如果我知道正在运行什么风格,
我可以versionName从清单中提取相应的内容并将其设置为android.defaultConfig.versionName
这解决了我的问题。

android gradle android-productflavors

5
推荐指数
1
解决办法
1906
查看次数

Gradle构建类型为不同的Flavors定制

我正在尝试为每个gradle风格指定构建类型.所以结构将是

android {
    productFlavors {
        flavor1 {
            buildTypes {
                debug {
                    packageNameSuffix ".flavor1"
                    versionNameSuffix "flavor1"
                }
                release {
                    packageNameSuffix ".flavor1"
                    versionNameSuffix "flavor1"
                    signingConfig signingConfigs.foo
                }
            }
        }
        flavor2 {
            buildTypes {
                debug {}
                release {
                    signingConfig signingConfigs.bar
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是因为我有一些功能只适用于一种风格,但后来我需要能够为这些风格下的不同构建类型指定包名后缀和签名配置(并且flavor1-release签名配置!= flavor2-发布签名配置.

这不起作用.无论我选择哪种口味,似乎都会设置所有选项.

我不确定如何解决这个问题.我已经尝试过if条件来测试当前正在运行的任务是针对flavor1还是flavor2,然后设置构建类型值,但这也不起作用.

有些东西告诉我,我正在尝试做一些不受支持的事情,需要重新考虑我的构建结构.但我想也许那里的人肯定知道.我看过Gradle文档但找不到我要找的东西.

任何帮助将非常感激.

android gradle android-productflavors

5
推荐指数
0
解决办法
229
查看次数

在变体中更改resValue

我有两种产品口味和三种构建类型.

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
    qa {
        applicationIdSuffix ".qa"
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

productFlavors {
    old {
        applicationId "com.companyname.old"
        buildConfigField "String", "contentProvider", '"com.companyname.android.mobile.contentprovider"'
        resValue "string", "content_provider_authority", '"com.companyname.android.mobile.contentprovider"'

    }
    new {
        applicationId "com.companyname.new"
        buildConfigField "String", "contentProvider", '"' + applicationId + '.contentprovider"'
        resValue "string", "content_provider_authority", '"' + applicationId + '.contentprovider"'
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以根据产品风格改变content_provider_authority的resValue,但是对于变体?我希望所有产品版本的构建都使用应用程序ID +".contentprovider"但是对于我们的产品风味旧,如果调试或发布如上所示使用硬编码字符串,但增强它以便为qa构建使用不同的硬编码字符串类型.

android gradle android-build android-studio android-productflavors

5
推荐指数
1
解决办法
2358
查看次数

Android Flavors,ContentProviders,SyncAdapters和AccountManager

我为我的Android应用程序定义了一些flavor和buildTypes

productFlavors {
    X {
        applicationId = "com.x.xxxx"
    }
    Y {
        applicationId = "com.y.yyyy"
    }
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard_rules.txt'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    }

    debug {
        applicationIdSuffix ".debug"
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做可以创建不同的flavor/buildType组合.

现在为了确保ContentProviders工作而我没有收到Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]错误,我已将代码中的android:authorities="${applicationId}"AUTHORITY引用更改为BuildConfig.APPLICATION_ID.

这使得ContentProvider工作正常,即当我在同一部手机上安装两种不同类型时,它不会引发错误.它让我安装它们.

下一步是错误发生的地方.我使用SyncAdapterAccountManager控制一些事情.我已修改ACCOUNT_TYPE使用了APPLICATION_ID.因为不能够使用gradle这个问题的${applicationId}非清单XML资源文件,我已经创造了每味不同的目录结构和复制syncadapter.xml,并authenticator.xml有相应的authorityaccount type字符串.

我也尝试过这个博客中描述的技术 - http://blog.jensdriller.com/android-gradle-workaround-for-missing-placeholder-support-in-resource-files/

最受欢迎的答案是在Gradle中使用构建类型来运行在一台设备上使用ContentProvider的相同应用程序但事情似乎不起作用.

有人能够最近上班吗?

xml android gradle android-syncadapter android-productflavors

5
推荐指数
0
解决办法
314
查看次数

在android中为不同的风味创建单独的apk

我使用 build.gradle(app) 来创建不同风格的 apk。但是安装不同风格的同一个 apk 会覆盖前一个。我想创建不同的 apk 以同时在同一设备上运行。我想使用不同的 appicon 创建不同的 apk,这些 appicon 可以安装在同一设备上并同时运行。任何链接或教程或直接帮助表示赞赏。

提前致谢。

android build buildconfiguration apk android-productflavors

5
推荐指数
1
解决办法
2173
查看次数

Android Studio:如何为所选的buildType一次为所有productFlavors生成多个APK或签名的APK?

我想让所有apk文件发布到所有商店,所以我必须使用productFlavor每个apk:

的build.gradle

buildTypes {
        release {
           ...
        }
        debug {
           ...
        }
    }

    productFlavors {
        red {
           ...
        }
        yellow {
           ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出

appname_red_debug.apk
appname_red_release.apk
appname_yellow_debug.apk
appname_yellow_release.apk
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码可以改变apk的文件名.但是当我生成签名的apk时,我只能选择一个productFlavor.这样,结果只是特定于此productFlavor.

:更新

如何使用assembleRelease在commend行上一次制作所有apk文件?有没有人知道这件事?

android apk build.gradle android-gradle-plugin android-productflavors

5
推荐指数
2
解决办法
3761
查看次数

对具有完全相同配置的许多源集中的一些进行分组

可以说我有以下内容sourceSets:

sourceSets {
    flavor1 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor2 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
    flavor3 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor4 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你注意到flavor1并且flavor3有相同的srcDirs,那么flavor2flavor4.


尝试可能性#1

我试图找出是否有办法通过使用这样的东西来避免冗余:

sourceSets {
    flavor1, flavor3 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor2, flavor4 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
}
Run Code Online (Sandbox Code Playgroud)

以上不起作用(已经尝试过).寻找类似的东西,这样我就可以提供一套通用sourceDirs的一套口味.有人试过做类似的事情,可以提供一些指示吗?


尝试可能性#2 …

android gradle android-studio android-productflavors android-sourcesets

5
推荐指数
1
解决办法
387
查看次数

Android不同的packageName与flavor

我需要安装我的项目的两个版本(生产和开发).我需要2个应用程序.我试图通过使用flavor来实现它,但是当我签署apk时,它总是使用相同的packageName(com.company.project)生成相同的应用程序.我尝试从defaultConfig中删除applicationId,但它也不起作用.在清单中,包名称是com.company.project.

谁知道怎么做?

这是build.gradle

defaultConfig {
            multiDexEnabled true
            minSdkVersion 16
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
            applicationId "com.company.project"
    }    
    productFlavors {
                development {
                    applicationId
                    "com.company.project.DEV"
                    versionName "1.0-dev"
                    resValue "string", "app_name", "Project-Dev"                     
                }
                production {
                    applicationId
                    "com.company.project.PROD"
                    resValue "string", "app_name", "Project-Prod"
                    versionName "1.0-prod"                        
                }
            }
Run Code Online (Sandbox Code Playgroud)

android manifest build.gradle android-productflavors

5
推荐指数
1
解决办法
1814
查看次数

android中的产品风味无法正常工作

我现在已经坚持了一天.我为我的项目创建了两种风格,并将它们添加到build.gradle中android的buildtype下.然后我为两者创建了一个res文件夹,并为每个文件夹更改了图标.当我为任何变体运行项目时,它会显示项目中的图标.

我的项目结构如下

[project]
   [app]
      src
        main
            res
               mipmap
        flavor1
        flavor2
            res
               mipmap
Run Code Online (Sandbox Code Playgroud)

我的build.gradle是

    productFlavors {

    flavor1 {
        applicationId "abc"
    }

    flavor2 {
        applicationId "abc"
    }

}

sourceSets {
    flavo1 {
        res.srcDirs = ['src/flavor1/res']
    }

    flavor2 {
         res.srcDirs = ['src/flavor2/res']
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:nvm的命名

android android-productflavors

5
推荐指数
1
解决办法
538
查看次数

Android Studio中的产品风格

我不能让产品口味有效.我有这个gradle

apply plugin: 'com.android.application'
android {
    defaultConfig {
      minSdkVersion 14
      targetSdkVersion 24
      compileSdkVersion 27
    }
    signingConfigs {
        release {
      }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
            signingConfig signingConfigs.release
        }
    }
    repositories {
        maven { url "https://jitpack.io" }
    }
    flavorDimensions "dim1", "dim2", "dim3"
    productFlavors {
        flavor1 {
            dimension "dim1"
            applicationId "com.example.dim1.app"
        }
        flavor3 {
            dimension "dim2"
            applicationId "com.example.dim2.app"
        }
        flavor3 {
            dimension "dim3"
            applicationId "com.example.dim3.app"
        }
    }
    sourceSets {
        flavor1 {
          java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
          manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example1/AndroidManifest.xml"
          assets.srcDirs …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-productflavors

5
推荐指数
1
解决办法
3316
查看次数