首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 2.3.2中的Android.mk Android.mk位置

Android 2.3.2中的Android.mk Android.mk位置
EN

Stack Overflow用户
提问于 2017-06-02 22:00:40
回答 1查看 1.4K关注 0票数 2

当在AndroidStudio2.3.2中生成具有NDK支持的新项目时,您将不再获得在Android.mk dir中自动生成的jni/文件。

现在,您可以在CMakeLists.txt dir中得到一个cpp/

再也没有jni/ dir了。

如果您仍然希望将Android.mk文件与ndk-build一起使用,而不是CMake,那么该文件到哪里去呢?

应该在cpp/ dir中创建它吗?

还是在app/ dir中与CMakeLists.txt相同?

如果您打算让Android自动构建本机共享库而不是显式运行CMakeLists.txt,那么如果您要创建一个Android.mk文件,就必须删除Android.mk文件吗?

更新-链接到第三方库:

我生成了一堆libusb .so文件,即

代码语言:javascript
复制
  ~/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

例如,mips64 64的内容如下:

代码语言:javascript
复制
~/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中,我的link_directories如下所示:

代码语言:javascript
复制
link_directories( ~/projects/third-party/libusb-1.0.21/android/libs/${ANDROID_ABI}/

我的target_link_libraries看起来是这样的:

代码语言:javascript
复制
target_link_libraries( # Specifies the target library.
                       usb-1.0 )

但我得到了链接错误:

代码语言:javascript
复制
~/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文件的模块不会对链接器错误有任何影响,对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-03 01:16:51

在build.gradle文件(应用程序)中,在defaultConfigbuildTypes的外部添加一个指向Android.mk文件的path

代码语言:javascript
复制
externalNativeBuild {
    ndkBuild {
        path file("../../gameSource/Android.mk")
    }
}

另外,考虑切换到CMakeLists。它的建造要快得多。

编辑:黑客Android.mk,以便当您运行ndk-构建它打印出一个文件列表,而不是构建库。

代码语言:javascript
复制
$(info "--sources--")
$(foreach file,$(LOCAL_SRC_FILES),$(info $(file)))
$(info "--headers--")
$(foreach file,$(LOCAL_C_INCLUDES),$(info $(file)))

然后在脚本结尾处注释掉BUILD_SHARED_LIBRARY命令。

像往常一样运行ndk-构建,但是使用> out.txt将输出重定向到一个文件。

这些是源文件和包含目录,在主CMakeLists.txt驻留的项目的子目录“libusb”中创建一个CMakeLists文件,并开始配置这些文件并将其添加到库目标中。

代码语言:javascript
复制
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‘目录:

代码语言:javascript
复制
#########################################################
# import libusb library
#########################################################
add_subdirectory(libusb)

并将前面设置的库的名称添加到您的target_link_libraries中。

编辑:将预构建的.so添加到CMakeLists。

代码语言:javascript
复制
include_directories( ../../libusb/include  ... )
link_directories(
    ../../libusb/lib/${ANDROID_ABI}/
    ...
)

target_link_libraries(
                        usb
                        ...
)

defaultConfig内部的Gradle文件中

代码语言:javascript
复制
    sourceSets{
        main {
            // let gradle pack the shared library into apk
            jniLibs.srcDirs += '../../libusb/lib/'
        }
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44338009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档