2015-11-06 61 views
2

我跟着here,我已經將.so文件添加到了我的android項目中。加載庫和項目運行。android無法找到相應的jni功能

現在我想使用庫函數。我試着像這樣在我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中。

這件事與我的包名有關,他試圖在我的包中而不是在庫中找到它?

當我運行此我得到:

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) 

回答

1

我看到Robosodium使用Swig生成包裝。在這種情況下,src/main/java/org/abstractj/kalium中也應該有一些自動生成的Java文件,這些文件也需要添加到您的項目中。所有本地調用都應該使用該類中提供的方法。

+0

我是否需要將文件夾org複製到我的main/java中,或者是否需要在我自己的包中創建文件,然後從他們的文件中複製代碼? – user1007522

+0

事實上,您需要將組織文件夾複製到java下的自己的項目中。 – user1007522

-1

與「armeabi」和「armeabi-V7A」的名字在項目的libs文件夾中創建文件夾,把你的「所以」文件保存到兩個文件夾並清理項目並運行它。

+0

我已經有了。我有他們在機器人庫和jniLibs文件夾。 – user1007522