如何在Android JNI中链接加密共享库

时间:2013-02-07 00:29:46

标签: android android-ndk cryptography java-native-interface shared

我正在编写一个使用crypto函数的包装器。 我使用Android-NDK从openssl-android构建加密库。现在我有了我需要的libcrypto.so,但我不知道如何将它与我的包装器链接。

我的项目树就像这样

(proj root)
|
|->(src)
|->(src)-> com.package
|->(src)-> com.package->NativeCipher.java
|
|->(jni)
|->(jni)->Android.mk
|->(jni)->NativeCipher.c

NativeCipher.java

public class NativeCipher {
    static {
         System.loadLibrary("crypto");
         System.loadLibrary("NativeCipher");
     }

     public static native byte[] AESEncrypt(byte[] in, byte[] key);
}

NativeCipher.c

#include <string.h>
#include <jni.h>
#include <aes.h>

jbyteArray Java_com_package_NativeCipher_AESEncrypt(JNIEnv* env, jobject this, jbyteArray in, jbyteArray key)
{
    // All my code here
}

我需要使用crypto提供的#include函数。 但是,我不知道如何处理NDK生成的.so文件以及如何构建Android.mk文件。

在此先感谢,我试图尽可能具体。

1 个答案:

答案 0 :(得分:0)

原生图书馆会转到Android项目的libs/armeabilibs/armeabi-v7a。您可能希望重命名OpenSSL库,因为系统已经有libcrypto.so。至于您自己的JNI包装器,只需从NDK获取共享库示例并修改为使用您自己的文件。