Oli*_*ree 4 android cmake android-studio
我正在尝试在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.
Run Code Online (Sandbox Code Playgroud)
我递归地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)
Run Code Online (Sandbox Code Playgroud)
我已经管理libpng使用android NDK应用程序(CMake构建系统而不是Android.mk)作为静态库.我用过libpng-android重新包装.这是我做过的事情:
git clone https://github.com/julienr/libpng-android.git进${YOUR_LIBS_FOLDER}(我用过${ANDROID_NDK_ROOT_DIRECTORY}/sources/android).${ANDROID_NDK_ROOT_DIRECTORY}(home/username/Android/sdk/ndk-bundle对我来说)添加到$PATH构建脚本所需的全局变量中.ndk-build(./build.sh在lib目录中有).图书馆将针对不同的建成ABI目标(arm64-v8a,armeabi,x86_64等).${YOUR_LIBS_FOLDER}/libpng-android/jni,并libpng.a在${YOUR_LIBS_FOLDER}/libpng-android/obj/local/${ANDROID_ABI}/其中${ANDROID_ABI}为目标平台.CMakeLists.txt.libpng需要zlib压缩库,所以你需要链接它(zlib也是由android studio提供,所以只需添加-lz标志).这是我的相关内容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)
Run Code Online (Sandbox Code Playgroud)
那里有几点需要注意:
${ANDROID_ABI} 是由Android Studio构建系统设置的变量.libpng z的,而不是libpng在target_link_libraries.使用 Android Studio 3.6,将 libpng 包含到您的项目中相当容易。
\n\norg.libpng.libpng,与 MacOS 相同)。保持 Java,并选择适合您的应用程序的最小 SDK。在pngAndroid的中build.gradle,添加
android.defaultConfig.externalNativeBuild.cmake.targets "png_static"\nRun Code Online (Sandbox Code Playgroud)在“项目结构”对话框中,指定 Module 和pngAndroid之间的模块依赖关系。
当您构建pngAndroid模块时,您将在pngAndroid下的build/intermediates/cmake/debug/obj目录中看到文件libpng16d.a。
\n\n在您的模块中,您还有CMakleLists.txt。在此脚本中,您有一个目标,例如
\n\nadd_library(native-library SHARED \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n您应该添加libpng作为native-library的依赖项:
\n\ntarget_link_libraries(native-library libpng)\nRun Code Online (Sandbox Code Playgroud)\n\n在此CMakleLists.txt 的其他位置,您应该定义导入的libpng:
\n\nadd_library(libpng STATIC IMPORTED)\nset_target_properties(libpng PROPERTIES IMPORTED_LOCATION\n ../pngAndroid/build/intermediates/cmake/debug/obj/${ANDROID_ABI}/libpng16d.a)\nset_target_properties(libpng PROPERTIES INTERFACE_INCLUDE_DIRECTORIES\n ../../lpng1637)\nset_target_properties(libpng PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES\n z)\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,此处我使用了a)到您添加到 Android Studio 项目的pngAndroid模块的相对路径,以及b)到您下载的libpng源的相对路径。在您的设置中,相对路径可能不同。
\n\n为了完整起见,这里有一个用于pngAndroid的清理build.gradle脚本,用于构建共享库libpng16d.so:
apply plugin: \'com.android.library\'\n\nandroid {\n compileSdkVersion 29\n defaultConfig {\n minSdkVersion 16\n targetSdkVersion 29\n versionCode 1\n versionName "1.0"\n externalNativeBuild {\n cmake {\n arguments "-DSKIP_INSTALL_ALL=YES"\n targets "png"\n }\n }\n }\n\n externalNativeBuild {\n cmake {\n path file(\'../../lpng1637/CMakeLists.txt\')\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当您构建模块时,您会在build/outputs中获得一个aar文件,其中包含jni目录armeabi-v7a/libpng16d.so以及所有其他 ABI 变体。
最后,值得一提的是,Google正在开发一种更简单的本机包管理器。不幸的是,它仍然没有发布。
\n| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |