2

で openSSL ライブラリをプロジェクトに追加しようとしてandroid studio 2.0 preview 7experimental gradle pluginます。

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

私がしたことは、をダウンロードしてフォルダーopenSSL libraryに入れたことです。jniそして、このライブラリを使用する別の .c ファイルがあります。必要なファイルを含めましたが、コードにエラーはありません。私の.cファイル名はhello-jni.cで、次のように my に宣言しました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";
}
4

1 に答える 1

0

openssl ライブラリを依存関係として指定する必要があります。ビルド済みライブラリを追加する方法を示すスニペットがここにあります。

于 2016-04-11T14:46:56.470 に答える