Я пытаюсь написать приложение для 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 (что здесь не так), поэтому я действительно в растерянности
Замените applicationId "dndtools"
на applicationId "com.dndtools.android.dndtools"
.
applicationId
в вашем файле build.gradle используется как реальный пакет, поэтому вы можете увидеть его и в объединенном манфисте. Обновите его, чтобы он соответствовал тому, который у вас есть в Android Manfiest, и он должен работать нормально.
Что касается того, почему это недопустимый пакет - в нем должна быть хотя бы одна точка, чтобы его можно было установить на Android.
В моем случае у меня есть обновлен студия Android для версия 3.5.3, и во время настройки проекта я по ошибке добавил applicationIdSuffix = kotlin_version, поэтому это и вызывает проблему.
Поэтому простое удаление этой строки помогло мне решить эту проблему.
У меня тоже была похожая проблема. Мне пришлось удалить applicationIdSuffix и VersionNameSuffix из приложения build.gradle.
в моем случае я создаю приложение, используя конфигурацию по умолчанию
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 (имя пакета) должно быть похоже на «come.domain.project», это обратное доменное имя.
Моя проблема заключалась в неправильном именовании пакета if. Я поставил что-то вроде com.example.3d
. Нельзя начинать с числа вроде 3d
.
Полное имя пакета в стиле языка Java для приложения Android. Имя может содержать буквы верхнего или нижнего регистра (от «A» до «Z»), цифры и знаки подчеркивания («_»). Однако отдельные части имени пакета могут начинаться только с букв.
На данный момент я сам это понял, но это правильный ответ. Спасибо!