Как использовать оболочку NativeSecp256k1 от Bitcoinj в Android? - PullRequest
1 голос
/ 24 июня 2019

Насколько я понимаю, библиотека bitcoinj содержит оболочку для функций ядра биткойнов - NativeSecp256k1.Я пытаюсь вызвать один из методов из этой оболочки:

NativeSecp256k1.secKeyVerify(byteArrayOf(...))

Но я получил сбой:

java.lang.UnsatisfiedLinkError: Реализация для int org.bitcoin не найдена.NativeSecp256k1.secp256k1_ec_seckey_verify (java.nio.ByteBuffer, длинный) (пытался Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify и Java_org_bitcoin_NativeSecp256k1_secp256k1_1ec_1seckey_1verify__Ljava_nio_ByteBuffer_2J) на org.bitcoin.NativeSecp256k1.secp256k1_ec_seckey_verify (Native Method) в org.bitcoin.NativeSecp256k1.secKeyVerify (NativeSecp256k1.java:134) в com.my.app.MainActivity.onCreate (MainActivity.kt: 15) на android.app.Activity.performCreate (Activity.java:6251) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) на android.app.ActivityThread.executeLaunchActivity (ActivityThread.java:2369) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) в android.app.ActivityThread.-wrap11 (ActivityThread.java) в android.app.ActivityThread$ H.handleMessage (ActivityThread.java:1344) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:148) в android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Похоже, что библиотека bitcoinj содержит оболочку, но не содержит нативную библиотеку, которая использовалась в этой оболочке.Как исправить эту проблему?

1 Ответ

1 голос
/ 24 июня 2019

Bitcoinj использует JNI для загрузки библиотеки C для операций кривой secp256k1. Если библиотека импортирована правильно ... и, так как вы пытаетесь получить к ней доступ напрямую, вы можете пропустить System.loadLibrary('secp256k1') вызов

Проверьте здесь: https://github.com/bitcoinj/bitcoinj/blob/2ec193f8479425c3a66bebf5f2d3493e39e88f7c/core/src/main/java/org/bitcoin/Secp256k1Context.java

Чтобы собрать исходники компиляции для библиотеки, она описана в блоке комментариев класса NativeSecp256k1, здесь: https://github.com/bitcoinj/bitcoinj/blob/2ec193f8479425c3a66bebf5f2d3493e39e88f7c/core/src/main/java/org/bitcoin/NativeSecp256k1.java#L34

...