Android NDK

[FFmpeg万能音频播放器]android CMake项目准备阶段(一)

大憨熊 提交于 2020-10-17 10:22:39
1.新建c++项目 2.配置NDK路径 这里建议配置NDK版本为:android-ndk-r15c 3.在SNKtool下安装CMake 4.新建Module 并且添加Module (这个module主要用来加载库与写jni) new ->Module FIle ->ProjectStructure 5.在新建的module中写Demo 也就是jni的java通信类 package com.example.myplayer; public class Demo { static { System.loadLibrary("native-lib"); System.loadLibrary("avutil"); System.loadLibrary("swresample"); System.loadLibrary("avcodec"); System.loadLibrary("avformat"); System.loadLibrary("swscale"); System.loadLibrary("postproc"); System.loadLibrary("avfilter"); System.loadLibrary("avdevice"); } public native String stringFromJNI(); public native String

Android平台利用OpenCL框架实现并行开发初试

自古美人都是妖i 提交于 2020-08-20 08:45:49
在我们熟知的桌面平台,GPU得到了极为广泛的应用,小到各种电子游戏,大到高性能计算,多核心、高并行化的GPU成为我们日常娱乐和科学研究必不可少的“利器”。同样,在近些年兴起的移动平台,诸如智能手机、平板电脑等,也日渐重视GPU在其应用中的作用。近几年,随着并行化的发展,越来越多的手持设备硬件厂商重视对并行化标准的支持和应用。这里,需要支持OpenCL这一开发运算标准,该标准以异构平台为目标,与CUDA、Direct Compute主要面向PC平台不同,因而得到了众多厂商的支持,如下表: 常见智能手机的硬件信息 款式 CPU型号 GPU型号 OpenCL支持 三星GalaxyS5 高通骁龙801(4核) Adreno330 是 Iphone5S 苹果A7(2核) Imagination PowerVR G6430 是 小米3 高通骁龙800(4核) Adreno330 是 魅族M3 三星5410(8核) Imagination SGX544 是 (主要是高通的产品) 而在国外的一些研究机构和学者也对智能手机、平板电脑这样的移动平台进行了并行化的研究,比如三星手机研究院和诺基亚研究院近几年就发表了很多关于这方面的资料;美国莱斯大学的学者Guohui Wang等人就对物品移除算法和SIFT算法进行了智能手机上的并行化实现。 并行计算已经在移动平台具备硬件条件和变成标准的支持

android 平台上使用opencl 调用gpu 进行加速

三世轮回 提交于 2020-08-20 08:42:32
其实去年就已经把Android上OpenCL的demo做出来了,但是由于种种原因一直没有开源– 嗯现在就不吝啬了~奉献给大家~ 后面在Android上还实现了很多种并行化的算法,比如SHA-1、HDR、K-means、NL-means、SRAD等等,会在近期整理好之后开源的。 原文发表在了 异构开发技术社区 整理成教程是队友做的,十分感谢~ 原博文地址 : 原文链接已经失效,无法查看了,好遗憾 队友的博客 项目github地址 代码CSDN地址 下面是干货: Android平台利用OpenCL框架实现并行开发初试 在我们熟知的桌面平台,GPU得到了极为广泛的应用,小到各种电子游戏,大到高性能计算,多核心、高并行化的GPU成为我们日常娱乐和科学研究必不可少的“利器”。同样,在近些年兴起的移动平台,诸如智能手机、平板电脑等,也日渐重视GPU在其应用中的作用。近几年,随着并行化的发展,越来越多的手持设备硬件厂商重视对并行化标准的支持和应用。这里,需要支持OpenCL这一开发运算标准,该标准以异构平台为目标,与CUDA、Direct Compute主要面向PC平台不同,因而得到了众多厂商的支持,如下表: 常见智能手机的硬件信息款式CPU型号GPU型号OpenCL支持 三星GalaxyS5高通骁龙801(4核)Adreno330是 Iphone5S苹果A7(2核)Imagination

深入浅出Android NDK之打印调用堆栈

随声附和 提交于 2020-08-12 08:12:53
目录 上一篇 深入浅出Android NDK之崩溃分析 为了能在native层打印函数的调用堆栈,找了好久的资料,最后终于找到一个靠谱的链接: https://www.jianshu.com/p/4a5eeeee6d29 主要通过调用_Unwind_Backtrace函数来获得函数的调用堆栈,但是原文的并不好用,地址通过addr2line转换以后得不到函数名和行号,主要原因我们得到的地址是运行时地址,应该减去SO的基地址再来转换,下面看我改造后的例子,更好用。 #include <unwind.h> #include <dlfcn.h> #include <vector> #include <string> #include <android/log.h> static _Unwind_Reason_Code unwindCallback(struct _Unwind_Context* context, void* arg) { std::vector<_Unwind_Word> &stack = *(std::vector<_Unwind_Word>*)arg; stack.push_back(_Unwind_GetIP(context)); return _URC_NO_REASON; } void callstackDump(std::string &dump) { std:

android-ndk-r15c libncurses.so.5

妖精的绣舞 提交于 2020-08-07 16:36:22
ndk build 的时候报错,少了libncurses.so.5 在ubuntu环境下,使用sudo apt install libncurses5安装 如果是adb,装32位的: ./adb: error while loading shared libraries: libncurses.so.5: from://http://stackoverflow.com/questions/10005907/eclipse-android-plugin-libncurses-so-5 sudo apt-get install libncurses5:i386 or sudo apt-get install lib32ncurses5 lib32stdc++6 来源: oschina 链接: https://my.oschina.net/u/4364157/blog/4335515

MNN编译android

末鹿安然 提交于 2020-08-07 10:55:45
MNN下交叉编译 参考: https://blog.csdn.net/Simplify_boy/article/details/105410235 https://blog.csdn.net/qq_37643960/article/details/99775939 Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR) MNN CMakeLists.txt CMakelist.txt 设置MNN_ARM82为ON (低精度需要的动态库) ndk vim ~/.bashrc 添加android-NDK export ANDROID_NDK=/$(path)/android-ndk-r21 $(path)为自己的路径 source ~/.bashrc` 编译 cd /path/to/MNN ./schema/generate.sh cd MNN/project/android mkdir build_64 && cd build_64 && ../build_64.sh make -j4 使用动态库 代码设置 // 创建session需要的配置 MNN::ScheduleConfig config; // 选择Backend config.type = MNN_FORWARD_CPU; //

win10 ndk hello_world

天涯浪子 提交于 2020-08-05 05:26:30
https://tieba.baidu.com/p/5213203060?red_tag=1988544260 用ndk编译用于安卓上运行的库hello_world.so. prerequisites: 1.安装好android-ndk-r12b或者其他版本,安装有android sdk 2.安装好MinGW与配件msys ndk msys 从网盘分享下载解压得hello_world.cpp、makefile两个文件 度盘1o7PIsAI密码g7dn 其中hello_world.cpp: #include <iostream> int main(int argc,char *argv[]) { for (int i=0;i<argc;i++) printf("argv[%d]=%s\n",i,argv[i]); return 0; } 是个回显命令行参数的简单程序。 配置makefile: 用notepad++打开,将其中的NDK_ROOT变量值改成你自己的ndk根路径。android SDK根目录变量PLATFROM_ROOT如是。 #makefile for hello_world NDK_ROOT=F:/COD/NVPACK/android-ndk-r12b TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux

精选火热Github项目推荐:xCrash,Android开发的你一定要用

北城余情 提交于 2020-07-28 12:35:30
xCrash xCrash 能为安卓 APP 提供捕获 java 崩溃,native 崩溃和 ANR 的能力。不需要 root 权限或任何系统权限。 xCrash 能在 App 进程崩溃或 ANR 时,在你指定的目录中生成一个 tombstone 文件(格式与安卓系统的 tombstone 文件类似)。 xCrash 已经在 爱奇艺 的很多安卓 APP(包括爱奇艺视频)中被使用了很多年。 特征 支持 Android 4.0 - 10(API level 14 - 29)。 支持 armeabi,armeabi-v7a,arm64-v8a,x86 和 x86_64。 捕获 java 崩溃,native 崩溃和 ANR。 获取详细的内存使用统计信息。 通过正则表达式设置需要获取哪些线程的信息。 不需要 root 权限或任何系统权限。 架构 捕获 native 崩溃 捕获 ANR 使用 1. 增加依赖 2. 指定一个或多个你需要的 ABI。 3. 初始化 xCrash。 Java Kotlin Tombstone 文件默认将被写入到 Context#getFilesDir() + “/tombstones” 目录。(通常在: /data/data/PACKAGE_NAME/files/tombstones) 在 src/java/xcrash/xcrash_sample 文件夹中

如何利用 release 版本的 backtrace 来定位 android NDK 程序的崩溃位置

早过忘川 提交于 2020-07-28 05:46:17
我们知道 android NDK 程序在崩溃时会生成一个 tombstone 的 backtrace (也可利用 ADB logcat 抓取),从这个 backtrace 中我们可以了解是哪个函数引发的崩溃,但是通常由于我们发布时都是 release 版,无法利用 backtrace 中的地址信息直接定位到源码和行号,当引发崩溃的错误不是很明显时,对于我们解决问题的帮助就不大。 这时通常我们是重编一个 debug 版本并设法重现 crash。这样做有两个问题,一是如果我们不知道复现步骤,或者复现概率很低时,效率不高;二是我们不一定总能满足 crash 产生的条件,而一旦版本发布后,使用 debug 版本去替换用户场景中的 release 版又非常麻烦(甚至可能无法实现)。 事实上,有一个办法可以解决这个问题。我们知道,release 版本的库文件也是有 DYNAMIC SYMBOL TABLE 的,你可以使用命令 objdump -T -R <your so> (并重定向到一个文本文件中)来查看,然后你可以用同样的命令去查看 debug 版本的 DYNAMIC SYMBOL TABLE,通过比较,不难发现,他们的格式是一样的,你需要关注的只是第一列(symbol address)和最后一列(symbol name)。 接下来,你在 debug 版本的 DYNAMIC SYMBOL

01 android ndk入门实例之android.mk编译

馋奶兔 提交于 2020-04-28 22:15:49
前言 1 环境 android studio2.3 , window系统 2 ndk https://dl.google.com/android/repository/android-ndk-r16-windows-x86_64.zip 3 采用android.mk编译方式 正文 1 正常新建一个android项目 2 右键项目选择Open Moduls Settings   1)设定好ndk的路径    2)指定开启ndk 3 android新加如下文件 具体代码如下 NdkJniUtils.java package com.jni.utils; /** * Created by user on 2017/11/22. */ public class NdkJniUtils { static { System.loadLibrary( "hello-jni" ); } public static native String stringFromJni(); }  hello-jni.c #include < string .h> #include <jni.h> jstring Java_com_jni_utils_NdkJniUtils_stringFromJni( JNIEnv * env,jobject thiz ) { return (*env)-