将Android Studio更新为1.0后,我看到此错误:
错误:库项目无法设置applicationId。 applicationId已设置 to' com.super.app'在默认配置中。
我按照建议更新了Gradle插件,但我不明白如何解决这个问题。
答案 0 :(得分:202)
基于此info:
LibraryId中的ApplicationId
您无法使用applicationId自定义库项目的包。包名称必须在库项目中修复(并在清单中指定为packageName)。 Gradle插件之前没有强制执行此限制。
从库的build.gradle
文件中删除applicationId变量应该可以解决问题。
答案 1 :(得分:58)
感谢Joel的正确回答:我只需从te .gradle
文件中删除一行:
defaultConfig {
applicationId "com.super.app" <---- remove this line
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
变为
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
和我的AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.super.app">
...
如果您不需要重命名应用的套餐名称,这是正确的解决方案。要重命名它,您需要使用&#34; flavors&#34;:
android {
...
productFlavors {
flavor1 {
applicationId 'com.super.superapp'
}
}
答案 2 :(得分:1)
只是帮助一些人:
当我将eclipse项目导入android studio时,我收到错误::
“错误:应用程序和测试应用程序ID不能相同”
奇怪但是我查看了build.gradle并找到了两个占位符,一个用于应用程序,另一个用于testapplication。
我已按照本文中的建议删除了testApplicationId,这有助于我解决问题。
注意:此解释与此问题中发布的错误无关,但可能会对遇到类似错误的人有所帮助。
答案 3 :(得分:0)
您不能为您的lib定义applicationId。 但是,如果要在构建文件中使用一个标识符,该标识符将为您提供库包名称,则可以为模块定义一个变量,然后根据需要使用该值。
例如:图书馆的build.gradle
apply plugin: 'com.android.library'
def libraryGroupId = 'com.google.example'
def libraryArtifactId = project.getName()
def libraryVersion = '1.1'
此外,您可以在lib中的构建文件本身中根据需要使用以下值。
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "$libraryVersion"
resValue "string", "Library", libraryGroupId"
}
}
答案 4 :(得分:0)
库无法设置 applicationId
,如果您在多模块项目中工作并从单独的文件中提取 flavors
,上述答案均无效。对于模块化的应用程序,您需要执行以下步骤 -
在项目根目录下创建一个flavors.gradle
文件
ext.flavorConfig = { // 1
flavorDimensions "pricing"
productFlavors {
free {
dimension "pricing"
ext.myApplicationIdSuffix = '.free' // 2
}
paid {
dimension "pricing"
ext.myApplicationIdSuffix = '.paid'
}
}
productFlavors.all { flavor -> // 3
if (flavor.hasProperty('myApplicationIdSuffix') && isApplicationProject()) {
flavor.applicationIdSuffix = flavor.myApplicationIdSuffix
}
}
}
def isApplicationProject() { // 4
return project.android.class.simpleName.startsWith('BaseAppModuleExtension')
}
剩下的就是在我们模块的 build.gradle
文件中使用这个闭包。例如。在应用程序模块中,这看起来像这样:
apply plugin: 'com.android.application'
apply from: "${rootProject.projectDir}/flavors.gradle"
android {
// other config...
with flavorConfig
}
如果不清楚,您可以查看this article以获得更好的理解。