android - 没有找到 com.djinnius.HelloWorld$CppProxy 的实现

标签 android react-native djinni

我正在开发一个使用 djinni 的 React Native 项目使用跨平台原生 C++。

我已经looked at this question , 但它似乎是一个不同的问题。

项目构建成功,但在运行时几乎立即失败。

adb logcat 显示以下异常:

No implementation found for com.djinnius.HelloWorld$CppProxy com.djinnius.HelloWorld.create(com.rushingvise.reactcpp.ReactBridge) (tried Java_com_djinnius_HelloWorld_create and Java_com_djinnius_HelloWorld_create__Lcom_rushingvise_reactcpp_ReactBridge_2)

我试图理解上面消息中 tried 的含义。这是因为 apk 中缺少相应的 native 代码吗?还是其他原因?

完整的 logcat 如下:

04-19 19:44:51.042 2354-2700/com.djinnius E/art: No implementation found for com.djinnius.HelloWorld$CppProxy com.djinnius.HelloWorld.create(com.rushingvise.reactcpp.ReactBridge) (tried Java_com_djinnius_HelloWorld_create and Java_com_djinnius_HelloWorld_create__Lcom_rushingvise_reactcpp_ReactBridge_2)
04-19 19:44:51.045 2354-2354/com.djinnius W/unknown:React: Caught exception after cancelling react context init
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.facebook.react.ReactInstanceManager$Result.get()' on a null object reference
        at com.facebook.react.ReactInstanceManager$ReactContextInitAsyncTask.onCancelled(ReactInstanceManager.java:247)
        at com.facebook.react.ReactInstanceManager$ReactContextInitAsyncTask.onCancelled(ReactInstanceManager.java:197)
        at android.os.AsyncTask.finish(AsyncTask.java:665)
        at android.os.AsyncTask.-wrap1(AsyncTask.java)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:203)
        at android.app.ActivityThread.main(ActivityThread.java:6339)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
04-19 19:44:51.053 2354-2700/com.djinnius E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
    Process: com.djinnius, PID: 2354
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:325)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.lang.UnsatisfiedLinkError: No implementation found for com.djinnius.HelloWorld$CppProxy com.djinnius.HelloWorld.create(com.rushingvise.reactcpp.ReactBridge) (tried Java_com_djinnius_HelloWorld_create and Java_com_djinnius_HelloWorld_create__Lcom_rushingvise_reactcpp_ReactBridge_2)
        at com.djinnius.HelloWorld.create(Native Method)
        at com.djinnius.HelloWorld.<init>(HelloWorld.java:27)
        at com.djinnius.HelloWorldPackage.createNativeModules(HelloWorldPackage.java:18)
        at com.facebook.react.NativeModuleRegistryBuilder.processPackage(NativeModuleRegistryBuilder.java:88)
        at com.facebook.react.ReactInstanceManager.processPackage(ReactInstanceManager.java:950)
        at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:891)
        at com.facebook.react.ReactInstanceManager.access$600(ReactInstanceManager.java:104)
        at com.facebook.react.ReactInstanceManager$ReactContextInitAsyncTask.doInBackground(ReactInstanceManager.java:218)
        at com.facebook.react.ReactInstanceManager$ReactContextInitAsyncTask.doInBackground(ReactInstanceManager.java:197)
        at android.os.AsyncTask$2.call(AsyncTask.java:305)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 

感谢任何帮助。

最佳答案

发现问题。 它确实是在扩展 ReactPackage 的 Java 类中缺少 System.LoadLibrary() 调用。 现在可以使用这个初始化器

public class HelloWorldPackage implements ReactPackage {
    static {
        System.loadLibrary("native-lib");
    }

关于android - 没有找到 com.djinnius.HelloWorld$CppProxy 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927400/

相关文章:

css - 容器内的多行 - Flex - React-Native

javascript - 为什么react js中类函数方法不被调用?

c++ - Djinni:如何处理想要重载的方法?

c++ - Djinni 记录是否可以包含可选的接口(interface)字段

java - 过滤ArrayList并删除不需要的元素

java - 使用Firebase时(org.gradle.api.tasks.TaskExecutionException:任务 ':app:compileDebugJavaWithJavac'的执行失败)

java - Libgdx |场景2d |点击隐形按钮时 touchDown 输入处理器方法不会触发

react-native - 用多行 react 原生水平 FlatList

java - 单元测试: how to verify that an argument was passed to a constructor?