Я хочу настроить AndroidManifest в разных типах сборки. Например, в режиме отладки я просто хочу, чтобы действие было экспортировано.
Предположим, что основной манифест:
/main/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity" />
</application>
Манифест отладки:
/debug/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
Пример манифеста (такой же, как отладка):
/example/AndroidManifest.xml
<application>
<activity
android:name="com.example.MainActivity"
android:exported="true" />
</application>
В манифесте отладки я получаю Duplicate registration for activity com.example.MainActivity
Вот почему я создал пример типа сборки.
/build.gradle
android {
buildTypes {
example.initWith(buildTypes.debug)
}
}
Но это тоже не работает.
[AndroidManifest.xml:17, AndroidManifest.xml:4] Trying to merge incompatible /manifest/application/activity[@name=com.example.MainActivity] element:
<activity
-- @android:name="com.example.MainActivity">
--</activity>
--(end reached)
<activity
++ @android:exported="true"
++ @android:name="com.example.MainActivity">
++</activity>
Мне интересно, это баг, отсутствующая функция (будет реализована в будущем) или я что-то не так делаю?
Я знаю, что могу предоставить другой манифест в выпуске и отладке (без /main
), но я не думаю, что это хорошее решение.
РЕДАКТИРОВАТЬ: пока решение состоит в том, чтобы определить bool в ресурсах и использовать его внутри основного манифеста. В ресурсах отладки bool будет true
, а в релизе false
. Это решение кажется намного лучше, чем дублированные манифесты, но вопрос остается актуальным.