我已关注here,我已将.so文件添加到我的android项目中。加载库并运行项目。
现在我想使用库的一个功能。我在MainActivity
:
public final static native int crypto_aead_chacha20poly1305_encrypt(byte[] jarg1, int[] jarg2, byte[] jarg3, int jarg4, byte[] jarg5, int jarg6, byte[] jarg7, byte[] jarg8, byte[] jarg9);
Android让我找不到相应的JNI功能。
so文件位于正确的架构图中的jniLibs中。
这是否与我的packagename有关,他试图在我的包中找到它而不是在so库中?
当我跑步时,我得到:
java.lang.UnsatisfiedLinkError: No implementation found for int be.example.libtest.MainActivity.crypto_aead_chacha20poly1305_encrypt(byte[], int[], byte[], int, byte[], int, byte[], byte[], byte[]) (tried Java_be_example_libtest_MainActivity_crypto_1aead_1chacha20poly1305_1encrypt and Java_be_example_libtest_MainActivity_crypto_1aead_1chacha20poly1305_1encrypt___3B_3I_3BI_3BI_3B_3B_3B)
答案 0 :(得分:1)
我看到 Robosodium 使用 Swig 来生成包装器。在这种情况下,还应该在Let short int x = 1 (0x0001)
then ~x = 65534 (0xFFFE)
~x + 1 = 65534 + 1 (0xFFFF)
~(~x+1) = 0 (0x0000)
~(~x+1) + 1 = 0 + 1 (0x0001)
中自动生成一些需要添加到项目中的Java文件。应使用该类中提供的方法进行所有本机调用。
答案 1 :(得分:-1)
创建名称为" armeabi"的文件夹和" armeabi-v7a"在项目的libs文件夹中放置" .so"将文件存入两个文件夹并清理项目并运行它。