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

14ifxucb  于 2023-06-06  发布在  Android
关注(0)|答案(6)|浏览(309)

在将Android Studio更新到1.0后,我看到了以下错误:

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

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

htrmnn0y

htrmnn0y1#

基于info
库项目中的ApplicationId
不能使用applicationId自定义库项目的包。包名必须在库项目中固定(并在清单中指定为packageName)。Gradle插件之前没有强制执行此限制。
从库的build.gradle文件中删除applicationId变量应该可以解决此问题。

57hvy0tb

57hvy0tb2#

**感谢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">
...

如果您不需要重命名应用程序的软件包名称,这是正确的解决方案。要重命名它,您需要使用“flavours”:

android {
   ...
   productFlavors {
       flavor1 {
           applicationId 'com.super.superapp'
       }
   }
jmo0nnb3

jmo0nnb33#

库不能设置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以更好地理解。

l3zydbqr

l3zydbqr4#

只是以防万一,它可以帮助一些人:
当我将一个Eclipse项目导入Android Studio时,我得到一个错误:

“错误:应用程序和测试应用程序ID不能相同”

奇怪的是,我查看了build.gradle,发现了两个占位符,一个用于application,另一个用于testapplication。
我删除了testApplicationId,正如这篇文章中所建议的那样,这帮助我解决了这个问题。
注意:此解释与此问题中发布的错误无关,但可能会帮助遇到类似错误的人。

bqujaahr

bqujaahr5#

不能为库定义applicationId。但是如果你想在你的构建文件中使用一个标识符,它会给予你你的库包名,你可以为模块定义一个变量,然后根据需要使用这个值。
例如:Library's 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"
 }
}
kqlmhetl

kqlmhetl6#

如果您正在创建一个模块化应用程序,则applicationId变量应该位于主模块的build.gradle文件中,但applicationId不应该位于其他模块的build.gradle文件中。
例如:
主模块build.gradle

applicationId "com.example.exampleProject"

其他模块/ Modules build.gradle

group = 'com.example.exampleOtherModule'

相关问题