2012年12月15日 星期六

Some tips about Android JNI

和 JNI 奮鬥了一陣子, 隨手備忘查到的東西

用法和一般 Java JNI 差不多, 所以可以先參考一般 JNI 的用法, 再來看 Android JNI Tips:

C 和 C++ 的寫法只有一點小差異, 見 Wikipedia 的範例, 這樣看別人的範例時, 可以一併參考 C 或 C++ 的 code

JNI 的用法和 reflection 的概念差不多, 要先取得 class、再取得 method、再呼叫 method。所以比較需要查的是型別參數:

  • 這裡的 Type Signatures
  • constructor 的名稱是 <init>
  • inner class 的型別用 $ 分隔, 比方 package com.mypkg 的 class A 內有 inner class B, 型別名稱為 Lcom.mypkg.A$B;。注意 inner class 為 non-static 時, 要先有 A 才能 new 出 B

2 則留言:

  1. 你需要從 Java call 的 C function 數量多時該看看 JNA:
    https://github.com/twall/jna/blob/master/www/GettingStarted.md
    它像 Python 的 ctypes 一樣,手上有 (lib_name, function_name) 然後用 Java 表示參數與傳回型態後就能呼叫了。省掉了寫跟編譯 C wrapper library。

    回覆刪除
  2. 謝啦, 目前只有偶而寫一下 Android 程式而已。現在在專心補強 iOS 開發相關能力。待之後有更多需求或自己需新開專案時來參考看看。

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...