2017-06-02 36 views
1

在Android Studio 2.3.2中生成一個支持NDK的新項目時,您不會再在jni/目錄中獲得自動生成的Android.mk文件。Android NDK在Android Studio中的Android.mk位置2.3.2

您現在在cpp/ dir中獲得CMakeLists.txt

沒有jni/ dir。

如果您仍然希望使用而不是CMakeAndroid.mk文件在哪裏去的文件?

是否應該在cpp/ dir中創建?

或者它是否在app/CMakeLists.txt相同?

你有,如果你,如果你打算爲Android Studio來自動建立本地共享庫,而不是運行ndk-build明確創建Android.mk文件刪除CMakeLists.txt文件?

更新 - 鏈接到第三方庫:

我產生了一堆的libusb .so文件,即MIPS64的

~/projects/third-party/libusb-1.0.21/android/libs: 
    total used in directory 36 available 265852464 
    drwxrwxr-x 9 bph bph 4096 Jun 2 22:20 . 
    drwxr-xr-x 5 bph bph 4096 Jun 2 22:20 .. 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 arm64-v8a 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 armeabi 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 armeabi-v7a 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 mips 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 mips64 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 x86 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 x86_64 

內容/例如樣子:

~/projects/third-party/libusb-1.0.21/android/libs/mips64: 
    total used in directory 276 available 265852464 
    drwxrwxr-x 2 bph bph 4096 Jun 5 14:05 . 
    drwxrwxr-x 9 bph bph 4096 Jun 2 22:20 .. 
    -rwxr-xr-x 1 bph bph 14872 Jun 5 14:05 dpfp 
    -rwxr-xr-x 1 bph bph 14944 Jun 5 14:05 dpfp_threaded 
    -rwxr-xr-x 1 bph bph 27432 Jun 5 14:05 fxload 
    -rwxr-xr-x 1 bph bph 10680 Jun 5 14:05 hotplugtest 
    -rwxr-xr-x 1 bph bph 127544 Jun 5 14:05 libusb1.0.so 
    -rwxr-xr-x 1 bph bph 10624 Jun 5 14:05 listdevs 
    -rwxr-xr-x 1 bph bph 10712 Jun 5 14:05 sam3u_bphchmark 
    -rwxr-xr-x 1 bph bph 14912 Jun 5 14:05 stress 
    -rwxr-xr-x 1 bph bph 35640 Jun 5 14:05 xusb 

即交叉構建.so文件在那裏..

在CMakeLists.txt my link_d irectories看起來是這樣的:

link_directories(~/projects/third-party/libusb-1.0.21/android/libs/${ANDROID_ABI}/ 

我target_link_libraries看起來是這樣的:

target_link_libraries(# Specifies the target library. 
         usb-1.0) 

但我發現了鏈接錯誤:

~/Android/Sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin/ld: cannot find -lusb-1.0 

它彷彿link_directories是沒有得到回升或$ {ANDROID_ABI}不工作?

對build.gradle文件的mod不會對鏈接器錯誤有任何影響嗎?

回答

1

在你的build.gradle文件(應用程序)添加defaultConfigbuildTypesexternalNativeBuildpath指向Android.mk文件。

externalNativeBuild { 
    ndkBuild { 
     path file("../../gameSource/Android.mk") 
    } 
} 

此外,考慮切換到CMakeLists。它的構建速度非常快。


編輯:哈克的Android.mk這樣,當你運行NDK構建它打印出文件,而不是構建庫列表。

$(info "--sources--") 
$(foreach file,$(LOCAL_SRC_FILES),$(info $(file))) 
$(info "--headers--") 
$(foreach file,$(LOCAL_C_INCLUDES),$(info $(file))) 

然後在腳本結尾處註釋掉BUILD_SHARED_LIBRARY命令。

像平常一樣運行ndk-build,但使用> out.txt將輸出重定向到文件。

這些是源文件和包含目錄,在主CMakeLists所在的項目的名爲'libusb'的子目錄中創建一個CMakeLists.txt文件,並開始配置文件並將其添加到庫目標。

set(USBLIB_SRC 
    ... # source files 
) 

set(USB_LIB_INC 
    ... # include dirs 
) 

# Copy these flags from the USBLib Android.mk 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__ANDROID__ -DANDROID -D(etc...)") 

add_library(libusb STATIC ${USBLIB_SRC}) 
target_include_directories(sexykanji PUBLIC ${USBLIB_INC}) 

然後,在主CMakeLists,包括 'libusb的' 目錄:

######################################################### 
# import libusb library 
######################################################### 
add_subdirectory(libusb) 

並加入我們之前設置你的target_link_libraries庫的名稱。


編輯:添加預建.so到CMakeLists。

include_directories(../../libusb/include ...) 
link_directories(
    ../../libusb/lib/${ANDROID_ABI}/ 
    ... 
) 

target_link_libraries(
         usb 
         ... 
) 

在搖籃文件中,defaultConfig內:

sourceSets{ 
     main { 
      // let gradle pack the shared library into apk 
      jniLibs.srcDirs += '../../libusb/lib/' 
     } 
    } 
+0

我已經走了下來CMake的路徑,但隨後就卡住試圖越過構建的libusb。 libusb tarball中的android幫助是基於.mk的。你能從CMakelists.txt調用一個.mk文件嗎? – bph

+1

不,但我過去所做的是通過破解Android.mk文件來生成文件列表,以便將'LOCAL_SRC_FILES'和'LOCAL_C_INCLUDES'中的文件吐出。我將編輯我的答案進行快速演示。 –

+0

記住我設法使用提供的.mk文件交叉構建libusb庫,是否可以在我的項目CMakeLists.txt中指定.so文件的位置並將它捆綁到apk文件?換句話說,也許我不必一次性構建它,我可以從我的項目中單獨構建libusb,然後確保我的項目知道它需要這個lib以及lib的位置? – bph

相關問題