在 Windows 上使用 CMake 在 Android Studio 中构建+链接 libpng

2023-12-06

我正在尝试在 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 重新打包。以下是我所做的事情:

  1. git clone https://github.com/julienr/libpng-android.git into ${YOUR_LIBS_FOLDER}(我用了${ANDROID_NDK_ROOT_DIRECTORY}/sources/android).
  2. Add ${ANDROID_NDK_ROOT_DIRECTORY} (home/username/Android/sdk/ndk-bundle对我来说)到全球$PATH构建脚本所需的变量)。
  3. 构建库ndk-build(有./build.sh对于带有 lib 的目录)。图书馆将针对不同的ABI目标(arm64-v8a, armeabi, x86_64 etc).
  4. 此时,您的库头位于${YOUR_LIBS_FOLDER}/libpng-android/jni and libpng.a at ${YOUR_LIBS_FOLDER}/libpng-android/obj/local/${ANDROID_ABI}/, where ${ANDROID_ABI}是目标平台。
  5. 最后你可以将 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(使用前将#替换为@)

在 Windows 上使用 CMake 在 Android Studio 中构建+链接 libpng 的相关文章

  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • Service 和 IntentService,运行从服务器轮询数据库值的服务哪个更好?

    我读过很多关于Service and IntentService 然而 当做出决定时 我没有足够的信心选择使用哪种类型来创建一个后台服务 该服务将在一定时间间隔内从数据库轮询数据 并在获得所需数据时停止它 因为数据代表请求的状态 例如 订购
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • 如何在android线性布局上获得阴影? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在android中为View设置阴影 https stackoverflow com questions 4406524 how to set shadow to a view in androi
  • 如何为发布而不是调试创建密钥库?扑

    我按照使用此网站部署 flutter 的步骤进行操作https flutter io android release https flutter io android release 当我运行 flutter build apk 时出现此错
  • 即使不在 Windows 上,生成器表达式也会将 WIN32 变量计算为 true

    我在 Ubuntu 上工作 这是我的 CMake 代码的一部分 有问题的部分在最后一句中 include ExternalProject ExternalProject Add fftw3 external URL http www fft
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 您的 Android SDK 丢失、过期或损坏

    I tried to install android studio after installing Java SE 9 version an get this error 文件 gt 设置 gt Android SDK gt 你可以看到
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈

随机推荐

  • 如何处理ajax调用的json响应

    我的网络服务返回一个 JSON 对象 如下所示 abc xyz option 3 即当我将此地址放入 Chrome 浏览器中时http localhost 8088 rest getOptions我得到上面 我正在尝试在浏览器中阅读此内容
  • 滚动线性回归

    我需要一次执行 X 个周期的滚动线性回归 我有以下熊猫数据框 value 0 4354 1 7564 2 657 3 7876 我可以使用 scipy 对整个数据框执行线性回归 如下所示 from scipy import stats sl
  • 使用 AzureReader2 插件的 Azure ImageResizer 无法调整大小

    EDIT 我让它工作 但我必须添加 RemoteReader 插件 当我从项目中删除 AzureReader2 插件时 它仍然可以工作 这是有道理的 但是 AzureReader2 插件对我有什么好处 原问题 我已经完成了概述的所有事情he
  • js中如何实现排序?

    我有一个像这样的数组 var temp rank 3 name Xan rank 1 name Man rank 2 name Han 我试图按如下方式对其进行排序 temp sort function a a rank 但它不起作用 任何
  • Apache / Tomcat 中使用 mod_jk 的多个子域

    我目前正在尝试为从一台 Tomcat 服务器运行的两个单独的应用程序设置两个子域 但我很难让它继续下去 如果没有子域 我可以为一个虚拟主机配置两个挂载点 并能够以这种方式访问 应用程序 看起来像 http url confluence 但这
  • Java中如何访问一个对象的父对象?

    看看这个例子 class Parent Child child new Child Random r new Random class Child public Child access a method from Random r fro
  • jQuery 检查图像是否已加载

    我需要有关以下不起作用的代码的帮助 var timeoutID 0 var currentImage 0 first image is position 0 in arrImages array var arrImages bla bla
  • 声明变量时出现 NoSuchMethodError

    我在使用 Spark 和 Scala 时遇到了一个奇怪的错误 我有一段声明变量的代码 var offset 0 这会导致以下异常 java lang NoSuchMethodError scala runtime IntRef create
  • 了解包 geosphere 中 `areaPolygon()` 的输出

    From 这个问题我获得了很棒的功能areaPolygon 这给了我坐标多边形内的区域 然而 当我尝试该函数时 计算结果似乎很奇怪 我首先创建一组两点 require fields coords lt c 11 3697193956209
  • PHP exec() 通过浏览器执行时不会执行 shell 命令

    我有一个 PHP 脚本 它调用 exec 来执行将 PDF 转换为 JPG 的命令 该命令在 bash 中运行良好 为了抢占您最初的故障排除猜测 请注意以下事项 安全模式 关闭 包含 PDF 和脚本的目录的权限设置为 777 该目录也是写入
  • 如果Mysql复制时Master和Slave有不同的数据库,如何重新同步Mysql DB?

    Mysql Server1正在运行为MASTER Mysql Server2正在运行为SLAVE 现在数据库复制发生在MASTER to SLAVE Server2从网络中删除并在 1 天后重新连接 此后主库和从库的数据库不匹配 如何重新同
  • 将 Dictionary 转换为 IDictionary

    我有一个包含参数字典的类 public class Parameter IExecutionParameter IDesignerParameter public interface IExecutionSettings IDictiona
  • 如何获取本地网络内访问 ASP.NET Intranet 页面的用户的用户名?

    我们有一个 ASP NET Intranet 站点 可供物理上并登录到本地计算机的用户或通过 VPN 远程连接的用户使用 有没有一种方法可以根据用于登录本地计算机或用于 VPN 的名称自动获取访问该页面的用户的用户名 如果您在页面中使用 W
  • 是否可以删除mobile safari虚拟键盘中的表单助手?

    对于单一表单 UI 移动 safari 虚拟键盘中的表单助手没有提供太多价值 并且会减少视口中的可用空间 对于无法从中受益的表单 是否可以删除键盘的这一部分 本质上 您必须等到键盘响应 然后用力抓住并移除顶部的栏 它并不漂亮 也绝对不完美
  • C 程序未正确添加浮点数

    我有一个看起来像这样的方法 float mutate float organism int i float sign 1 static float newOrg INPUTS 0 for i 0 i
  • 继承自 DbSet ,目的是添加属性

    有没有办法继承DbSet 我想添加一些新属性 如下所示 public class PersonSet DbSet
  • 如何在 HTML5 画布上绘制多边形?

    我需要知道如何在画布上绘制多边形 不使用 jQuery 或类似的东西 创建一个路径moveTo and lineTo 现场演示 var ctx canvas getContext 2d ctx fillStyle f00 ctx begin
  • 显示mysql计数功能? [复制]

    这个问题在这里已经有答案了 query select count from relationships where leader user id result mysql query query 我怎样才能显示计数 谢谢 count mys
  • 会话不活动弹出窗口中的“注销”链接

    如何在 liferay 中弹出的会话不活动弹出窗口中添加一个 注销 链接 目前 我们在该弹出窗口中没有任何超链接 我们只有警告消息 请帮助我如何解决这个问题 因为我是 liferay 的新手 谢谢 苏拉夫 解决方法如下 您可以在 Lifer
  • 在 Windows 上使用 CMake 在 Android Studio 中构建+链接 libpng

    我正在尝试在 Windows 10 上使用 Android Studio 和 CMake 启动本机应用程序项目 但我一直坚持包含 libpng 首先 这是我第一次看到 CMakeLists txt 文件 我花了一天时间才弄清楚target