У меня есть проект для Android (никогда раньше ничего не развертывал на Android). Сборка проекта не работает. AndroidManifest.xml внутрь instant-run попасть внутрь <application> тег <uses-permission> теги. Что не сработает - это не разрешено документами Google.
Мой основной манифест выглядит так:
<manifest package = "xxx"
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools">
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.WAKE_LOCK" />
<application
android:networkSecurityConfig = "@xml/network_security_config"
tools:replace = "android:allowBackup"
android:name = "XXX"
android:allowBackup = "false"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:roundIcon = "@mipmap/ic_launcher_round"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
<activity android:name = ".WebViewActivity"
android:label = "@string/title_activity_web_view"
android:theme = "@style/AppTheme.NoActionBar"
android:configChanges = "orientation|screenSize"
android:launchMode = "singleTask">
<intent-filter>
<action android:name = "android.intent.action.MAIN"/>
<category android:name = "android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name = "io.fabric.ApiKey"
android:value = "xxx"
/>
</application>
</manifest>
Версия сборки:
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
package = "pl.touspolska.mobile"
android:versionCode = "7"
android:versionName = "1.0.2" >
<uses-sdk
android:minSdkVersion = "19"
android:targetSdkVersion = "26" />
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.WAKE_LOCK" />
<!-- Permissions required for GCM -->
<uses-permission android:name = "com.google.android.c2dm.permission.RECEIVE" />
<application
android:name = "XXX.TousPolskaApplication"
android:allowBackup = "false"
android:debuggable = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:networkSecurityConfig = "@xml/network_security_config"
android:roundIcon = "@mipmap/ic_launcher_round"
android:supportsRtl = "true"
android:testOnly = "true"
android:theme = "@style/AppTheme" >
<activity
android:name = "XXX.WebViewActivity"
android:configChanges = "orientation|screenSize"
android:label = "@string/title_activity_web_view"
android:launchMode = "singleTask"
android:theme = "@style/AppTheme.NoActionBar" >
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
// HERE IS ERROR!!!!
<uses-permission android:name = "com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name = "XXX.permission.C2D_MESSAGE"
android:protectionLevel = "signature" />
<uses-permission android:name = "XXX.permission.C2D_MESSAGE" />
// ERROR ABOVE !!!!
....
</application>
ОШИБКА Не удалось связать ресурс Android - он указывает на те 3 строки, которые находятся между комментариями к ошибке
Как мы видим, у него странное uses-permissions. Кто-нибудь знает, что включает в себя эти устаревшие теги внутри манифеста?
Здесь только один.
Любая библиотека, которую вы объявляете в разделе зависимостей файла build.gradle вашего приложения, может добавить что-то в ваш манифест. Это называется объединением манифестов developer.android.com/studio/build/manifest-merge.
Если вы используете Android Studio, откройте файл AndroidManifest.xml и нажмите вкладку «Объединенный манифест» внизу. Вы получите больше информации о вкладе модулей/библиотек в него.
Разрешения C2DM использовались GCM (устарели в пользу FCM)
@Amaksoft, вы правы, некоторые зависимости добавляют эти вещи. Как я могу отключить их?
Вы можете отключить зависимости, закомментировав их в build.gradle. Но ваша сборка потерпит неудачу, если они будут использоваться в вашем коде. Другой способ — управлять слиянием манифестов, как описано здесь developer.android.com/studio/build/manifest-merge#node_markers.
Я не знаю, какие зависимости вы используете, но если они используют неправильные записи манифеста, они, вероятно, устарели и должны быть обновлены или заменены.
Также ваши инструменты сборки могут быть слишком новыми или слишком старыми (в зависимости от того, сколько лет вашему проекту и был ли он успешно собран ранее).
У вас есть другие модули в вашем проекте?