android - 在 Gradle 中为 x86 android 设备配置 Scrypt

标签 android gradle scrypt

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

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

Yes, the scrypt jar on Maven Central contains native code (lib/*.so). They really should put this into a separate artifact )-:

Anyway, I'm using

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

in my android-maven-plugin configuration. You need to find something similar for Gradle.

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

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

当然,这只有在我需要在我的应用程序中使用 Scrypt 时才有效。这是同一线程对上述代码的评论:

Andreas' code only excludes the JAR resources i.e. dynamic library, which means the scrypt library will fall back to a pure Java implementation (much slower).

我怎样才能在 Gradle 中实现同样的目标?或者,有人建议使用 NDK 编译 Scrypt native 库,但我不知道该怎么做。

最佳答案

解决方案:

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

设置环境:

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

启动 SDK 管理器的命令行:

sdk/tool/android(sdk 管理器)

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

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

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

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

编译库:

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

安卓工作室:

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

运行:从 bin 目录运行工作室

清理库以重新编译它们:

  1. 删除以下文件夹 “\对象” “\ovpnlibs” "\libs"

  2. 重新编译库

关于android - 在 Gradle 中为 x86 android 设备配置 Scrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713608/

相关文章:

java - “AAPT2 error, check logs for datils ”和描述的情况

android - 看不到 Firebase 上传映射文件任务

ubuntu - Python 3,Scrypt 模块,哈希不匹配

javascript - scrypt.js 失败,N 大于 2^14

java - 支持多种布局的屏幕 list

android - 如何在同一个 ListView 中同时实现 ontouch 和 onfling?

android - android 中的 setOnLongClickListener 与 kotlin

asynchronous - Gradle 问题 - 尝试使用 Jetty 和 Resteasy 做一些 JAX-RS 2 - ClassNotFoundException : javax. servlet.AsyncListener

android - 如何更改 Firebase 中某些语句的文本样式?

Python - 使用 scrypt 存储密码的正确方法?