Cordova 构建错误:相机插件缺少 android.support.v4 库依赖项

Posted

技术标签:

【中文标题】Cordova 构建错误:相机插件缺少 android.support.v4 库依赖项【英文标题】:Cordova Build Error : Camera Plugin missing android.support.v4 Library dependencies 【发布时间】:2018-07-19 19:27:23 【问题描述】:

无法构建基于 IBM MobileFirst 7.1 的 Cordova android 应用程序。最近升级mobilefirst cli版本到7.1.0.00.20180302-0537

添加相机插件(org.apache.cordova.camera)后,android 构建失败,并在下面的日志中提到以下错误。查看错误,看起来插件现在需要支持库,但没有将其指示为依赖项。不太清楚需要做些什么来解决这个问题。

-compile:
[javac] Compiling 47 source files to /Users/dev/MFPApp/platforms/android/ant-build/classes
[javac] warning: [options] source value 1.5 is obsolete and will be removed in a future release
[javac] warning: [options] target value 1.5 is obsolete and will be removed in a future release
[javac] warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
[javac] /Users/dev/MFPApp/platforms/android/src/org/apache/cordova/camera/CameraLauncher.java:56: error: package android.support.v4.content does not exist
[javac] import android.support.v4.content.FileProvider;
[javac]                                  ^
[javac] /Users/dev/MFPApp/platforms/android/src/org/apache/cordova/camera/CordovaUri.java:25: error: package android.support.v4.content does not exist
[javac] import android.support.v4.content.FileProvider;
[javac]                                  ^
[javac] /Users/dev/MFPApp/platforms/android/src/org/apache/cordova/camera/CameraLauncher.java:278: error: cannot find symbol
[javac]         this.imageUri = new CordovaUri(FileProvider.getUriForFile(cordova.getActivity(),
[javac]                                        ^
[javac]   symbol:   variable FileProvider
[javac]   location: class CameraLauncher
[javac] /Users/dev/MFPApp/platforms/android/src/org/apache/cordova/camera/CameraLauncher.java:732: error: cannot find symbol
[javac]                         Uri tmpFile = FileProvider.getUriForFile(cordova.getActivity(),
[javac]                                       ^
[javac]   symbol:   variable FileProvider
[javac]   location: class CameraLauncher
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 4 errors
[javac] 3 warnings

环境信息

OS: darwin x64
Release: 17.7.0
System Memory: 5112 MB free out of 16384 MB
Node: v0.10.36
MobileFirst CLI: 7.1.0.00.20180302-0537
Cordova:6.3.0

插件信息

cordova-plugin-mfp 7.1.0 "IBM MobileFirst Platform Foundation"
cordova-plugin-mfp-jsonstore 7.1.0 "IBM MobileFirst Platform Foundation - JSONStore"
cordova-plugin-mfp-push 7.1.0 "IBM MobileFirst Platform Foundation - Push Notifications"
org.apache.cordova.battery-status 0.2.12 "Battery"
org.apache.cordova.camera 0.3.4 "Camera"
org.apache.cordova.console 0.2.12 "Console"
org.apache.cordova.device 0.2.13 "Device"
org.apache.cordova.device-motion 0.2.11 "Device Motion"
org.apache.cordova.dialogs 0.2.11 "Notification"
org.apache.cordova.geolocation 0.3.11 "Geolocation"
org.apache.cordova.globalization 0.3.3 "Globalization"
org.apache.cordova.inappbrowser 0.5.4 "InAppBrowser"
org.apache.cordova.network-information 0.2.14 "Network Information"
org.apache.cordova.splashscreen 0.3.5 "Splashscreen"
org.apache.cordova.statusbar 0.1.9 "StatusBar"
org.apache.cordova.vibration 0.3.12 "Vibration"

【问题讨论】:

【参考方案1】:

您可能会遇到从 Android N 开始的已知问题。此问题已在 iFix 7.1.0.0-MFPF-IF201802160539 中得到修复

或者,尝试此链接中提到的步骤:

Preparing a project that uses the Cordova camera plug-in with the Android platform

步骤如下:

将 android-support-v4.jar 文件添加到您的项目中。

在文件资源管理器中,浏览到您的 Android SDK 目录,您的 Android SDK 管理器将在该目录中下载更新。

如果尚未安装,请在您的 Android 环境中安装 Android Support Repository。

浏览到 extras/android/m2repository/com/android/support/support-core-utils。 选择 support-core-utils 存储库的 24.2.0 或更高版本。

从support-core-utils-24.2.0.aar包中解压classes.jar文件。如果没有文件归档工具,可以将.aar文件扩展名改为.zip来解压classes.jar 文件。

将 classes.jar 文件添加到您的 Android 平台的 libs 目录中。

更新 AndroidManifest.xml 文件。

打开位于platforms/android 文件夹中的AndroidManifest.xml 文件。

在结束标记内添加以下行:

  <provider android:authorities="PACKAGE_ID.provider" android:exported="false" 
   android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider"> 
   <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> 
  </provider>

其中 PACKAGE_ID 替换为您项目的 Android 包 ID。

保存 AndroidManifest.xml 文件。

更新 config.xml 文件。

打开项目文件夹中的 config.xml 文件。

在标签内,添加如下标签:

 <preference name="applicationId" value="PACKAGE_ID"/>

其中 PACKAGE_ID 替换为您项目的 Android 包 ID。

保存 config.xml 文件。

【讨论】:

由于您的整个答案取决于该链接是否有效,因此您实际上应该在答案中列出文章中的步骤。否则,当该链接消失时,您将开始受到反对票的打击,您的答案将不再有用。 感谢@BShaps 的反馈。我已经修改了答案以反映更多细节。【参考方案2】:

这个插件解决了我的错误

ionic cordova plugin add  cordova-androidx-build

【讨论】:

这对我也有用【参考方案3】:

此问题已在 iFix 级别 7.1.0.0-MFPF-IF201802160539 中修复

如果您看到任何与 android.support.v4 库依赖相关的错误,请点击此链接: Preparing a project that uses the Cordova camera plug-in with the Android platform

我已在此处上传示例应用程序,这可能会对您有所帮助: sample app

【讨论】:

以上是关于Cordova 构建错误:相机插件缺少 android.support.v4 库依赖项的主要内容,如果未能解决你的问题,请参考以下文章

清单文件中缺少 Cordova 相机权限

Cordova 相机插件上的错误

缺少cordova_plugins.js

Cordova 相机插件适用于模拟器,而不适用于 Android 设备

Cordova 相机插件 IOS 11 无法从库中选择图像

Cordova Android - 相机没有所有选项