Конфликт АндроидМанифестов

Со слезами на глазах вспоминаю волшебное время, когда программисту надо было программировать, а не скачивать триста тысяч сторонних библиотек и пытаться их “подружить”. Целый день сижу над проектом - ни одной строчки кода не довелось написать :face_with_symbols_over_mouth:

В общем, беда. Есть у меня прога. Как водится, написана не мной. При попытке сбилдить ее как .aab - билдится нормальнл. При попытке сделать из нее .apk - выдает вот такое вот:

Execution failed for task ‘:AN_Res:verifyReleaseResources’.
1 exception was raised by workers:
com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed
D:\Work\OtherProjects\lost-phone-unity-wip-master\lost-phone-unity-wip-master\Temp\gradleOut\AN_Res\build\intermediates\aapt_friendly_merged_manifests\release\aapt\AndroidManifest.xml:21: error: resource drawable/app_icon (aka com.chartboost.sdk.unity:drawable/app_icon) not found.
D:\Work\OtherProjects\lost-phone-unity-wip-master\lost-phone-unity-wip-master\Temp\gradleOut\AN_Res\build\intermediates\aapt_friendly_merged_manifests\release\aapt\AndroidManifest.xml:21: error: resource string/app_name (aka com.chartboost.sdk.unity:string/app_name) not found.
error: failed processing manifest.

Че с этой гадостью делать - ума не приложу. И в гугле нагуглить не могу.

Нагуглил похожую траблу с решениями:
No resource found that matches the given name (@drawable/app_icon)

I had this problem when I updated my project to latest version of unity. It took me much time to find the problem. Simply replace @drawable with @Mipmap (with lowercase m) in AndrdoidManifest.xml in plugin folder.

I had to update the firebase plugin, which was the source of the problems (because the AndroidManifests of it couldn’t be merged).

Судя по имени это не про сам проект, а про библиотеку chartboost.
Надо смотреть что в манифесте этой библиотеки.

Тут советуют убрать оттуда эти объявления https://docs.unity3d.com/Manual/android-gradle-troubleshooting.html

An AndroidManifest.xml file, either the main one or in a library, references a non-existing resource. Often it is the application icon or label string that is set by a library. This can happen if you have copied your main manifest to a library project without removing those references.

Remove the attribute from one of the Android Manifests – normally the one from the library.


Еще в гугле советуют обновить библиотеки и/или юнити.

Не помогло. Может, там надо было это сделать во всех манифестах, которые существуют в проекте, но я только в Plugins/Android делала.

А вот это помогло, но вызвало вопрос: “А что, так можно было?”

Еще про манифесты хочу спросить. Я так поняла, что при билде они мерджатся в один манифест. И главным (чьи строки при конфликте запишутся в объединенный) является тот, что лежит в Plugins/Android? Или как-то это тоже можно настраивать?

хз, я для мобилок не делал ничего :kolobokcrossing:

Тут вроде бы об этом, и можно просто указать вручную созданный манифест.
https://docs.unity3d.com/Manual/android-manifest.html

И еще вопросик. Теперь выдается такая ошибка:

Execution failed for task ‘:transformClassesWithMultidexlistForRelease’.
com.android.build.api.transform.TransformException: Error while generating the main dex list:
Error while merging dex archives:
Program type already present: com.stansassets.androidnative.BuildConfig

По подсказкам великого стекОверФлоу, multiDexEnabled true в gradle.build (точнее, в mainTemplate.gradle) добавляла. И туда же писала и

dependencies {
compile ‘com.android.support:multidex:1.0.1’ (тут от 1.0.1 до 1.0.3)
}

и

dependencies {
implementation ‘com.android.support:multidex:1.0.3’ (тут тоже от 1.0.1 до 1.0.3)
}

и

dexOptions {
javaMaxHeapSize “4g”
}

И даже в манифесте дописывала

<application

android:name=“android.support.multidex.MultiDexApplication”>

Короч, ничего не работает. Как вылазила ошибка, так и вылазит.

Как вариант если совсем ничего не меняется: может он не пересобирает и надо выполнить gradle clean (или просто самому удалить то, что он насоздавал).

А это где выполнить?

В юнити хз где градл, наверно в логе оно пишет как/откуда он вызывается.
Поэтому и говорю, что проще удалить ту папку, что он нагенерировал )

Так не на генерировал же ничего. Все, что он генерирует при компиляции, он за собой сам убирает - проверяла.

У обычного Градла еще в папке юзера есть /.gradle/caches/ https://stackoverflow.com/a/30450020/964478

Но да, тогда видимо не в этом дело :frowning:

Кажись, я нашла. Есть у меня в папке Плагин/Андроид манифест, в котором написан кое-какой пакедж, а также есть сторонняя библиотека, в которой тоже есть папка с андроидом, но чуть другая. И в ней есть тоже манифест с этим пакеджем. Как исправлять, пока не придумала. Я в этих манифестах дуб - дерево хвойное

Наверно надо убрать в одной из них.

https://answers.unity.com/questions/765961/multiple-plugin-conflict.html

First off, for general knowledge, DEX is the process that takes code files (whether it’s your code, or code that is provided in libraries) and converts it into the DEX format (Dalvik Executable).

Libraries are only used for convenience during development: when you build your game, there’s no notion of libraries anymore - it’s all just compiled code.

For this reason, when 2 or more plugins reference the same library (contain 2 copies of a referenced JAR) or define a class with the same name, a conflict occurs, causing this error.

For example: if you are using 2 plugins in your Unity project and both contain a copy of GooglePlayServices.jar, DEX will fail to build your game, since it will try to process multiple copies of the same class.

In your case, it is not clear whether this is the case (multiple copies of the same jar) or whether it’s multiple copies of the same class.

The first one is easier to spot (look for multiple copies of the same JAR). the 2nd one is trickier but it will help if you provided some more information (e.g: is there any extra information in the Unity console? the DEX tool should provide the name of the class that causes the failure for example).

Чот сложно всё в этом Андроиде, по ссылке выше человек даже предлагают услугу по сборке апк за 29 евро и там 189 отзывов :catshake: :happymerchant:

Так по твоей первой ссылке на форум Unity или по моей ссылка по ссылке, точно не помню. Но там говорят о проблемах переноса проектов из одной студии в другую в Android Studio и исправление проблемы связано с корректировкой манифестов.
Сам не спец по Android Studio. Разок установил для ознакомления, загрузилось терабайты не понятно чего, своял калькулятор по примерам из сети, снес студию и перекрестился.

там где-то как раз наоборот советовали собирать проект в Андроид Студии.

https://forum.unity.com/threads/shrinker-r8.710009/

You could export to the project as a Gradle project and then manually edit the AndroidManifest.xml then build in Android Studio.


Думаю тут дело больше в Юнити или библиотеках для нее.
В чистой Джаве же тоже нельзя, чтоб были одинаковые классы, для того и есть пакеты (которые неймспейсы).
Хотя иметь два одинаковых JAR в classpath вроде можно, просто выберется один :thinking: (но обычно это не происходит при использовании системы управления зависимостями типа Maven)
Так что видимо Андроид тоже виноват раз всё как-то по-другому собирает :crazy_face:

3 сообщения было перенесено в новую тему: Программирование превращается в настройку

Это форум. Соответственно каждый что-нить советует.
Читал на том-же форуме: пере-собрать проект в своей студии при использовании наработок полученных из иных ПК. Но утверждать не стану, в Android я НУБ.
Подозреваю трабла кроется в открытости Unity и закрытости Android. И вот чтоб подружить их между собой и подружить проекты созданные на различных ПК нужны танцы с манифестами. ИМХО.

Сообщение было перемещено в эту тему: Программирование превращается в настройку