迁移到 androidx 后离子 android 构建错误
Ionic android build error after migrating to androidx
我正在开发 ionic 3 project.i 由于突然的构建问题不得不迁移到 androidx。我用 cordova-android@8.0.0 版本创建了 android 平台,我做了必要的,但现在我在构建 android 平台
时遇到了一些其他错误
我使用 cordova-android 版本 8.0.0 创建了 android 平台。
将以下行添加到 gradle.properties 文件
android.useAndroidX=真
android.enableJetifier=真
插件更新到最新
这是我的 project.properties 文件
target=android-28
android.library.reference.1=CordovaLib
android.library.reference.2=app
cordova.gradle.include.2=cordova-plugin-appsflyer-sdk/userapp-cordovaAF.gradle
cordova.system.library.1=com.facebook.android:facebook-android-sdk:4.40.0
cordova.gradle.include.3=cordova-plugin-firebase/userapp-build.gradle
cordova.system.library.2=com.google.android.gms:play-services-tagmanager:+
cordova.system.library.10=com.google.firebase:firebase-core:17.0.0
cordova.system.library.11=com.google.firebase:firebase-messaging:19.0.0
cordova.system.library.12=com.google.firebase:firebase-config:18.0.0
cordova.system.library.13=com.google.firebase:firebase-perf:18.0.0
cordova.gradle.include.4=cordova-plugin-googlemaps/userapp-tbxml-android.gradle
cordova.gradle.include.5=cordova-plugin-googlemaps/userapp-apikey.gradle
cordova.system.library.7=com.google.android.gms:play-services-maps:15.0.1
cordova.system.library.8=com.google.android.gms:play-services-location:15.0.1
cordova.system.library.9=com.android.support:support-core-utils:27.+
cordova.system.library.10=com.mixpanel.android:mixpanel-android:5.6.0
cordova.system.library.11=com.google.android.gms:play-services-base:+
cordova.system.library.14=com.android.support:support-v4:28.+
cordova.system.library.15=com.android.support:appcompat-v7:28.+
cordova.system.library.3=com.android.support:support-v4:28.+
cordova.system.library.4=com.android.support:appcompat-v7:28.+
当我现在构建项目时遇到以下提到的错误
error: cannot find symbol
import android.support.v4.app.ActivityCompat;
^
cannot find symbol
import android.support.v4.os.EnvironmentCompat;
error: cannot find symbol
public void onConnectionFailed(@NonNull ConnectionResult result) {
^
任何帮助都会很大appreciated.Thanks
出现错误是因为您的 Android 项目包含 Java 源代码(大概是 Cordova 插件的形式),它引用了 Android 支持库,但您启用了 AndroidX 在你的项目中。
AndroidX 和 Android 支持库不能 side-by-side 存在于同一个 Android 项目中 - 这样做会导致像这样的构建失败。
从您的 project.properties
可以看出,支持库作为 Gradle 依赖项(例如 cordova.system.library.3=com.android.support:support-v4:28.+
)被引入。
AndroidX (Jetpack) is the successor to the Android Support Library。
请注意 AndroidX 现在由 latest versions of Play Services & Firebase libraries 使用。
支持库被许多现有插件使用,例如 cordova-plugin-firebase。
要解决此问题,请在您的 Cordova 项目中添加以下两个插件:
- cordova-plugin-androidx 在 Android 项目中启用 AndroidX。
- cordova-plugin-androidx-adapter 使用支持库动态修补任何插件的源代码以使用 AndroidX 等效项并修补 Gradle 配置以替换 Android支持具有 AndroidX 等效项的库引用。
有关测试项目中的工作示例,请参阅 my comment on this Github issue。
注意: 如果您使用 cordova-plugin-firebase 并遇到错误,您可以改用 我的那个插件的分支 发布为 cordova-plugin-firebasex
并已修复以解决由新的 Firebase SDK 引起的问题。这是最安全的迁移方式:
rm -Rf platforms/android
cordova plugin rm cordova-plugin-firebase
rm -Rf plugins/ node_modules/
npm install
cordova plugin add cordova-plugin-firebasex
cordova platform add android
我正在开发 ionic 3 project.i 由于突然的构建问题不得不迁移到 androidx。我用 cordova-android@8.0.0 版本创建了 android 平台,我做了必要的,但现在我在构建 android 平台
时遇到了一些其他错误我使用 cordova-android 版本 8.0.0 创建了 android 平台。
将以下行添加到 gradle.properties 文件
android.useAndroidX=真 android.enableJetifier=真
插件更新到最新
这是我的 project.properties 文件
target=android-28
android.library.reference.1=CordovaLib
android.library.reference.2=app
cordova.gradle.include.2=cordova-plugin-appsflyer-sdk/userapp-cordovaAF.gradle
cordova.system.library.1=com.facebook.android:facebook-android-sdk:4.40.0
cordova.gradle.include.3=cordova-plugin-firebase/userapp-build.gradle
cordova.system.library.2=com.google.android.gms:play-services-tagmanager:+
cordova.system.library.10=com.google.firebase:firebase-core:17.0.0
cordova.system.library.11=com.google.firebase:firebase-messaging:19.0.0
cordova.system.library.12=com.google.firebase:firebase-config:18.0.0
cordova.system.library.13=com.google.firebase:firebase-perf:18.0.0
cordova.gradle.include.4=cordova-plugin-googlemaps/userapp-tbxml-android.gradle
cordova.gradle.include.5=cordova-plugin-googlemaps/userapp-apikey.gradle
cordova.system.library.7=com.google.android.gms:play-services-maps:15.0.1
cordova.system.library.8=com.google.android.gms:play-services-location:15.0.1
cordova.system.library.9=com.android.support:support-core-utils:27.+
cordova.system.library.10=com.mixpanel.android:mixpanel-android:5.6.0
cordova.system.library.11=com.google.android.gms:play-services-base:+
cordova.system.library.14=com.android.support:support-v4:28.+
cordova.system.library.15=com.android.support:appcompat-v7:28.+
cordova.system.library.3=com.android.support:support-v4:28.+
cordova.system.library.4=com.android.support:appcompat-v7:28.+
当我现在构建项目时遇到以下提到的错误
error: cannot find symbol
import android.support.v4.app.ActivityCompat;
^
cannot find symbol
import android.support.v4.os.EnvironmentCompat;
error: cannot find symbol
public void onConnectionFailed(@NonNull ConnectionResult result) {
^
任何帮助都会很大appreciated.Thanks
出现错误是因为您的 Android 项目包含 Java 源代码(大概是 Cordova 插件的形式),它引用了 Android 支持库,但您启用了 AndroidX 在你的项目中。
AndroidX 和 Android 支持库不能 side-by-side 存在于同一个 Android 项目中 - 这样做会导致像这样的构建失败。
从您的 project.properties
可以看出,支持库作为 Gradle 依赖项(例如 cordova.system.library.3=com.android.support:support-v4:28.+
)被引入。
AndroidX (Jetpack) is the successor to the Android Support Library。
请注意 AndroidX 现在由 latest versions of Play Services & Firebase libraries 使用。
支持库被许多现有插件使用,例如 cordova-plugin-firebase。
要解决此问题,请在您的 Cordova 项目中添加以下两个插件:
- cordova-plugin-androidx 在 Android 项目中启用 AndroidX。
- cordova-plugin-androidx-adapter 使用支持库动态修补任何插件的源代码以使用 AndroidX 等效项并修补 Gradle 配置以替换 Android支持具有 AndroidX 等效项的库引用。
有关测试项目中的工作示例,请参阅 my comment on this Github issue。
注意: 如果您使用 cordova-plugin-firebase 并遇到错误,您可以改用 我的那个插件的分支 发布为 cordova-plugin-firebasex
并已修复以解决由新的 Firebase SDK 引起的问题。这是最安全的迁移方式:
rm -Rf platforms/android
cordova plugin rm cordova-plugin-firebase
rm -Rf plugins/ node_modules/
npm install
cordova plugin add cordova-plugin-firebasex
cordova platform add android