9

我正在尝试编写一个曾经构建过的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
...

构建.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 的开头或结尾都有一个下划线(这里不是这种情况),所以我真的很茫然

4

5 回答 5

15

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

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

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

于 2019-04-10T11:48:04.050 回答
4

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

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

于 2020-01-29T07:36:36.550 回答
0

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

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 包含 number 和 point(.) 时它无法工作。在 android 中,appid(pacakege name) 应该是这样的 'come.domain.project' 它是反向域名。

于 2020-12-10T08:32:37.173 回答
0

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

于 2021-09-22T21:29:51.827 回答
0

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

于 2022-01-12T12:51:02.503 回答