Я настроил действия 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
@Nitish, не могли бы вы опубликовать этот комментарий в качестве ответа? Эти ссылки ведут меня на github.com/CMPUT301W23T33/QR-Quest/commit/…, который содержит действительное решение (которое в конце концов решило мою проблему), спасибо :)
Проблема, по-видимому, вызвана Glide (требуется разрешение POST_NOTIFICATION при нацеливании на Android 13 или выше).
Для получения более подробной информации обратитесь к проблеме Glide на GitHub.
Временным исправлением будет подавление проверки 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")
}
Похоже, это проблема в glide, вы можете найти решения на странице github — glide/issues/4850 и glide/issues/4940