簡體   English   中英

需要將現有的c ++代碼集成到Android NDK的說明

[英]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 ),還支持armv7ax86mips和最近支持的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/armeabilibs/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM