2017-06-02 33 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

相关问题