2015-06-15 136 views
3

我想學習使用NDK在AndroidStudio,我想導入的「天然活性」示例中使用的「android_native_app_glue」文件,讓我對等的顯示器基本功能框架,觸摸等。在示例,它加載庫,這條線在android.mk文件:如何使用build.gradle文件將靜態庫添加到Android NDK?

LOCAL_STATIC_LIBRARIES := android_native_app_glue 

,然後導入它在「main.c中」簡單地:

#include <android_native_app_glue.h> 

但在AndroidStudio,據我可以用它進行試驗告訴,它不使用在所有的android.mk文件,而是使用的build.gradle文件來完成所有S ame函數代替。因此,例如,在android.mk更換LOCAL_LDLIBS := ...,我在的build.gradle使用ldLibs = ...。什麼gradle代碼取代LOCAL_STATIC_LIBRARIES

有也是一種資源的地方,解釋說,一般來講,如何從android.mk翻譯成的build.gradle?

+0

嘿山姆,如果你想學習使用NDK,請查看我的答案貼在這裏(HTTPS的問題://計算器。 COM /問題/ 16667903/Android的工作室gradle這個-和NDK/27737154#27 737154)和我的相關博客文章在這裏(http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/) – SJoshi

回答

2

,如果你真的想使它不Makefile中工作,你可以複製並粘貼到ndk\sources\android\native_app_glue\android_native_app_glue.(c|h)你JNI文件夾並添加androidLDLIBS

否則,你仍然可以依靠經典的Makefile,通過禁用默認調用NDK建造,並使gradle這個使用庫從libs目錄:

sourceSets.main { 
    jniLibs.srcDir 'src/main/libs' 
    jni.srcDirs = [] //disable automatic ndk-build call 
} 

在你不得不這種情況下,打電話ndk-build自己,但你也可以讓gradle這個稱呼它爲您提供:

// call regular ndk-build(.cmd) script from app directory 
task ndkBuild(type: Exec) { 
    if (Os.isFamily(Os.FAMILY_WINDOWS)) { 
     commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath 
    } else { 
     commandLine 'ndk-build', '-C', file('src/main').absolutePath 
    } 
} 

tasks.withType(JavaCompile) { 
    compileTask -> compileTask.dependsOn ndkBuild 
} 
+0

我不確定這是哪裏的哪個部分。所以,我想補充「lbLibs =」機器人」,然後在那裏我會放‘NDK /來源/.../ android_native_app_glue’? 對於代碼的其餘部分,它在gradle這個文件去?我嘗試添加它在那裏,但它說:「method not found:main()」。「sourceSets.main」是否需要在gradle文件的某些特定部分中,例如在android {}中? –

+0

進一步玩耍,我發現如果我添加「#include <../../../../../ sources/android/native_app_glue/android_native_app_glue.h>」,那麼它會編譯本地膠水代碼,但如果我嘗試調用任何函數(例如,「app_dummy()」),它提供了一個「未定義的引用」的錯誤。有更多的東西,我需要補充,以確保它實際上可以使用android_native_app_glue.h聲明的功能是什麼? –

+0

是的,你會增加'LDLIBS「 android「'。然後你可以將.c和.h從android_native_app_glue複製到你的jni源代碼中。像平常一樣加上頭文件#include '。 sourceSets.main在android {}中進行,但只有在您想使用自己的Makefiles時纔會使用此代碼。 – ph0b

相關問題