离子+快车道 | Android“错误:包android.support.v4.content不存在”
Posted
技术标签:
【中文标题】离子+快车道 | Android“错误:包android.support.v4.content不存在”【英文标题】:Ionic + Fastlane | Android "error: package android.support.v4.content does not exist" 【发布时间】:2021-11-11 21:24:15 【问题描述】:我正在处理一个 Ionic 项目,但在构建到 android 时遇到了问题。我继承了这个项目,所以我不是 100% 熟悉 Fastlane 以及它是如何构建 java 文件的。此外,我在 WSL2 上使用 sdkmanager 并安装了以下软件包:
Installed packages:=====================] 100% Fetch remote repository...
Path | Version | Description | Location
------- | ------- | ------- | -------
build-tools;29.0.2 | 29.0.2 | Android SDK Build-Tools 29.0.2 | build-tools/29.0.2
emulator | 30.8.4 | Android Emulator | emulator
patcher;v4 | 1 | SDK Patch Applier v4 | patcher/v4
platform-tools | 31.0.3 | Android SDK Platform-Tools | platform-tools
platforms;android-29 | 5 | Android SDK Platform 29 | platforms/android-29
当我运行bundle exec fastlane android build
时,它做了很多魔法,但最终导致以下错误:
> Task :app:compileReleaseJavaWithJavac FAILED
/home/zonyx/git/gitlab/studio/platforms/android/app/src/main/java/org/apache/cordova/camera/CameraLauncher.java:42: error: package android.support.v4.content does not exist
import android.support.v4.content.FileProvider;
^
/home/zonyx/git/gitlab/studio/platforms/android/app/src/main/java/org/apache/cordova/camera/FileProvider.java:21: error: package android.support.v4.content does not exist
public class FileProvider extends android.support.v4.content.FileProvider
^
/home/zonyx/git/gitlab/studio/platforms/android/app/src/main/java/org/apache/cordova/camera/CameraLauncher.java:297: error: cannot find symbol
this.imageUri = FileProvider.getUriForFile(cordova.getActivity(),
^
symbol: method getUriForFile(Activity,String,File)
location: class FileProvider
/home/zonyx/git/gitlab/studio/platforms/android/app/src/main/java/org/apache/cordova/camera/CameraLauncher.java:824: error: cannot find symbol
Uri tmpFile = FileProvider.getUriForFile(cordova.getActivity(),
^
symbol: method getUriForFile(Activity,String,File)
location: class FileProvider
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
4 errors
我看到一些关于使用androidx.core.content.FileProvider
而不是android.support.v4.content.FileProvider
的较新SDK 版本的想法。由于整个 Android 部分是自动构建/生成的,我显然无法更改 java 文件,因为它只会被覆盖。
下面是 Fastfile 中的一行可能会有所帮助:
desc 'Compile a new build for Android'
lane :build do |options|
Dir.chdir('..') do
before_build(options)
ionic_build
sh("ionic cordova build android --device --release --aot false --environment prod --output-hashing all \
--sourcemaps false --extract-css true --named-chunks false --build-optimizer true --minifyjs=true \
--minifycss=true --optimizejs=true")
deeplinks(action: 'uninstall')
end
end
【问题讨论】:
我也不是 Android 或 Ionic 的 Fastlane 专家,但此错误通常与使用旧支持库的库有关,而该项目已经在 AndroidX 上。您可以在构建之前使用命令行工具 jetify,但我不知道如何集成到 Fastlande 尝试安装cordova-plugin-androidx
和 cordova-plugin-androidx-adapter
以使旧库与 AndroidX 兼容。
@hvaughan3,这是个好主意! cordova-plugin-androidx
,我会说已弃用,但我将适配器添加为 Cordova 插件并且我的构建完成。谢谢!
【参考方案1】:
cordova-plugin-androidx-adapter 将自动迁移旧库以使用 AndroidX 支持库。我相信当您针对 Android 10 或更高版本(即进行切换时)时需要这样做。一旦您的所有插件都支持 AndroidX,您就可以删除适配器插件。
【讨论】:
以上是关于离子+快车道 | Android“错误:包android.support.v4.content不存在”的主要内容,如果未能解决你的问题,请参考以下文章
最强《Android车载开发指南》,助你踏上车企数字化的快车道
“离子cordova运行android”无法使用cordova-android@7.0.0
离子添加平台 android 与自定义 android-target