如何使用实验性gradle插件(NDK)在android studio中添加openssl库?
我正在尝试使用如何使用实验性gradle插件(NDK)在android studio中添加openssl库?,android,c,android-studio,android-ndk,gradle-experimental,Android,C,Android Studio,Android Ndk,Gradle Experimental,我正在尝试使用实验性gradle插件将openSSL库添加到我在android studio 2.0 preview 7中的项目中 dependencies { classpath 'com.android.tools.build:gradle-experimental:0.4.0' } 我所做的是下载了openSSL库,并将其放入jni文件夹中。我还有另一个使用这个库的.c文件。我已经包含了我需要的文件,代码中没有错误。我的.c文件名是hello jni.c,我在build.grad
实验性gradle插件将openSSL库添加到我在android studio 2.0 preview 7
中的项目中
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.4.0'
}
我所做的是下载了openSSL库
,并将其放入jni
文件夹中。我还有另一个使用这个库的.c文件。我已经包含了我需要的文件,代码中没有错误。我的.c
文件名是hello jni.c
,我在build.gradle(module:app)
中声明了它,如下所示:
android.ndk {
moduleName = "hello-jni"
}
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.
我还将我的库加载到main活动中,如下所示:
android.ndk {
moduleName = "hello-jni"
}
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.
但当我尝试构建项目时,会出现如下错误:
android.ndk {
moduleName = "hello-jni"
}
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.
My 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";
}
#包括
#包括
#包括
#包括
#包括“boringssl/crypto/openssl/base.h”
#包括“boringssl/crypto/openssl/rsa.h”
#包括“boringssl/crypto/openssl/pem.h”
#定义键长度2048
#定义PUB_EXP 3
#定义打印密钥
#定义将\u写入\u文件0
大小优先;//私钥长度
大小不一公钥长度
char*pri_key;//私钥
char*pub_key;//公钥
char msg[键长度/8];//要加密的消息
char*encrypt=NULL;//加密信息
char*decrypt=NULL;//解密消息
字符*err;//任何错误消息的缓冲区
JNIEXPORT jstring JNICALL
Java_com_示例_ndktest_注册活动_测试字符串(JNIEnv*env,jobject活动){
//在这一行中,会发生错误!(在构建时)
RSA*keypair=RSA\u generate\u key(key\u LENGTH,PUB\u EXP,NULL,NULL);
//继续使用密钥对。。。
返回“somejstring”;
}
您需要将openssl库指定为依赖项。有一个片段显示了如何添加预构建库 您是否下载了所有OpenSSL库(包括.c文件)?或者只有标题(.h)和静态或动态库(.a、.so)?您成功了吗?