如何设置 Cordova Android 项目以使用 NDK
Posted
技术标签:
【中文标题】如何设置 Cordova Android 项目以使用 NDK【英文标题】:How to set Cordova Android project to use NDK 【发布时间】:2018-03-13 17:45:03 【问题描述】:我正在尝试做这个问题/答案的内容 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader 而是在科尔多瓦。
android
....
defaultConfig
....
ndk
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
如果我在platforms/android/build.gradle
使用 Cordova Android 6.4.0 手动编辑 build.gradle 则此方法有效(7.1 似乎破坏了几乎所有插件,包括一些 cordova 插件,例如 cordova-network-information,所以我一直无法升级至今,正在寻找其他解决方案。
手动编辑并不理想,有没有办法自动设置?可能带有钩子或 config.xml 更改?
谢谢
(编辑) 成功更新到 7.1,64 位还是坏了。
【问题讨论】:
【参考方案1】:我能够使用 build-extras 选项以及 Android 7.1 来做到这一点
在您的项目根目录中,创建一个名为build-extras.gradle
的文件
把这个放进去保存
android
defaultConfig
ndk
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
接下来,在您的脚本文件夹中,创建一个名为 update_build_gradle.js
的新脚本
把这个放进去保存
module.exports = function (context)
if (context.opts.cordova.platforms.indexOf('android') < 0)
return;
console.log("Starting gradle modifications");
const path = require('path');
const fs = require('fs');
const gradlePath = path.join(context.opts.projectRoot, 'platforms/android/app/build-extras.gradle');
const gradleExtraPath = path.join(context.opts.projectRoot, 'build-extras.gradle');
return new Promise(function (resolve, reject)
fs.copyFile(gradleExtraPath, gradlePath, function (err)
if (err)
console.error("Failed to copy to " + gradlePath + " from " + gradleExtraPath);
reject(err);
else
console.log("Copied to " + gradlePath + " successfully");
resolve();
);
);
;
最后,打开你的 config.xml,找到你的 <platform name="android">
树并输入这个新的钩子
<hook src="scripts/update_build_gradle.js" type="before_build" />
注意这里的文档https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#extending-buildgradle 是错误的。
。该文件必须放在android平台目录(/platforms/android)中,因此建议您通过附加到before_build钩子的脚本将其复制。
它实际上需要在 /platforms/android/app 中
-编辑
从 cordova 版本 9 开始,您不能再使用 requireCordovaModule
。但您可以安全地替换为 require
。
【讨论】:
2019 年 2 月检查,文件位置的文档仍然错误。 2019 年 4 月,文档已修复以上是关于如何设置 Cordova Android 项目以使用 NDK的主要内容,如果未能解决你的问题,请参考以下文章
IOS/android + phonegap/cordova框架中的返回键
如何检查cordova/phonegap项目的cordova android版本?