Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE. App crashes due to this

huangapple go评论78阅读模式
英文:

Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE. App crashes due to this

问题

崩溃日志 - 
--------- 崩溃开始
2023-03-03 15:33:10.259 11639-12705/AndroidRuntime: 严重异常: AsyncTask #1
进程:  PID: 11639
java.lang.RuntimeException: 在执行doInBackground()时发生错误
at android.os.AsyncTask$4.done(AsyncTask.java:415)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381)
at java.util.concurrent.FutureTask.setException(FutureTask.java:250)
at java.util.concurrent.FutureTask.run(FutureTask.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.IllegalArgumentException: 针对S+(版本31及以上),在创建PendingIntent时,要求指定FLAG_IMMUTABLE或FLAG_MUTABLE之一。
强烈建议使用FLAG_IMMUTABLE,仅在PendingIntent需要与内联回复或气泡一起使用时才使用FLAG_MUTABLE。
at android.app.PendingIntent.checkFlags(PendingIntent.java:402)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:672)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:659)
at com.google.android.gms.gcm.zzm.<init>(Unknown Source:17)
at com.google.android.gms.gcm.GcmNetworkManager.zzd(Unknown Source:28)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source:8)
at com.quickblox.messages.services.SubscribeTaskManager.a(Unknown Source:58)
at com.quickblox.messages.services.SubscribeService.c(Unknown Source:24)
at com.quickblox.messages.services.SubscribeService.a(Unknown Source:150)
at com.quickblox.messages.services.SubscribeService.a(Unknown Source:136)
at com.quickblox.messages.services.SubscribeService.e(Unknown Source:12)
at com.quickblox.messages.services.SubscribeService.b(Unknown Source:18)
at com.quickblox.messages.services.SubscribeService.onHandleWork(Unknown Source:51)
at androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:396)
at androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:387)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
... 3 more
2023-03-03 15:33:10.263 1768-2337/? E/OplusNetworkStackManager: 回调长度 = 6
根build.gradle - 
buildscript {
ext.kotlin_version = '1.8.0'
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven {
url 'https://maven.fabric.io/public'
}
maven {
url "https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.8'
classpath 'io.fabric.tools:gradle:1.28.0'
}
}
所有项目 {
repositories {
flatDir {
dirs 'libs'
}
google()
jcenter()
maven { url 'https://jitpack.io' }
maven {
url 'https://maven.google.com/'
}
maven {
url "https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/"
}
}
}
任务清理(类型:删除){
删除 rootProject.buildDir
}
app:build.gradle - 
应用插件: 'com.android.application'
应用插件: 'kotlin-android'
android {
compileSdkVersion 33
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding false
}
lintOptions {
checkReleaseBuilds false
}
defaultConfig {
applicationId ""
minSdkVersion 20
targetSdkVersion 31
versionCode 109
versionName "1.0.6"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
project.configurations.all {
resolutionStrategy {
force 'androidx.work:work-runtime-ktx:2.8.0'
}
}
}
repositories {
maven {
url "https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
crunchPngs false // or true
}
}
}
//def qbSdkVersion = '3.7.0'
def work_version = "2.8.0"
依赖关系 {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
//    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation 'androidx.multidex:multidex:2.0.0'
//    implementation "com.google.android.gms:play-services-base:16.1.0"
implementation 'androidx.multidex:multidex:2.0.0'
implementation 'com.google.android.gms:play-services-base:18.2.0'
constraints {
implementation('androidx.work:work-runtime:2.8.0') {
because 'play-services-ads依赖于work-runtime:2.1.0,与targetSdk 31不
<details>
<summary>英文:</summary>
Crash log - 
--------- beginning of crash
2023-03-03 15:33:10.259 11639-12705/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process:  PID: 11639
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381)
at java.util.concurrent.FutureTask.setException(FutureTask.java:250)
at java.util.concurrent.FutureTask.run(FutureTask.java:269)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
at java.lang.Thread.run(Thread.java:1012)
Caused by: java.lang.IllegalArgumentException:  Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
at android.app.PendingIntent.checkFlags(PendingIntent.java:402)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:672)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:659)
at com.google.android.gms.gcm.zzm.&lt;init&gt;(Unknown Source:17)
at com.google.android.gms.gcm.GcmNetworkManager.zzd(Unknown Source:28)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source:8)
at com.quickblox.messages.services.SubscribeTaskManager.a(Unknown Source:58)
at com.quickblox.messages.services.SubscribeService.c(Unknown Source:24)
at com.quickblox.messages.services.SubscribeService.a(Unknown Source:150)
at com.quickblox.messages.services.SubscribeService.a(Unknown Source:136)
at com.quickblox.messages.services.SubscribeService.e(Unknown Source:12)
at com.quickblox.messages.services.SubscribeService.b(Unknown Source:18)
at com.quickblox.messages.services.SubscribeService.onHandleWork(Unknown Source:51)
at androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:396)
at androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:387)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:264)
... 3 more
2023-03-03 15:33:10.263 1768-2337/? E/OplusNetworkStackManager: callback len = 6
Root build.gradle - 
buildscript {
ext.kotlin_version = &#39;1.8.0&#39;
repositories {
google()
jcenter()
maven { url &#39;https://jitpack.io&#39; }
maven {
url &#39;https://maven.fabric.io/public&#39;
}
maven {
url &quot;https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/&quot;
}
}
dependencies {
classpath &#39;com.android.tools.build:gradle:7.1.0&#39;
classpath &quot;org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version&quot;
classpath &#39;com.google.gms:google-services:4.3.8&#39;
classpath &#39;io.fabric.tools:gradle:1.28.0&#39;
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
flatDir {
dirs &#39;libs&#39;
}
google()
jcenter()
maven { url &#39;https://jitpack.io&#39; }
maven {
url &#39;https://maven.google.com/&#39;
}
maven {
url &quot;https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/&quot;
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app:build.gradle -
apply plugin: &#39;com.android.application&#39;
apply plugin: &#39;kotlin-android&#39;
//apply plugin: &#39;kotlin-android-extensions&#39;
android {
compileSdkVersion 33
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding false
}
lintOptions {
checkReleaseBuilds false
}
defaultConfig {
applicationId &quot;&quot;
minSdkVersion 20
targetSdkVersion 31
versionCode 109
versionName &quot;1.0.6&quot;
testInstrumentationRunner &#39;androidx.test.runner.AndroidJUnitRunner&#39;
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
project.configurations.all {
resolutionStrategy {
force &#39;androidx.work:work-runtime-ktx:2.8.0&#39;
}
}
}
repositories {
maven {
url &quot;https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/&quot;
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(&#39;proguard-android.txt&#39;), &#39;proguard-rules.pro&#39;
crunchPngs false // or true
}
}
}
//def qbSdkVersion = &#39;3.7.0&#39;
def work_version = &quot;2.8.0&quot;
dependencies {
implementation fileTree(dir: &#39;libs&#39;, include: [&#39;*.jar&#39;])
implementation &quot;org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version&quot;
implementation &#39;androidx.appcompat:appcompat:1.6.1&#39;
implementation &#39;androidx.constraintlayout:constraintlayout:2.1.4&#39;
//    implementation &#39;com.android.support.constraint:constraint-layout:1.0.2&#39;
implementation &#39;com.google.android.material:material:1.0.0&#39;
implementation &#39;androidx.vectordrawable:vectordrawable:1.0.0&#39;
implementation &#39;androidx.legacy:legacy-support-v4:1.0.0&#39;
implementation &#39;androidx.lifecycle:lifecycle-extensions:2.2.0&#39;
implementation &#39;androidx.constraintlayout:constraintlayout:2.1.4&#39;
testImplementation &#39;junit:junit:4.12&#39;
androidTestImplementation &#39;androidx.test.ext:junit:1.1.1&#39;
androidTestImplementation &#39;androidx.test.espresso:espresso-core:3.5.1&#39;
implementation &#39;androidx.multidex:multidex:2.0.0&#39;
//    implementation &quot;com.google.android.gms:play-services-base:16.1.0&quot;
implementation &#39;androidx.multidex:multidex:2.0.0&#39;
implementation &#39;com.google.android.gms:play-services-base:18.2.0&#39;
constraints {
implementation(&#39;androidx.work:work-runtime:2.8.0&#39;) {
because &#39;play-services-ads depends on work-runtime:2.1.0 which is not compatible with targetSdk 31, but work-runtime:2.7.0 is&#39;
}
}
implementation &quot;com.google.android.gms:play-services-analytics:18.0.1&quot;
constraints {
implementation(&#39;androidx.work:work-runtime:2.8.0&#39;) {
because &#39;play-services-ads depends on work-runtime:2.1.0 which is not compatible with targetSdk 31, but work-runtime:2.7.0 is&#39;
}
}
implementation &#39;com.google.android.gms:play-services-wallet:19.1.0&#39;
constraints {
implementation(&#39;androidx.work:work-runtime:2.8.0&#39;) {
because &#39;play-services-ads depends on work-runtime:2.1.0 which is not compatible with targetSdk 31, but work-runtime:2.7.0 is&#39;
}
}
implementation &#39;androidx.appcompat:appcompat:1.7.0-alpha02&#39;
implementation &#39;androidx.slice:slice-core:1.1.0-alpha02&#39;
implementation &#39;androidx.slice:slice-builders:1.1.0-alpha02&#39;
implementation &#39;androidx.recyclerview:recyclerview:1.2.1&#39;
implementation &#39;com.squareup.retrofit2:retrofit:2.0.2&#39;
implementation &#39;com.squareup.retrofit2:converter-gson:2.0.2&#39;
implementation &#39;com.squareup.okhttp:okhttp:2.2.0&#39;
implementation &#39;com.squareup.okhttp:okhttp-urlconnection:2.2.0&#39;
implementation &#39;com.squareup.picasso:picasso:2.4.0&#39;
implementation &#39;com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0&#39;
implementation &quot;com.quickblox:quickblox-android-sdk-chat:3.9.2&quot;
//include only necessary module dependency, all transitive modules will be included automatically
implementation &quot;com.quickblox:quickblox-android-sdk-content:3.9.2&quot;
implementation &quot;com.quickblox:quickblox-android-sdk-messages:3.9.2&quot;
implementation &quot;com.quickblox:quickblox-android-sdk-customobjects:3.9.2&quot;
implementation &quot;com.quickblox:quickblox-android-sdk-core:3.9.2&quot;
implementation &quot;com.quickblox:quickblox-android-sdk-videochat-webrtc:3.9.2&quot;
implementation &quot;com.quickblox:quickblox-android-sdk-conference:3.9.2&quot;
implementation &#39;com.mikhaellopez:circularimageview:3.2.0&#39;
implementation &#39;com.github.stfalcon:chatkit:0.3.1&#39;
implementation &#39;com.applandeo:material-calendar-view:1.5.1&#39;
implementation &#39;com.braintreepayments:card-form:3.4.1&#39;
implementation &#39;com.hlab.fabrevealmenu:fab-reveal-menu:1.0.3&#39;
implementation &#39;com.github.arthurghazaryan:floatingactionmenu:1.0.0&#39;
implementation &#39;com.labo.kaji:relativepopupwindow:0.3.1&#39;
implementation &#39;com.github.douglasjunior:android-simple-tooltip:0.2.2&#39;
implementation &#39;am.appwise.components:NoInternetDialog:1.1.3&#39;
//    implementation platform(&#39;com.google.firebase:firebase-bom&#39;)
implementation &#39;com.google.firebase:firebase-core:21.1.1&#39;
implementation &#39;com.google.firebase:firebase-messaging:23.1.1&#39;
implementation &#39;com.google.firebase:firebase-crashlytics:18.3.5&#39;
implementation(&#39;com.google.firebase:firebase-iid:21.1.0&#39;)
//    implementation platform(&#39;com.google.firebase:firebase-bom:31.1.0&#39;)
//    implementation &#39;com.github.prolificinteractive:material-calendarview:2.0.0&#39;
implementation &#39;com.github.jd-alexander:LikeButton:0.2.3&#39;
implementation &#39;com.github.Kyash:android-target-instructions:0.1.4&#39;
//    implementation(name: &#39;sinch-android-rtc&#39;, version: &#39;+&#39;, ext: &#39;aar&#39;)
implementation &#39;io.branch.sdk.android:library:3.+&#39;
implementation &#39;com.github.joielechong:countrycodepicker:2.4.1&#39;
implementation &#39;com.github.barteksc:android-pdf-viewer:2.8.2&#39;
implementation &#39;es.voghdev.pdfviewpager:library:1.1.2&#39;
implementation &#39;com.bogdwellers:pinchtozoom:0.1&#39;
implementation &#39;org.ocpsoft.prettytime:prettytime:4.0.1.Final&#39;
implementation &#39;org.webrtc:google-webrtc:1.0.22171&#39;
implementation &#39;com.payumoney.sdkui:plug-n-play:1.6.1&#39;
implementation &#39;com.google.android.play:core:1.10.3&#39;
implementation &#39;com.github.javiersantos:BottomDialogs:1.2.1&#39;
implementation &#39;com.github.jineshfrancs:CaptchaImageView:1.0&#39;
implementation &#39;com.poovam:pin-edittext-field:1.2.3&#39;
def billing_version = &#39;5.1.0&#39;
implementation &quot;com.android.billingclient:billing:$billing_version&quot;
implementation &#39;me.zhanghai.android.materialratingbar:library:1.4.0&#39;
implementation &#39;com.github.angads25:toggle:1.1.0&#39;
implementation &#39;com.github.barteksc:android-pdf-viewer:2.8.2&#39;
implementation &#39;info.guardianproject.netcipher:netcipher:2.1.0&#39;
//    implementation &#39;androidx.work:work-runtime:2.8.0&#39;
//    implementation &#39;androidx.work:work-runtime-ktx:2.8.0&#39;
//    implementation(&quot;androidx.work:work-runtime:2.8.0&quot;)
// (Java only)
implementation(&quot;androidx.work:work-runtime:$work_version&quot;)
// Kotlin + coroutines
implementation(&quot;androidx.work:work-runtime-ktx:$work_version&quot;)
// optional - RxJava2 support
implementation(&quot;androidx.work:work-rxjava2:$work_version&quot;)
// optional - GCMNetworkManager support
implementation(&quot;androidx.work:work-gcm:$work_version&quot;)
// optional - Test helpers
androidTestImplementation(&quot;androidx.work:work-testing:$work_version&quot;)
// optional - Multiprocess support
implementation &quot;androidx.work:work-multiprocess:$work_version&quot;
}
apply plugin: &#39;com.google.gms.google-services&#39;
apply plugin: &#39;io.fabric&#39;
MyFirebaseMessagingService has PendingIntent as follows - 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE );
I was trying to upload new version to play store, it ask me to use sdk 31 to upload new version. After setting up sdk 31 then this pending intent crash is introduced. I have tried to add Work-runtime is not resolving the problem. App is crashing at random times with the same error message.
</details>
# 答案1
**得分**: 0
`PendingIntent.FLAG_IMMUTABLE`需要API级别23。
由于您的`minSdkVersion`为20,您应该进行SDK检查
```java
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_CANCEL_CURRENT);
英文:

PendingIntent.FLAG_IMMUTABLE requires API level 23

Since your minSdkVersion is 20, you should perform the sdk check

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M ? PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_CANCEL_CURRENT);
</details>
# 答案2
**得分**: 0
你应该将minSDK更新到23,并使用以下代码来处理PendingIntent:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE || PendingIntent.FLAG_UPDATE_CURRENT)
这对我有用。
<details>
<summary>英文:</summary>
You should update minSDK to 23 and use following code for PendingIntent :
PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, intent, PendingIntent.FLAG_IMMUTABLE || PendingIntent.FLAG_UPDATE_CURRENT)
This worked for me.
</details>
# 答案3
**得分**: 0
这花费了我很多时间来找出是哪个库造成的问题。在我的情况下,是QuickBlox。我已将QuickBlox更新到4.0.3,并使用work-runtime 2.7.1。
现在我的Build.gradle文件有以下更改 -

implementation ("com.quickblox:quickblox-android-sdk-content:4.0.3")
implementation ("com.quickblox:quickblox-android-sdk-messages:4.0.3")
implementation ("com.quickblox:quickblox-android-sdk-customobjects:4.0.3")
implementation ("com.quickblox:quickblox-android-sdk-core:4.0.3")
implementation ("com.quickblox:quickblox-android-sdk-conference:4.0.3")
implementation ("com.quickblox:quickblox-android-sdk-videochat-webrtc:4.0.3")
implementation 'androidx.work:work-runtime:2.7.1'
implementation 'androidx.work:work-runtime-ktx:2.7.1'


崩溃问题已解决。尽管我将不得不重新调整QuickBlox的功能,因为他们在更新的库中进行了一些更改。感谢每个尝试帮助我的人。
<details>
<summary>英文:</summary>
It cost me a lot of time to figure out which library was culprit. It was QuickBlox in my case. I have updated QuickBlox to 4.0.3 and using work-runtime 2.7.1
Now my Build.gradle have following changes  - 
implementation (&quot;com.quickblox:quickblox-android-sdk-content:4.0.3&quot;)
implementation (&quot;com.quickblox:quickblox-android-sdk-messages:4.0.3&quot;)
implementation (&quot;com.quickblox:quickblox-android-sdk-customobjects:4.0.3&quot;)
implementation (&quot;com.quickblox:quickblox-android-sdk-core:4.0.3&quot;)
implementation (&quot;com.quickblox:quickblox-android-sdk-conference:4.0.3&quot;)
implementation (&quot;com.quickblox:quickblox-android-sdk-videochat-webrtc:4.0.3&quot;)    
implementation &#39;androidx.work:work-runtime:2.7.1&#39;
implementation &#39;androidx.work:work-runtime-ktx:2.7.1&#39;
Crash is gone. Although I will have to rework on QuickBlox functionality as they have changed few things with updated library. Thank you everyone who tried to help.
</details>
# 答案4
**得分**: 0
```plaintext
现在 Build.gradle 文件有以下更改:
// (仅限 Java)
implementation("androidx.work:work-runtime:2.8.1")
// Kotlin + 协程
implementation("androidx.work:work-runtime-ktx:2.8.1")
// 可选 - RxJava2 支持
implementation("androidx.work:work-rxjava2:2.8.1")
注意:如果您使用 Firebase AdMob 或与 Firebase 相关的其他库,则请更新版本
implementation 'com.google.android.gms:play-services-analytics:18.0.2'
implementation 'com.google.android.gms:play-services-ads:22.1.0'
implementation 'com.google.firebase:firebase-messaging:23.1.2'
英文:

Now Build.gradle have following changes -

    // (Java only)
implementation(&quot;androidx.work:work-runtime:2.8.1&quot;)
// Kotlin + coroutines
implementation(&quot;androidx.work:work-runtime-ktx:2.8.1&quot;)
// optional - RxJava2 support
implementation(&quot;androidx.work:work-rxjava2:2.8.1&quot;)

Note: If you use Firebase admob or another library related to Firebase then update the version

implementation &#39;com.google.android.gms:play-services-analytics:18.0.2&#39;
implementation &#39;com.google.android.gms:play-services-ads:22.1.0&#39;
implementation &#39;com.google.firebase:firebase-messaging:23.1.2&#39;

huangapple
  • 本文由 发表于 2023年3月3日 20:01:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/75626806.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定