我正在尝试编写一个使用OpenCL 1.2的短应用程序(不用于分发,因此通用访问不是问题)来进行计算.但是,OpenCL在Android上给我带来了一些麻烦.我的计算机上有libopencl.so文件和AMD SDK的1.2头文件.问题是:我如何正确使用它们?

在gradle(最新版本)构建文件中我指定了这个,或者有人可以推荐一个好地方让我转向阅读这个?或者,理论上我需要理解什么才能让我自己弄清楚 – 正确链接到OpenCL库需要什么?

apply plugin: 'com.android.model.application'

model {

android {

compileSdkVersion = 21

buildToolsVersion ="22.0.1"

defaultConfig.with {

applicationId = "com.example.thing"

minSdkVersion.apiLevel = 14

targetSdkVersion.apiLevel = 14

}

}

/*

* native build settings

*/

android.ndk {

moduleName = "otherThing"

ldLibs += "log"

ldLibs += "android"

//cFlags "~/OpenCL1-2HeaderFiles"

}

android.buildTypes {

release {

isMinifyEnabled = false

proguardFiles += file('proguard-rules.txt')

}

}

android.productFlavors {

create("arm") {

ndk.abiFilters += "armeabi"

}

create("arm7") {

ndk.abiFilters += "armeabi-v7a"

}

create("arm8") {

ndk.abiFilters += "arm64-v8a"

}

create("x86") {

ndk.abiFilters += "x86"

}

create("x86-64") {

ndk.abiFilters += "x86_64"

}

create("mips") {

ndk.abiFilters += "mips"

}

create("mips-64") {

ndk.abiFilters += "mips64"

}

create("all")

}

}

谢谢

解决方法:

这是一个相当复杂的过程.我会尽量保持简洁.

>要在Android上运行您的应用程序,AMD的libopencl.so将无法运行. OpenCL库必须与您的设备兼容.对于Android armv7设备,您需要一个由芯片供应商提供的OpenCL库,并使用armv7工具链进行编译.要在Intel Atom设备上运行,您需要由芯片供应商提供的库,并针对x86_32 arch进行编译.

基本上,对于您的问题,您有两种方法:

[方法1]从您拥有的设备中获取libOpenCL.so或libGLES_mali.so或libPVROCL.so.上面的lib名称对应于Adreno,Mali和PowerVR GPU.使用这些库来编译代码.

[方法2]在您的本机代码中,使用dlopen打开OpenCL库,然后使用dlsym将clBlaBla API映射到您自己的名称.例如,您可以将clGetDeviceInfo映射到myCLGetDeviceInfo.然后,在您自己的本机代码中,您可以调用myClGetDeviceInfo.这种方式要求您知道设备上opencl库的路径.例如,在Adreno GPU上,位置为/system/vendor/lib/libOpenCL.so.有关详细信息,请阅读其他帖子. Does Android support OpenCL?

方法2更通用,更优雅.方法1更简单,如果您清楚地知道应用程序将运行哪些设备,则更快.例如,如果您清楚地知道您的应用程序仅用于测试adreno gpus,那么您只需从测试设备中获取libOpenCL.so即可.然后用它来链接你的应用.此链接显示了如何执行此操作,并提供了示例代码.你可以从那里开始.

在使用Android studio方面.我只能评论这个:如果您了解在Android上编译OpenCL应用程序的要求.使用Android studio进行编译或直接使用ndk-build进行编译没有区别.语法可以从一个映射到另一个.

根据我的个人经验,我写了很多Android.mk文件,我已经习惯了.所以,即使现在我使用Android Studio进行开发.您链接的文章中的方法实际上是正确的.

但是,我仍然像往常一样使用ndk-build来编译我的本机代码.这样,我可以完全控制那里发生的事情,我感觉更舒服.一旦我得到.so本机库,我把它放到src / main下的jniLibs文件夹中(你的文件夹结构可能不同). jniLibs是Android工作室将找到本机库的默认文件夹.您还可以在gradle脚本中指定自己的文件夹(在线大量文章,搜索gradle ndk).当然,所有上述操作都是通过脚本完成的(ndk-build,将库复制到某个文件夹).有了这些,我使用Android studio构建应用程序.通常,您不会同时调试JAVA代码并更改本机代码,因此执行上述操作完全可以并且非常舒适.如果要自动执行所有这些操作,可以请求gradle在构建应用程序之前启动您编写的ndk构建脚本.或者你可以让gradle以你喜欢的方式运行ndk-build命令(这实际上是由很多开发人员使用的).

希望这是有帮助的.欢迎任何进一步的讨论.

标签:android,android-gradle,android-studio,build-gradle,opencl

来源: https://codeday.me/bug/20190824/1709090.html

android opencl sdk,在新的Android Studio中使用OpenCL相关推荐

  1. 解决android应用程序适用新老android系统版本方法

    老的android系统不能运行高版本系统的新方法,为了解决这个问题:  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ...

  2. win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程

    Win8下Android SDK的安装与环境变量配置,具体内容如下 1.下载Android SDK,点击安装,直接默认路径即可! 进入该网站后往下拉就能找到sdk下载的位置,选择图中红圈的程序进行下载 ...

  3. Android封装sdk页面为h5,Android/H5混合 SDK 集成文档

    Android /H5 混合SDK 该SDK用于Android Hybrid 模式下,H5页面的以下情形: * 用户以app或单个设备为单位,进行H5页面的试验 * 离线缓存模式H5页面的试验 SDK ...

  4. android adk -(sdk),arm cortex-M4 连接android adk2012

    最近用Freescale 的cortex-M4 K60 MCU 做accessory 连接android 手机, K60这款M4 非常强大,丰富的外围设备,特别是免费的开源实时操作系统MQX , 加上 ...

  5. 探索Android 9.0 Pie新特性变更

    北京时间 8 月 7 日上午,Google 正式发布 Android 9.0 正式版系统,并宣布系统版本 Android P 被正式命名为代号「Pie」. 目前,Google 已向全球 Pixel 设 ...

  6. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  7. 通过 Android SDK Manager 安装面向 Android* 模拟器插件的英特尔® 凌动™ x86 系统映像...

    作者:hernan-alijo Android* x86 模拟器映像插件要求安装 Android SDK.有关 Android SDK 安装说明,请参考 Android 开发人员网站 (http:// ...

  8. android10安装包,设置 Android 10 SDK

    Android 10 是一个主要版本,包含可用于扩展应用的各种特性和功能.Android 10 还提供了行为变更(针对以 Android 10 为目标平台的应用和所有应用)以及隐私权变更,有助于延长电 ...

  9. Android Pie 引入 Keystore 新特性,安全防护再升级

    作者: Lilian Young 和 Shawn Willden, Android 安全团队:Frank Salim, Google Pay 团队 我们希望更深入的了解您的开发实践与体验,以便为您构建 ...

  10. android 第三方社区,从友盟微社区看Android第三方SDK架构实践

    原标题:从友盟微社区看Android第三方SDK架构实践 开发Android第三方SDK说难不难,但说简单也不简单,要开发一个给很多人使用的第三方SDK,如何在保证稳定性的同时,增强SDK的灵活性,让 ...

最新文章

  1. linux centos7 开机自动登录
  2. 0基础学python-从0开始学Python,0基础小白
  3. servlet中的几个路径有关的方法
  4. PHP的mysqli操作DB
  5. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM
  6. Windows下安装并设置Redis
  7. linux 常用工具
  8. Asp.Net WebForm生命周期的详解
  9. oracle tovarchar2_oracle数据库中varchar2陷阱
  10. python时间序列滞后命令,时间序列-相关性和滞后时间
  11. C++ STL基本概念 学习笔记
  12. # 20155224 第十一周 课堂练习《计算后缀表达式的值》
  13. iOS 人民币符号与日圆符号的混淆
  14. Tortoise SVN 如何汉化(最简单的处理方式,一看就会)
  15. 白话空间统计三十:地统计学(2)前提假设
  16. Hosts文件与域名解析
  17. dreamweaver网页设计作业制作 学生个人网页单页 WEB静态网页作业模板 大学生个人主页博客网页代码 dw个人网页作业成品
  18. 小游戏开发引擎CocosCreator
  19. 大学语言c 离线作业,大学语文C离线作业(2013下).doc
  20. 浏览器饿了么cookie提取

热门文章

  1. 互评成绩 c语言,1077 互评成绩计算 (C语言)
  2. python输出个数、给定一个n*n的矩阵m_简述Numpy
  3. python标准输入多行文字_python如何输入多行数据
  4. jquery导入数据_python大数据实践之三:对分析结果可视化呈现
  5. es统计有多少个分组_ElasticSearch 分组查询的几个例子
  6. python如何开发一个程序思路_用python编写一个合格的ftp程序,思路是怎样的?
  7. 1核2g服务器能干什么_国内哪个云服务器比较便宜性价比高?大家有什么好推荐...
  8. unity将预制体写成fbx_unity 将fbx转成prefab
  9. Java中VO/DTO/DO/PO/POJO/BO/DAO概念及其区别
  10. php面试专题---1、php中变量存储及引用的原理