【问题标题】:Error: attribute 'package' in <manifest> tag is not a valid Android package name错误:<manifest> 标记中的属性“包”不是有效的 Android 包名称
【发布时间】:2019-08-31 03:56:15
【问题描述】:

我正在尝试编写一个 android 应用程序,该应用程序曾经构建过。现在,每次构建时,都会出现以下错误:

Caused by: com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed
C:\Users\Jay\AndroidStudioProjects\DndTools-App\app\build\intermediates\merged_manifests\debug\AndroidManifest.xml:2: AAPT: 
error: attribute 'package' in <manifest> tag is not a valid Android package name: 'dndtools'.

我最初以 android-kotlin 教程为基础,因为我想熟悉 kotlin 和 android,如果这可能相关的话。此外,“合并清单”列出了 package = dndtools 而不是 com.dndtools.android.dndtools,也不确定是否相关。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.dndtools.android.dndtools">

  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name" //dndtools
...

build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
def androidSupportVersion = '28.0.0'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        applicationId "dndtools"
        minSdkVersion 21
        targetSdkVersion 28
...

我已经在网上搜索过,其他出现此错误的人通常在他们的 applicationId 的开头或结尾都有一个下划线(这里不是这种情况),所以我真的很茫然

【问题讨论】:

    标签: android android-package-managers aapt2


    【解决方案1】:

    Android 应用程序的完整 Java 语言样式的包名称。名称可以包含大写或小写字母(“A”到“Z”)、数字和下划线(“_”)。但是,个别包名部分只能以字母开头

    【讨论】:

      【解决方案2】:

      我的问题是包 ID 的命名不正确。我放了com.example.3d之类的东西。不能以3d之类的数字开头。

      【讨论】:

        【解决方案3】:

        就我而言,我使用默认配置构建应用程序

        compileSdkVersion 30
        
        defaultConfig {
            applicationId "com.webview.app"
            minSdkVersion 23
            targetSdkVersion 30
            versionCode 1
            versionName "1.0"
        
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            applicationIdSuffix kotlin_version
        }
        

        当我添加 productFlavors

          flavorDimensions "default"
          productFlavors {
            test01{
                dimension "default"
                applicationIdSuffix ".test"
                versionNameSuffix "-test00"
            }
        
            test01{
                dimension "default"
                applicationIdSuffix ".test"
                versionNameSuffix "-test01"
            }
        
            test01{
                dimension "default"
                applicationIdSuffix ".test"
                versionNameSuffix "-test02"
            }
        }
        

        然后我正在运行我的应用程序,我收到了这条消息

        tag is not a valid Android package name: 'com.webview.app.1.4.21.jb'
        

        我认为问题应该是数字和点(。)不能是包名,所以我删除代码

        applicationIdSuffix kotlin_version
        

        它对我有用,因为 kotlin_version 值是ext.kotlin_version = "1.4.21",当我的 appid 包含数字和点(。)时它无法工作。在 android 中,appid(pacakege name) 应该是这样的 'come.domain.project' 它是反向域名。

        【讨论】:

          【解决方案4】:

          在我的案例中,我已将 Android 工作室更新3.5.3 版,并且在项目设置时,我错误地添加了 applicationIdSuffix = kotlin_version,所以这就是导致问题的原因。

          所以简单地删除这一行就帮助我解决了这个问题。

          【讨论】:

          • 我也有类似的问题。我不得不从应用的 build.gradle 中删除 applicationIdSuffix 和 VersionNameSuffix。
          【解决方案5】:

          applicationId "dndtools" 更改为applicationId "com.dndtools.android.dndtools"

          applicationId 在您的 build.gradle 文件中用作真正的包,这就是为什么您也可以在合并的 manfiest 中看到它的原因。更新它以匹配您在 Android Manfiest 中的那个,它应该可以正常工作。

          至于为什么它是一个无效的包 - 它需要至少有一个点才能安装在 Android 上。

          【讨论】:

          • 此时我自己已经弄清楚了,但这是正确的答案。谢谢!
          猜你喜欢
          • 2021-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-22
          • 1970-01-01
          • 2022-11-23
          • 2017-03-18
          • 1970-01-01
          相关资源
          最近更新 更多