2014-01-20 22 views
1

我已經使用SDK在eclipse中編寫了多個應用程序。我以前也曾使用過C++。現在我被要求安排一些舊的C++代碼被封裝到一個Java庫中,或者至少有一個Java接口,這樣其他的android程序員(不需要C++知識)就可以在他們的代碼中使用它。用於android的C++庫

我已經看到了很多使用NDK將C++代碼製作成獨立應用程序的例子和討論,但從來沒有一個庫。

如果使用我的庫的android程序員甚至不需要了解或安裝NDK,它會更好。

有人可以證實我所要做的甚至是可能的。如果是這樣,怎麼樣?

+0

你就不能提供編譯你的目標,並使用JNI與它對接的任何ARM的lib?我知道c4droid可以安裝SDL和Qt,因此必須使用預編譯的庫。此外,你可以看看http://developer.android.com/reference/android/app/NativeActivity.html – thokra

+0

這是可能的。有可能和簡單的區別。 [This](http://www.xwt.org/mips2java/)可能會有所幫助。 –

+0

這絕對有可能。 NDK的全部目的是允許本地代碼(C++)與Dalvik VM進行交互。你知道你的目標平臺嗎?您需要交叉編譯本機代碼。 – bblincoe

回答

1

您將需要編寫JNI(Java本地接口)代碼來訪問該庫。在你的Java類,你會有這樣的方法:

private native final int doStuff(); 

這將對應一個功能與NDK編譯.cpp文件。這個C++函數將在Java方法被調用時被調用。

看看這篇文章:http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

這是在我做的這事的一個開源項目:https://github.com/svenoaks/SoundTouch-Android。查看soundtouch-jni.cpp文件以及它如何與SoundTouch.java文件中的調用對應。

寫相應的方法後,你就可以編譯你的C++庫和JNI代碼轉換成二進制.so文件,因此用戶無需瞭解任何NDK。該項目可以像普通的Android庫項目一樣使用。

如果你想針對x86設備以及ARM架構,您需要在您的Application.mk文件中啓用86來構建它 - 看看http://software.intel.com/en-us/articles/creating-and-porting-ndk-based-android-apps-for-ia#using-x86-ndk-toolset

1

is a way to do it與Eclipse(ADT):

您可以創建一個android庫項目,並讓開發者 將該庫項目添加到他們的主項目中。該項目中的任何本地庫 都將包含在主項目中,前提是它們已經將 內置到其lib目錄中。這不是一個整潔作爲一個 罐子,但它是我們這樣做的是出口Java代碼和資源的標準Android庫 項目以同樣的方式。

對於AndroidStudio,包裝有點不同,請參見this discussion。請注意,AS目前是一個移動目標;我們都希望在官方宣佈之前它會得到體面的NDK支持。