离子+快车道 | 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-androidxcordova-plugin-androidx-adapter 以使旧库与 AndroidX 兼容。 @hvaughan3,这是个好主意! cordova-plugin-androidx,我会说已弃用,但我将适配器添加为 Cordova 插件并且我的构建完成。谢谢! 【参考方案1】:

cordova-plugin-androidx-adapter 将自动迁移旧库以使用 AndroidX 支持库。我相信当您针对 Android 10 或更高版本(即进行切换时)时需要这样做。一旦您的所有插件都支持 AndroidX,您就可以删除适配器插件。

【讨论】:

以上是关于离子+快车道 | Android“错误:包android.support.v4.content不存在”的主要内容,如果未能解决你的问题,请参考以下文章

最强《Android车载开发指南》,助你踏上车企数字化的快车道

离子div边界颜色变化离子android由代码

“离子cordova运行android”无法使用cordova-android@7.0.0

离子添加平台 android 与自定义 android-target

离子 - 错误:找不到模块'android-versions'

离子发布:Android 包无法构建