我想将应用程序更改为versionNameAndroidManifest 文件中为我正在构建的特定风格定义的任何内容。
因此,如果我只构建我拥有的 4 种已定义风格中的一种,例如:
gradle assembleFlavor1Debug
我期望Flavor1具有与其特定清单定义的版本名称相同的版本名称(因为清单文件的合并),但这并没有发生。
在构建期间,我如何知道正在构建哪种特定风格?
因为如果我知道正在运行什么风格,
我可以versionName从清单中提取相应的内容并将其设置为android.defaultConfig.versionName,
这解决了我的问题。
我正在尝试为每个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文档但找不到我要找的东西.
任何帮助将非常感激.
我有两种产品口味和三种构建类型.
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
我为我的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工作正常,即当我在同一部手机上安装两种不同类型时,它不会引发错误.它让我安装它们.
下一步是错误发生的地方.我使用SyncAdapter并AccountManager控制一些事情.我已修改ACCOUNT_TYPE使用了APPLICATION_ID.因为不能够使用gradle这个问题的${applicationId}非清单XML资源文件,我已经创造了每味不同的目录结构和复制syncadapter.xml,并authenticator.xml有相应的authority和account type字符串.
我也尝试过这个博客中描述的技术 - http://blog.jensdriller.com/android-gradle-workaround-for-missing-placeholder-support-in-resource-files/
最受欢迎的答案是在Gradle中使用构建类型来运行在一台设备上使用ContentProvider的相同应用程序但事情似乎不起作用.
有人能够最近上班吗?
xml android gradle android-syncadapter android-productflavors
我使用 build.gradle(app) 来创建不同风格的 apk。但是安装不同风格的同一个 apk 会覆盖前一个。我想创建不同的 apk 以同时在同一设备上运行。我想使用不同的 appicon 创建不同的 apk,这些 appicon 可以安装在同一设备上并同时运行。任何链接或教程或直接帮助表示赞赏。
提前致谢。
我想让所有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
可以说我有以下内容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,那么flavor2和flavor4.
我试图找出是否有办法通过使用这样的东西来避免冗余:
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的一套口味.有人试过做类似的事情,可以提供一些指示吗?
android gradle android-studio android-productflavors android-sourcesets
我需要安装我的项目的两个版本(生产和开发).我需要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) 我现在已经坚持了一天.我为我的项目创建了两种风格,并将它们添加到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的命名
我不能让产品口味有效.我有这个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)