如何将 Cordova Android 项目设置为使用 NDK



我正在尝试做这个问题/答案所做的事情java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader而是在科尔多瓦。

android {
    ....
    defaultConfig {
        ....
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }
    }
}

如果我在使用 Cordova Android 6.4.0 platforms/android/build.gradle中手动编辑 build.gradle,这将有效(7.1 似乎破坏了几乎所有插件,包括一些 cordova 插件,如 cordova-network-information,所以我到目前为止无法升级,正在寻找其他解决方案(。

手动编辑并不理想,有没有办法自动设置? 可能带有钩子或配置.xml更改?

谢谢

(编辑(成功更新到7.1,64位仍然损坏。

我能够使用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();
            }
        });
    });
};

最后,打开你的配置.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中

-编辑从科尔多瓦版本 9 开始,您不能再使用 requireCordovaModule了。 但是您可以安全地更换为require.

最新更新