更新到 cordova android 7.0.0 后无法将自定义 cordova 插件安装到 android 平台
Unable to install custom cordova plugin to android platform after updating to cordova android 7.0.0
我创建了一个 cordova 插件,它在旧的 cordova android 版本(< 7.0.0)上运行良好。一旦我从 cli 更新到 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
<framework src="src/android/abcPlugin.gradle" custom="true" type="gradleReference" />
它的工作..
这是我的自定义 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'
Ionic,Cordova 信息
Plugin.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>
文件夹结构
这对我来说是一个短期解决方案:
很可能在 platforms/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 修复。
对于 aar 库文件:
目标目录="app/src/main/libs"
和 java 文件:
目标目录="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 扩展也可以正常工作,无需任何更改
我创建了一个 cordova 插件,它在旧的 cordova android 版本(< 7.0.0)上运行良好。一旦我从 cli 更新到 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
<framework src="src/android/abcPlugin.gradle" custom="true" type="gradleReference" />
它的工作..
这是我的自定义 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'
Ionic,Cordova 信息
Plugin.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>
文件夹结构
这对我来说是一个短期解决方案:
很可能在 platforms/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 修复。
对于 aar 库文件:
目标目录="app/src/main/libs"
和 java 文件:
目标目录="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 扩展也可以正常工作,无需任何更改