我说假是因为该方法没有被声明为抽象的,但它没有实现。
我正在尝试修复使用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)
我将阅读更多文档和示例。谢谢。