我正在尝试在 Windows 10 上使用 Android Studio 和 CMake 启动本机应用程序项目,但我一直坚持包含 libpng。
首先,这是我第一次看到 CMakeLists.txt 文件。我花了一天时间才弄清楚target_link_libraries(native-activity ... png)
不可能target_link_libraries(png native-activity ...)
因为所有错误消息都与未创建文件和由于缺少工具链要求而导致命令失败有关(为什么基本错误位于列表末尾?不酷!)。
最终设法将 libpng 包含在项目中后,我现在收到构建错误:
Error:Execution failed for task ':app:externalNativeBuildDebug'.
...
error: unknown target CPU 'armv5te'
CMake Error at scripts/genout.cmake:78 (message):
Failed to generate
C:/APP_PATH/app/libpng-1.6.28/build/scripts/symbols.out.tf1
ninja: build stopped: subcommand failed.
我已经递归地 grep 了我的项目、.android、.AndroidStudio2.2 目录以及文件名,除了 genout.cmake 之外,在armv5te中什么也没找到。我的 abiFilters 系列是abiFilters 'x86'
.
如何构建 libpng 以链接到我的本机应用程序?此外,在 Android Studio 中,它显示该项目现在包含 libpng 源文件(至少有 9 个项目专用于它!)。有什么办法可以去除吗?
这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.4.1)
# build native_app_glue as a static lib
add_library(app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
set(png_src_dir ../../../../libpng-1.6.28)
set(PNG_STATIC ON)
add_subdirectory(${png_src_dir} ${png_src_dir}/build)
# now build app's shared lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")
add_library(native-activity SHARED
main.cpp logger.cpp logger.h game.cpp game.h
shaders.cpp shaders.h assets.cpp assets.h)
target_include_directories(native-activity PRIVATE ${ANDROID_NDK}/sources/android/native_app_glue
C:/devlibs/include
${png_src_dir})
# add lib dependencies
target_link_libraries(native-activity app-glue android log EGL GLESv2 png)
我已经管理 libpng 作为静态库与 android NDK 应用程序(CMake 构建系统而不是 Android.mk)一起使用。我用了libpng-android 重新打包。以下是我所做的事情:
-
git clone https://github.com/julienr/libpng-android.git
into ${YOUR_LIBS_FOLDER}
(我用了${ANDROID_NDK_ROOT_DIRECTORY}/sources/android
).
- Add
${ANDROID_NDK_ROOT_DIRECTORY}
(home/username/Android/sdk/ndk-bundle
对我来说)到全球$PATH
构建脚本所需的变量)。
- 构建库
ndk-build
(有./build.sh
对于带有 lib 的目录)。图书馆将针对不同的ABI目标(arm64-v8a
, armeabi
, x86_64
etc).
- 此时,您的库头位于
${YOUR_LIBS_FOLDER}/libpng-android/jni
and libpng.a
at ${YOUR_LIBS_FOLDER}/libpng-android/obj/local/${ANDROID_ABI}/
, where ${ANDROID_ABI}
是目标平台。
- 最后你可以将 lib 包含在
CMakeLists.txt
. libpng
需要zlib压缩库所以你还需要链接到它(zlib
由android studio提供,所以只需添加-lz
flag).
这是我的相关文章CMakeLists.txt
:
add_library(libpng STATIC IMPORTED)
set_target_properties(libpng PROPERTIES IMPORTED_LOCATION
${YOUR_LIBS_FOLDER}/libpng-android/obj/local/${ANDROID_ABI}/libpng.a)
add_library(appManager SHARED src/main/cpp/appManager.cpp)
target_include_directories(appManager PRIVATE ${YOUR_LIBS_FOLDER}/libpng-android/jni/)
target_link_libraries(appManager
android
libpng
z)
有几点需要注意:
-
${ANDROID_ABI}
是 Android Studio 构建系统设置的变量。
- 再次强调:你需要链接到zlib,这就是为什么我们有
libpng z
代替libpng
in target_link_libraries
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)