google官方的<code>ndk-sample</code>中的<code>hello-jnicallback</code>项目, 在通过反射调用<code>JniHandler.java</code>类中的<code>getBuildVersion()</code>方法时,
由于是直接调用的java的<code>static</code>方法,并没有出错

而在kotlin的语法中, 要实现java中<code>static</code>需要使用到<code>companion</code>关键字
但是如果只是增加了<code>companion</code>, 那么在jni中通过<code>GetStaticMethodID()</code>获取<code>getBuildVersion()</code>静态方法会报如下错误
方法一
网上搜索了一些资料,查询了相关API找到了如下方法(该方法参考Jni 反射 Kotlin 静态内部类成员函数)
主要是通过反射先获取<code>companion</code>静态属性对象, 然后再通过该对象调用其方法
方法二
该方法是无意间想起kotlin中有一个<code>@JvmStatic</code>注解, 该注解注释如下
大意是说, 如果<code>@JvmStatic</code>注解用在函数上,那么会生成一个静态方法; 如果是用在属性上, 那么就会对应的生成静态<code>setter/getter</code>方法
既然如此,那么就可以使用该注解来实现jni反射kotlin中的<code>static</code>
加上该注解后, jni中的代码就可以写为google官方sample中的方式
方法二中使用到该注解来解决jni反射kotlin静态的问题, 该注解的功能直接看字节码文件比较清晰
若不适用该注解,那么字节码文件如下图, 可以看到并不会生成一个对应的static方法, 所以按照googl-sample的方式调用时, 会找不到该方法从而报错