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 開發相關能力。待之後有更多需求或自己需新開專案時來參考看看。

    回覆刪除

C++ 能否用 memcpy 複製 class / struct 的資料?

答案是: POD (plain old data) type 可以。POD type 可和 C 互通, CPP Reference POD Type 的介紹: Specifies that the type is POD (Plain Old Data) type. Thi...