0

我说假是因为该方法没有被声明为抽象的,但它没有实现。

我正在尝试修复使用BridJ引入的错误。BridJ 使用自定义注解来注解 Android Activity 中的方法。该方法具有以下签名:

@Library("example")
public static void helloLog(Pointer<Byte> logThis);

但是编译器抱怨Missing method body, or declare abstract这两行代码。所以我决定看一下注解的源代码,即:

@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
public @interface Library {

    /**
     * Name of this library.
     */
    String value();

    /**
     * Names of libraries that need to be loaded before this library is loaded
     */
    String[] dependencies() default {};

    String versionPattern() default "";
}

在阅读了Java Custom Annotations之后,我看不出注释的定义有什么问题。无论如何,我在该helloLog()方法中添加了一个实现。

public static void helloLog(Pointer<Byte> logThis) {}

之后错误消失。我没想到它会解决这个问题,但是 FWIW,它允许我构建和运行,但它在启动时崩溃,因为NullPointerException我计划调查。

更新 1

@thomas-kläger 和其他人建议将native关键字添加到helloLog. 我试过了,但后来我得到了这个运行时错误:

java.lang.UnsatisfiedLinkError: No implementation found for void connectedsolutions.cummins.com.bridjtest.MainActivity.helloLog(org.bridj.Pointer) (tried Java_connectedsolutions_cummins_com_bridjtest_MainActivity_helloLog and Java_connectedsolutions_cummins_com_bridjtest_MainActivity_helloLog__Lorg_bridj_Pointer_2)

我将阅读更多文档和示例。谢谢。

4

0 回答 0