Error: attribute 'package' in <manifest> tag is not a valid Android package name

Error: attribute 'package' in <manifest> tag is not a valid Android package name

我正在尝试编写一个 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,如果这可能相关的话。此外,"Merged Manifest" 列出了 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的开头或者结尾有下划线(这里不是),我真的很茫然

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

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

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

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

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

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

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'

我觉得问题应该是number和point(.)不能是包名,所以删代码

applicationIdSuffix kotlin_version

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

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

这样的数字开头

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