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的方式調用時, 會找不到該方法進而報錯