Android Studio 1.0和错误“库项目无法设置applicationId”

时间:2014-12-09 09:02:19

标签: android android-studio android-gradle android-library

将Android Studio更新为1.0后,我看到此错误:

  

错误:库项目无法设置applicationId。 applicationId已设置    to' com.super.app'在默认配置中。

我按照建议更新了Gradle插件,但我不明白如何解决这个问题。

5 个答案:

答案 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')
     
    }
  • 在 1 中,我们导出一个闭包,以便我们可以在模块的 build.gradle 文件中使用它。
  • 在 2 中,我们定义了一个自定义 myApplicationIdSuffix 属性。我们不能简单地使用 applicationIdSuffix,因为它不可能在库模块中使用(如果这样做,构建会失败)。
  • 在 3 中,如果我们检测到它只是一个应用程序模块,我们将迭代创建的风格并设置 applicationIdSuffix。
  • 4 是一种检查此闭包在何处使用的方法。

剩下的就是在我们模块的 build.gradle 文件中使用这个闭包。例如。在应用程序模块中,这看起来像这样:

apply plugin: 'com.android.application'
apply from: "${rootProject.projectDir}/flavors.gradle"

android {
    // other config...

    with flavorConfig
}

如果不清楚,您可以查看this article以获得更好的理解。