[英]Need directions to integrate already existing c++ code to Android NDK
我已經有其他人編寫的一些C ++代碼(與微控制器進行交互)。 我學習了android和NDK,並輕松編寫了小樣本程序。 現在,我需要將兩者集成。
因此,我應該如何開始進行集成部分? NDK實際上如何工作? 假設我現在分為三部分,A-C ++代碼,B-NDK本機接口代碼,C-Android Activity / Class。
1)我應該編譯A(g ++ linaro),然后將目標文件放置在Android項目中以供C通過B調用嗎?
(要么)
2)是否應該使用g ++(linaro)一起編譯A和B,然后將.so文件復制到Android Eclipse項目中? (不知道在普通的Eclipse中模仿NDK-build命令會多么復雜)。
(要么)
3)將A復制到Android Eclipse項目中並生成java.h文件,然后使用A和B同時生成.so文件。(在這種方法中,我需要找到正確的位置,將整個CPP項目文件放入Android / NDK中蝕項目)。
PS:我試圖找到可以做到這一點的例子,但是似乎只是找到了簡單的基本例子,我已經很容易地創建了。 我需要集成部分的幫助,如果您知道(Android / NDK / Eclipse / already_existing_C ++ _ code),請向我發布教程。
您應該使用Android工具鏈編譯A。 請注意,Android不僅支持ARM(又名armeabi ),還支持armv7a , x86 , mips和最近支持的armeabi-v7a-hard 。 很快, x86-64將發布 。
您可以使用Android 獨立工具鏈編譯A,而無需采用NDK構建系統。
您可以將B編譯為A的一部分,也可以單獨編譯。 在后一種情況下,只需在Java靜態構造函數中將A加載到B之前:
{
loadLibrary("A");
loadLibrary("B");
}
因為libB.so將依賴libA.so。
您可以在APK中打包libA.so和libB.so(在libs/armeabi
, libs/x86
等文件夾中)
首先,我建議您閱讀Android NDK文檔 。 為了使用NDK工具鏈將C ++代碼編譯到JNI的共享庫中,編寫Android.mk並不難。 最困難的部分可能是Android libc(仿生)與普通Linux libc不同。
因此,嘗試首先使用NDK工具鏈編譯A-C ++代碼。 如果失敗,則應將其移植到Android libc,或者應使用linaro工具鏈對其進行編譯和靜態鏈接。 查看使用NDK工具鏈鏈接靜態小精靈庫的文檔。 但是二進制文件在Linux上不起作用,因為Android Linux內核與linaro不同。
無論如何,如果您要編譯共享庫,可以輕松將其集成到Android項目。 只需將共享庫放入libs / [arch],例如libs / armeabi-v7a / libfoo.so。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.