【问题标题】:Unable to install custom cordova plugin to android platform after updating to cordova android 7.0.0更新到cordova android 7.0.0 后无法将自定义cordova 插件安装到android 平台
【发布时间】:2017-12-19 08:09:00
【问题描述】:

我已经创建了一个 cordova 插件,它在旧的 cordova android 版本(7.0.0,即使基于cordova blog更新plugin.xml,我也无法安装我的插件。

我可以安装一些其他插件,即使是那些具有cordova android 7 依赖项的插件。 并尝试了这两个选项

<config-file target="app/src/main/AndroidManifest.xml" parent="/manifest/application">

<config-file target="AndroidManifest.xml" parent="/manifest/application">

更新

如果我删除了我的自定义 build.gradle

&lt;framework src="src/android/abcPlugin.gradle" custom="true" type="gradleReference" /&gt;

它的工作..

这是我的自定义 build.gradle 遇到的错误。

cordova plugin add ../cordova-plugin-abc --save
Installing "cordova-plugin-abc" for android

Android Studio project detected

Error during processing of action! Attempting to revert...

Failed to install 'cordova-plugin-abc': Error: Uh oh!
ENOENT: no such file or directory, open '/Users/arjuntraj/Documents/abc/platforms/android/AndroidManifest.xml'

离子,科尔多瓦信息

插件.xml

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android"
        id="cordova-plugin-abc" 
        version="1.0.1">

    <name>CordovaPluginabc</name>
    <description>abc POC</description>
    <license>MIT</license>
    <keywords>ID</keywords>
    <author>  Team  </author>

    <engines>
        <engine name="cordova" version=">=7.0.0" />
        <engine name="cordova-android" version=">=7.0.0" />
    </engines>   

    <js-module src="www/abc.js" name="CordovaPluginabc">
        <clobbers target="cordova.plugins.abc" />
    </js-module>

    <!-- android -->
    <platform name="android">

        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="CordovaPluginabc">
                <param name="android-package" value="com.abc.CordovaPluginabc" />
            </feature>
        </config-file>


        <config-file target="app/src/main/AndroidManifest.xml" parent="/manifest/application">
            <activity android:name="com.abc.sdk.AbcActivity">
            </activity>
        </config-file>

           <source-file src="src/android/abc/abc-sdk-v1.aar" target-dir="libs" framework="true" />    

        <source-file src="src/android/com/abc/CordovaPluginabc.java" target-dir="app/src/main/java/com/abc" />

        <framework src="src/android/abcPlugin.gradle" custom="true" type="gradleReference" />

    </platform>



</plugin>

文件夹结构

【问题讨论】:

  • 好像你的 Android.Manifest 文件在给定路径中丢失了你可以再检查一次 Android.Manifest 文件在给定路径中是​​否可用
  • 请检查已安装的平台以及是否安装了android。
  • 嗨@Nidhinkumar,请找到文件夹结构,它是一个android studio项目,清单文件的位置在app文件夹中,即使我们可以在我的plugin.xml中看到,但它又指的是android/manifest .xml

标签: cordova ionic-framework cordova-plugins cordova-cli cordova-android


【解决方案1】:

已通过更新两个文件的 target 来修复。

aar 库文件:

target-dir="app/src/main/libs"

对于java文件:

target-dir="src/com/abc"

<source-file src="src/android/abc/abc.aar" target-dir="app/src/main/libs" framework="true" />
<source-file src="src/android/com/abc/CordovaPluginAABC.java" target-dir="src/com/rak/abc" />

和 gradle 扩展也可以正常工作而无需任何更改

【讨论】:

    【解决方案2】:

    这对我来说是一个短期解决方案:

    platform/android/cordova/Api.js:82 处的 if 语句很可能会失败 您可以将其注释掉以进行测试并获得构建。无论出于何种原因,您的 android 构建仍然认为它是旧式构建。

        // XXX Override some locations for Android Studio projects                                                                               
    if (AndroidStudio.isAndroidStudioProject(self.root) === true) {
        selfEvents.emit('log', 'Android Studio project detected');
        this.builder = 'studio';
        this.android_studio = true;
        this.locations.configXml = path.join(self.root, 
        'app/src/main/res/xml/config.xml');
        this.locations.strings = path.join(self.root, 
        'app/src/main/res/values/strings.xml');
        this.locations.manifest = path.join(self.root, 
        'app/src/main/AndroidManifest.xml');
        // We could have Java Source, we could have other languages                                                                          
        this.locations.javaSrc = path.join(self.root, 'app/src/main/java/');
        this.locations.www = path.join(self.root, 'app/src/main/assets/www');
        this.locations.res = path.join(self.root, 'app/src/main/res');
    }
    

    【讨论】:

    • 是的,为什么科尔多瓦认为它是一个旧的日食项目?这是因为 主要是因为 target-dir="libs"跨度>
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2018-05-21
    • 2014-12-07
    • 2015-08-10
    相关资源
    最近更新 更多