Возможная ошибка lint: Ошибка: при таргетинге на Android 13 или более поздней версии для публикации разрешения требуется наличие разрешения POST_NOTIFICATIONS

Я настроил действия github в своем проекте, включая ktlint, однако я получаю странные ошибки (которые не происходят локально), например:

Error: When targeting Android 13 or higher, posting a permission requires holding the POST_NOTIFICATIONS permission (usage from com.bumptech.glide.request.target.NotificationTarget) [NotificationPermission]

когда мое приложение даже не использует уведомления, это началось после добавления

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"

в мой build.gradle

(что было исправлением другой странной ошибки:

/home/runner/work/Schmock/Schmock/product-list-feature/src/main/java/com/example/productlistfeature/ProductListViewModel.kt:25: Error: Expected non-nullable value [NullSafeMutableLiveData from androidx.lifecycle]
            listOfProducts.postValue(repository.getAllProductsList())
                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   Explanation for issues of type "NullSafeMutableLiveData":
   This check ensures that LiveData values are not null when explicitly       
            declared as non-nullable.

                   Kotlin interoperability does not support enforcing explicit
   null-safety when using                 generic Java type parameters. Since
   LiveData is a Java class its value can always                 be null even
   when its type is explicitly declared as non-nullable. This can lead        
           to runtime exceptions from reading a null LiveData value that is
   assumed to be                 non-nullable.

   Vendor: Android Open Source Project
   Identifier: androidx.lifecycle
   Feedback: https://issuetracker.google.com/issues/new?component=413132

)

Честно говоря, я понятия не имею, что может быть причиной этого (либо я испортил реализацию ktlint (каким-то образом), либо это ошибка linting)

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

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.4.2' apply false
    id 'com.android.library' version '7.4.2' apply false
    id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
    id 'com.google.dagger.hilt.android' version '2.44' apply false
    id "org.jlleitschuh.gradle.ktlint" version "11.3.1" apply false
}

build.gradle (модуль: product-list-feature):

plugins {
    id 'com.android.library'
    id 'org.jetbrains.kotlin.android'
    id "org.jlleitschuh.gradle.ktlint" version "11.3.1"
    id 'com.google.dagger.hilt.android'
    id 'kotlin-kapt'
}

android {
    namespace 'com.example.productlistfeature'
    compileSdk 33

    defaultConfig {
        minSdk 24
        targetSdk 33

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    buildFeatures {
        viewBinding true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation(project(":core"))
    implementation(project(":core-theme"))
    implementation(project(":core-data"))

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

    // viewModelScope
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"

    // by viewModels()
    implementation "androidx.fragment:fragment-ktx:1.5.6"

    /* live data (just to ensure version > 2.5.0
     for more info read: https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.0
    (especially the point about [isInitialized] property */
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"

    // loading images from URLs
    implementation 'com.github.bumptech.glide:glide:4.15.1'
    kapt 'com.github.bumptech.glide:compiler:4.15.1'

    // DI
    implementation "com.google.dagger:hilt-android:2.44"
    kapt "com.google.dagger:hilt-compiler:2.44"
}

Буду признателен за любые подсказки/идеи/ссылки, заранее спасибо :)

edit: Добавление файла рабочего процесса:

name: CI
 
 # Controls when the workflow will run
on:
   # Triggers the workflow on push
   push:
   pull_request:
 
   # Allows to run this workflow manually from the Actions tab
   workflow_dispatch:
 
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
   build:
     # The type of runner that the job will run on
     runs-on: ubuntu-latest
 
     steps:
       - name: Checkout
         uses: actions/checkout@v3
 
       - name: ktLint
         run: ./gradlew ktlintCheck
         
       - name: Lint
         run: ./gradlew lint
      
       - name: Assembling
         run: ./gradlew assembleDebug
 
       - name: Unit testing
         run: ./gradlew test

Похоже, это проблема в glide, вы можете найти решения на странице github — glide/issues/4850 и glide/issues/4940

Nitish 12.04.2023 07:11

@Nitish, не могли бы вы опубликовать этот комментарий в качестве ответа? Эти ссылки ведут меня на github.com/CMPUT301W23T33/QR-Quest/commit/…, который содержит действительное решение (которое в конце концов решило мою проблему), спасибо :)

JustSightseeing 13.04.2023 22:23
1
2
219
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, по-видимому, вызвана Glide (требуется разрешение POST_NOTIFICATION при нацеливании на Android 13 или выше).

Для получения более подробной информации обратитесь к проблеме Glide на GitHub.

Глайд выпуск 4850
Глайд выпуск 4940

Временным исправлением будет подавление проверки gradle lint (на основе ответа CMPUT301W23T33/QR-Quest

android_glide_lint.xml

<?xml version = "1.0" encoding = "utf-8" ?>
<!-- https://github.com/bumptech/glide/issues/4940 -->
<lint>
    <issue id = "NotificationPermission">
        <ignore regexp = "com.bumptech.glide.request.target.NotificationTarget" />
    </issue>
</lint>

приложение/build.gradle

 lint {
        // https://github.com/bumptech/glide/issues/4940
        lintConfig = file("$rootDir/android_glide_lint.xml")
    }

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