Манифестировать и использовать разрешения

У меня есть проект для 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. Кто-нибудь знает, что включает в себя эти устаревшие теги внутри манифеста?

У вас есть другие модули в вашем проекте?

just 12.03.2019 13:53

Здесь только один.

yerpy 12.03.2019 13:55

Любая библиотека, которую вы объявляете в разделе зависимостей файла build.gradle вашего приложения, может добавить что-то в ваш манифест. Это называется объединением манифестов developer.android.com/studio/build/manifest-merge.

Amaksoft 12.03.2019 14:02

Если вы используете Android Studio, откройте файл AndroidManifest.xml и нажмите вкладку «Объединенный манифест» внизу. Вы получите больше информации о вкладе модулей/библиотек в него.

Amaksoft 12.03.2019 14:05

Разрешения C2DM использовались GCM (устарели в пользу FCM)

Qasim 12.03.2019 15:18

@Amaksoft, вы правы, некоторые зависимости добавляют эти вещи. Как я могу отключить их?

yerpy 12.03.2019 17:20

Вы можете отключить зависимости, закомментировав их в build.gradle. Но ваша сборка потерпит неудачу, если они будут использоваться в вашем коде. Другой способ — управлять слиянием манифестов, как описано здесь developer.android.com/studio/build/manifest-merge#node_marke‌​rs.

Amaksoft 12.03.2019 17:38

Я не знаю, какие зависимости вы используете, но если они используют неправильные записи манифеста, они, вероятно, устарели и должны быть обновлены или заменены.

Amaksoft 12.03.2019 17:40

Также ваши инструменты сборки могут быть слишком новыми или слишком старыми (в зависимости от того, сколько лет вашему проекту и был ли он успешно собран ранее).

Amaksoft 12.03.2019 17:47
1
9
877
0

Другие вопросы по теме