2

在我的应用程序中,我需要使用 Scrypt 库,但有一个问题:scrypt-1.4.0.jar取自 Maven Central 拒绝在 x86 架构上工作。

在此线程中找到了解决方案的提示:https ://groups.google.com/forum/#!topic/bitcoinj/B0kOqUVIW24 ,特别是:

是的,Maven Central 上的 scrypt jar 包含本机代码 (lib/*.so)。他们真的应该把它放到一个单独的工件中)-:

无论如何,我正在使用

 <excludeJarResources>   
 <excludeJarResource>.*\.jar$</excludeJarResource> 
 </excludeJarResources>  

在我的 android-maven-plugin 配置中。你需要为 Gradle 找到类似的东西。

我使用 Adroid Studio,但不知道如何在 Gradle 中获得相同的结果。我发现的唯一“解决方案”是完全排除 Scrypt 库:

dependencies {
    compile('org.bitcoinj:bitcoinj-core:0.12.2') {
        exclude module: 'scrypt'
    }
}

但当然,这只有在我需要在我的应用程序中使用 Scrypt 时才有效。这是来自同一线程的上述代码的注释:

Andreas 的代码排除了 JAR 资源,即动态库,这意味着 scrypt 库将退回到纯 Java 实现(慢得多)。

我怎样才能在 Gradle 中达到同样的效果?或者,有人建议用 NDK 编译 Scrypt 本机库,但我不知道该怎么做。

4

1 回答 1

1

解决方案 :

我建议你重新编译库,我在 linux 下编译我的库很容易,这里是如何(注意编译它们需要很长时间)

设置环境:

  1. 下载并解压Android NDK
  2. 将 NDK 添加到环境变量(见下文)
  3. 安装安卓 SDK 框架
  4. 将 Android SDK 添加到环境变量(见下文)

启动 SDK 管理器的命令行:

sdk/工具/androis(sdk 管理器)

将 Android 添加到环境变量(必须在编译库之前完成):

导出 ANDROID_HOME=/media/.../android-sdk-linux

导出 PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

导出 PATH=~/bin:/media/.../android-sdk-linux/tools/:/media/.../android-ndk-r10d/:$PATH

编译库:

从项目根目录:运行 ./misc/build-native.sh

安卓工作室:

信息:将 android studio bin 添加到 bin 路径

运行:从 bin dir run studio

清理库以重新编译它们:

  1. 删除以下文件夹 "\obj" "\ovpnlibs" "\libs"

  2. 重新编译库

于 2015-06-12T15:30:36.390 回答