如何设置 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,找到你的 &lt;platform name="android"&gt; 树并输入这个新的钩子

&lt;hook src="scripts/update_build_gradle.js" type="before_build" /&gt;

注意这里的文档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版本?

Sencha Touch + Cordova + Android - 如何配置项目url?

如何在cordova项目中异步打开inappbrowser

cordova如何修改安卓 app 目标版本

如何将 Android TV 库添加到 Cordova 项目?