如何设置Cordova Android项目以使用NDK

时间:2018-03-13 17:45:03

标签: android cordova

我正在尝试做这个问题/答案 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader 但是在cordova中。

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

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

手动编辑并不理想,有没有办法自动设置?可能有一个hook或config.xml更改?

由于

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

1 个答案:

答案 0 :(得分:2)

我可以使用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代替。