Android 不同的 packageName 和 flavors
Android different packageName with flavors
我需要安装项目的 2 个版本(生产和开发)。我需要 2 个应用程序。我试图通过使用口味来实现它,但是当我签署 apk 时,它总是生成相同的应用程序,具有相同的 packageName (com.company.project)。我试过从 defaultConfig 中删除 applicationId 但它不起作用 neither.In 清单,包名称是 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"
}
}
当您创建 productFlavors
时,相应的 gradle
任务也会发生变化。
比如原来你只有assembleDebug
和assembleRelease
。但是,在实施 productFlavors
之后,gradle
任务将发生变化。考虑到你的例子,它将是
assembleDevelopmentDebug
assembleDevelopmentRelease
assembleProductionDebug
assembleProductionRelease
如果您正在使用 Android Studio
,那么您不必担心 gradle
任务。只需从菜单中 select Build Variant
并构建项目。它将 运行 相应的 gradle 任务并安装构建。
我写了一篇博客解释这个,Product Flavors in Android. A sample project is also available on GitHub。
我正在做类似的事情,我的 build.gradle 看起来像这样并且有效:
flavorDimensions 'Level'
productFlavors {
alpha {
dimension 'Level'
applicationIdSuffix '.alpha'
}
beta {
dimension 'Level'
applicationIdSuffix '.beta'
}
major {
dimension 'Level'
}
}
我实际上是在 Build -> Edit Flavors 中设置的,它为我生成了所有内容。
最后我这样做了:
def appName = 'AppName'
productFlavors {
devel {
applicationIdSuffix ".devel"
def buildId, appNameLabel
buildId = androidApplicationId + '.devel' + androidVersionCode
appNameLabel = appName + 'd' + androidVersionName
buildConfigField "String", "BUILD_ID", '"' + buildId + '"'
manifestPlaceholders = [app_name_label: appNameLabel, buildId: buildId] }
QA {
applicationIdSuffix ".qa"
def buildId, appNameLabel
buildId = androidApplicationId + '.qa' + androidVersionCode
appNameLabel = appName + 'q' + androidVersionName
buildConfigField "String", "BUILD_ID", '"' + buildId + '"'
manifestPlaceholders = [app_name_label: appNameLabel, buildId: buildId]
}
pro {
buildConfigField "String", "BUILD_ID", '"' + androidApplicationId + '"'
manifestPlaceholders = [app_name_label: appName, buildId: androidApplicationId]
}
我需要安装项目的 2 个版本(生产和开发)。我需要 2 个应用程序。我试图通过使用口味来实现它,但是当我签署 apk 时,它总是生成相同的应用程序,具有相同的 packageName (com.company.project)。我试过从 defaultConfig 中删除 applicationId 但它不起作用 neither.In 清单,包名称是 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"
}
}
当您创建 productFlavors
时,相应的 gradle
任务也会发生变化。
比如原来你只有assembleDebug
和assembleRelease
。但是,在实施 productFlavors
之后,gradle
任务将发生变化。考虑到你的例子,它将是
assembleDevelopmentDebug
assembleDevelopmentRelease
assembleProductionDebug
assembleProductionRelease
如果您正在使用 Android Studio
,那么您不必担心 gradle
任务。只需从菜单中 select Build Variant
并构建项目。它将 运行 相应的 gradle 任务并安装构建。
我写了一篇博客解释这个,Product Flavors in Android. A sample project is also available on GitHub。
我正在做类似的事情,我的 build.gradle 看起来像这样并且有效:
flavorDimensions 'Level'
productFlavors {
alpha {
dimension 'Level'
applicationIdSuffix '.alpha'
}
beta {
dimension 'Level'
applicationIdSuffix '.beta'
}
major {
dimension 'Level'
}
}
我实际上是在 Build -> Edit Flavors 中设置的,它为我生成了所有内容。
最后我这样做了:
def appName = 'AppName'
productFlavors {
devel {
applicationIdSuffix ".devel"
def buildId, appNameLabel
buildId = androidApplicationId + '.devel' + androidVersionCode
appNameLabel = appName + 'd' + androidVersionName
buildConfigField "String", "BUILD_ID", '"' + buildId + '"'
manifestPlaceholders = [app_name_label: appNameLabel, buildId: buildId] }
QA {
applicationIdSuffix ".qa"
def buildId, appNameLabel
buildId = androidApplicationId + '.qa' + androidVersionCode
appNameLabel = appName + 'q' + androidVersionName
buildConfigField "String", "BUILD_ID", '"' + buildId + '"'
manifestPlaceholders = [app_name_label: appNameLabel, buildId: buildId]
}
pro {
buildConfigField "String", "BUILD_ID", '"' + androidApplicationId + '"'
manifestPlaceholders = [app_name_label: appName, buildId: androidApplicationId]
}