【问题标题】:How to add openssl lib in android studio with experimental gradle plugin (NDK)?如何使用实验性 gradle 插件(NDK)在 android studio 中添加 openssl lib?
【发布时间】:2016-05-04 05:32:25
【问题描述】:

我正在尝试使用experimental gradle pluginandroid studio 2.0 preview 7 中将openSSL 库添加到我的项目中。

dependencies {
    classpath 'com.android.tools.build:gradle-experimental:0.4.0'
}

我所做的是我下载了openSSL library 并将其放入jni 文件夹中。我还有另一个使用这个库的 .c 文件。我已经包含了我需要的文件并且代码中没有错误。我的.c 文件名是hello-jni.c,我将它声明到我的build.gradle (module: app) 中,如下所示:

android.ndk {
    moduleName = "hello-jni"
}

我还像这样在我的 MainActivity 中加载了我的库:

static {
    System.loadLibrary("hello-jni");
}

但是当我尝试构建我的项目时,会出现如下错误:

Error:(51) undefined reference to `RSA_generate_key'
Error:error: ld returned 1 exit status
Error:Execution failed for task ':app:linkArm64-v8aDebugHello-    jniSharedLibrary'.
> A build operation failed.
  Linker failed while linking libhello-jni.so.

我的hello-jni.c源码:

#include <jni.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include "boringssl/crypto/openssl/base.h"
#include "boringssl/crypto/openssl/rsa.h"
#include "boringssl/crypto/openssl/pem.h"

#define KEY_LENGTH  2048
#define PUB_EXP     3
#define PRINT_KEYS
#define WRITE_TO_FILE 0

size_t pri_len;            // Length of private key
size_t pub_len;            // Length of public key
char   *pri_key;           // Private key
char   *pub_key;           // Public key
char   msg[KEY_LENGTH/8];  // Message to encrypt
char   *encrypt = NULL;    // Encrypted message
char   *decrypt = NULL;    // Decrypted message
char   *err;               // Buffer for any error messages

JNIEXPORT jstring JNICALL
Java_com_example_ndktest_SignUpActivity_testString(JNIEnv *env, jobject activity) {

// In this line, the error happens!(in build time)
RSA *keypair = RSA_generate_key(KEY_LENGTH, PUB_EXP, NULL, NULL);

//continue to work with key pair ...

return "some jstring";
}

【问题讨论】:

  • 您是否下载了所有 OpenSSL 库(包括 .c 文件)?还是只有头文件 (.h) 和静态或动态库 (.a, .so)?
  • 你成功了吗?

标签: android c android-studio android-ndk gradle-experimental


【解决方案1】:

您需要将 openssl 库指定为依赖项。有一个 sn-p here 显示如何添加预建库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2015-11-13
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多