Programming Tips - Android upgrade to API 31 issues.

Date: 2023may1 Q. Android upgrade to API 31 issues. A. Problem: "Could not find com.android.support:appcompat-v7:31.0.0" "Could not find com.android.support:support-v4:31.0.0" "Could not find com.android.support:support-v4:31" "Could not find com.android.support:design:31.0.0" "Could not find com.android.support:support-vector-drawable:31" Solution: Just remove: implementation 'com.android.support:appcompat-v7:31.0.0' implementation 'com.android.support:support-v4:31.0.0' implementation 'com.android.support:support-v4:31' implementation 'com.android.support:design:31.0.0' implementation 'com.android.support:support-vector-drawable:31' Problem: android:exported needs to be explicitly specified for element <activity#com.example.myapp.MainActivity>. Solution: Added to AndroidManifest.xml <activity android:exported="true" Problem: Manifest merger failed : android:exported needs to be explicitly specified for element <receiver#com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. Solution: Added to manifest: <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> ... <application> <receiver android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver" android:enabled="true" android:exported="false" tools:node="merge" tools:overrideLibrary="com.google.android.gms.measurement"> <intent-filter> <action android:name="com.google.android.gms.measurement.UPLOAD"/> </intent-filter> </receiver> <application> Problem: Android resource linking failed /layout/content_main.xml:16: error: attribute layout_behavior (aka com.example.myapp:layout_behavior) not found. error: failed linking file resources. Solution: Change app:layout_behavour to app:layout_behavior And ensure you have at the top: xmlns:app="http://schemas.android.com/apk/res-auto" Problem: package android.support.design.widget does not exist import android.support.design.widget.FloatingActionButton; Solution: Change implementation 'com.android.support:support-v4:28.0.0' to implementation 'androidx.legacy:legacy-support-v4:1.0.0' in build.gradle Or if you're using androidx: implementation 'com.google.android.material:material:1.2.1' Problem: Configuration `:app:debugRuntimeClasspath` contains AndroidX dependencies, but the `android.useAndroidX` property is not enabled, which may cause runtime issues. Set `android.useAndroidX=true` in the `gradle.properties` file and retry. Solution: Add android.useAndroidX=true to gradle.properties Problem: Your project has set `android.useAndroidX=true`, but configuration `:app:debugRuntimeClasspath` still contains legacy support libraries, which may cause runtime issues. This behavior will not be allowed in Android Gradle plugin 8.0. Please use only AndroidX dependencies or set `android.enableJetifier=true` in the `gradle.properties` file to migrate your project to AndroidX (see https://developer.android.com/jetpack/androidx/migrate for more info). The following legacy support libraries are detected: Solution: Add android.enableJetifier=true to gradle.properties Problem: ERROR:F:\AndroidStudioProjects\<myproject>\app\src\main\res\layout\content_main.xml:9: AAPT: error: resource string/appbar_scrolling_view_behavior (aka com.hogdex.HashPostFree:string/appbar_scrolling_view_behavior) not found. Solution: Add to build.gradle implementation 'com.google.android.material:material:1.5.0' Problem: Need to convert to androidx Solution: Select Menu Refactor > Convert to androidx And make sure to click on [Do Refactor] bottom left. In build.gradle add: def appcompat_version = "1.3.1" implementation "androidx.appcompat:appcompat:$appcompat_version" // For loading and tinting drawables on older versions of the platform implementation "androidx.appcompat:appcompat-resources:$appcompat_version" According to https://developer.android.com/jetpack/androidx/migrate Change imports https://developer.android.com/jetpack/androidx/migrate/class-mappings android.support.v7.app.AppCompatActivity androidx.appcompat.app.AppCompatActivity android.support.v7.app.ActionBar androidx.appcompat.app.ActionBar android.support.v7.app.AppCompatDelegate androidx.appcompat.app.AppCompatDelegate android.support.design.widget.FloatingActionButton com.google.android.material.floatingactionbutton.FloatingActionButton android.support.v7.widget.Toolbar androidx.appcompat.widget.Toolbar android.support.annotation.Nullable androidx.annotation.Nullable android.support.annotation.LayoutRes androidx.annotation.LayoutRes android.support.design.widget.AppBarLayout com.google.android.material.appbar.AppBarLayout android.support.design.widget.CoordinatorLayout androidx.coordinatorlayout.widget.CoordinatorLayout In your .java AND your .xml layouts In main layout <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <include layout="@layout/content_main_norm" /> </androidx.core.widget.NestedScrollView> as per https://developer.android.com/reference/com/google/android/material/appbar/AppBarLayout