介紹:我有使用Java(JNI)包裝本地庫(C++)。庫引擎是cpu密集型的,我們不希望鏈接這個庫的多個應用程序同時運行,並且複雜的對象應該由lib引擎返回。的Android庫工程
問題:設計這樣一個Android庫的最佳方式是什麼?
到目前爲止,我能找到的只是找到2個有價值的例子:OpenCV的經理和Connectbot的ssh-agent。
我能想到的幾個解決方案:
解決方案1 :請一個包裝庫功能的(綁定或AIDL)服務。 (如果服務運行在自己的空間或者應用程序的空間中,如果它在不同的應用程序空間(
System.load("/data/data/com.company.myLib/lib.so")
)如何加載本地lib如何在AIDL中返回複雜的對象?)。這應該是Connectbot的方式。解決方案2:劃分的lib分成以下兩個部分:
- 一個獨立的包,它保持了原生庫+經理服務
- 一個Android的lib項目僅包含Java包裝哪些用戶可以用來構建他們的應用程序。
這應該是OpenCV的經理的方式。我不清楚細節,但這種方式不需要服務來連接,只需
import com.company.myLib.LibWrapper
。另一方面,LibWrapper類應該執行System.load("/data/data/com.company.myLib/lib.so")
。正確?
我會親自去解決2.不幸的是Android是一個新的土地並沒有很多車型尚未就如何開發庫。有沒有其他更好的解決方案?還有其他的考慮嗎?
在我看來,決定性的問題是你想要爲你的圖書館提供什麼樣的交付模式。它會被使用它的應用程序更新,還是可以單獨下載和升級? –
@Alex Cohn:可能獨立升級/下載。好的考慮btw! – Sdra