NDK

ubuntu+ndk编译ffmpeg

a 夏天 提交于 2021-02-10 07:35:18
近来想把ffmpeg移植到android上来用,所以就研究了两天,从网上乱搜一通,网上都说在linux系统下比较好编译通过,所以就听取了意见,装了vmware在里面装了个ubuntu13.04的64位系统,紧接着我就迫不及待的 http://developer.android.com/tools/sdk/ndk/index.html 下载了 android-ndk-r9b-linux-x86_64.tar.bz2在ubuntu系统下配置好了NDK的环境变量,又从ffmpeg官网下载了ffmpeg2.0.1版本的源码,可是按照:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ 这个教程搞了一天都没编译通过,老是报一些莫名奇妙的错误: “找不到所在目录和文件 ”。 可能是我那个地方配置的不对吧。要就有那位兄弟用这个教程编译ffmpeg成功生成libffmpeg.so文件的告诉我一声。 这个方法不行那就换个方法喽!看到网上说ffmpeg不同版本编译方式也有所不同,既然这样的话,我就换了一个低版本的ffmpeg0.8.1。下载此版本的链接为:http://www.ffmpeg.org/releases/ffmpeg-0.8.1.tar.gz 同样ndk也换了个低版本的。下载链接为:http://dl.google.com

Android下使用JNI & NDK (1)

ぐ巨炮叔叔 提交于 2020-12-27 00:19:37
说明 :前提是安装好 NDK 使用环境,安装过程网上很多,搜一下即可,Win或Linux都行。 1.首先新建一个Android工程。 2.新建一个类,存放本地方法的声明(这一步可有可无,直接放在使用该方法的类中也行) package a.b; public class JniMethod { public native void sayHello(); public native String getSomeWords(); } 3.生成头文件(这一步建立在已经有class文件) 在命令行中(cygwin或windows自带都行),进入工程所在目录,比如: cd /cygdrive/e/androidSource-1/HelloJni_02 //进入目录 mkdir jni //创建jni目录 javah -d jni/ -classpath bin/classes a.b.JniMethod //生成头文件 -d jni 表示存放到jni目录 -classpath 制定class文件所在目录 生成的头文件如下: #include "a_b_jnimethod.h" JNIEXPORT void JNICALL Java_a_b_JniMethod_sayHello (JNIEnv *, jobject ){ } /* * Class: a_b_JniMethod * Method

从NDK在非Root手机上的调试原理探讨Android的安全机制

穿精又带淫゛_ 提交于 2020-05-06 02:21:19
最近都在忙着研究Android的安全攻防技术,好长一段时间没有写博客了,准备回归老本行中--Read the funcking android source code。这两天在看NDK文档的时候,看到一句话“Native debugging ... does not require root or privileged access, aslong as your application is debuggable”。咦,NDK调试不就是通过ptrace来实现调试的么?在非Root的手机上是怎么进行ptrace的呢?借这两个问题正好可以介绍一下Android的安全机制。 老罗的新浪微博: http://weibo.com/shengyangluo ,欢迎关注! Android是一个基于Linux内核的移动操作系统。Linux是一个支持多用户的系统,系统中的文件的访问权限是通过用户ID(UID)和用户组ID(GID)来控制的。换句话说,就是Linux的安全机制是基于UID和GID来实现的。Android在Linux内核提供的基于UID和GID的安全机制的基础上,又实现了一套称为Permission的安全机制,如图1所示: 图1 Linux的UID/GID安全机制与Android的Permission安全机制 那么,这两个安全机制是如何对应起来的呢?

[NodeJS for Android]完美编译大全

℡╲_俬逩灬. 提交于 2020-04-27 11:37:09
NodeJS for Android完美编译大全 完美地编译了NodeJS for android-{arm,arm64,x86,x64,mipsel},并且提供预编译版,和作为持续编译环境的Docker image。 完美, 意思是不去掉任何功能(不加 --without-... 选项),尽量不修改任何源码(包括编译设定文件)。 借助工具 android-gcc-toolchain 实现了这个目标。见 Full Build )。这个工具 让人快捷地使用NDK的独立toolchain做交叉编译,并且有些奇妙的功能。 编译好了的二进制文件(arm,arm64,x86,x64,mipsel构架) 可以直接下载。 一个编译环境用的Docker image osexp2000/build-nodejs-for-android 可以用来按自己的需求编译. 见 Docker Images . 由头 交叉编译,是个不大不小的土活儿,很无聊,很干扰正题。 一开始我也没想要搞什么完美编译,我只是因为对 NDK有怨念 , 所以做了个辅助工具 android-gcc-toolchain ( 这里有简单介绍 ), 以便顺利地做交叉编译。于是一般的交叉编译过程变轻松了之后,就凸显出NodeJS的编译错误了。 编译NodeJS for Android,目前都是去掉某些功能,或者修改源码里的编译设定

使用libjpeg进行图片压缩

空扰寡人 提交于 2020-04-07 21:26:25
简介 由于工作原因,boss下达的任务就大概说了对图片进行压缩寻找比较合理的方式,还举了一个项目中的坑,就是系统原生的Bitmap.compress设置质量参数为100生成图片会变大的坑。所以我打算用一点时间研究研究Bitmap在内存和外存中的情况。首先需要对图片进行压缩,大家都知道图片是Android里面一个大坑,具体的问题有: OOM,一不留神就用OOM来冲冲喜,所以网上就有了很多解决oom问题的建议,但是由于网友的水平不一也导致建议参差不齐。(内存) 图片压缩再加载失真严重,或者压缩率不够达不到项目要求的效果。(外存) 那我今天就要解决的就是通过今天查阅的资料和自己的判断,还有实践归档一下图片在Android上的问题。并且给出自己解决图片压缩问题的解决方案和实际操作。 1、为什么Android上的图片就不如IOS上的? libjpeg是广泛使用的开源JPEG图像库,安卓也依赖libjpeg来压缩图片。但是安卓并不是直接封装的libjpeg,而是基于了另一个叫Skia的开源项目来作为的图像处理引擎。Skia是谷歌自己维护着的一个大而全的引擎,各种图像处理功能均在其中予以实现,并且广泛的应用于谷歌自己和其它公司的产品中(如:Chrome、Firefox、 Android等)。Skia对libjpeg进行了良好的封装,基于这个引擎可以很方便为操作系统、浏览器等开发图像处理功能。

利用NDK崩溃日志查找BUG

一个人想着一个人 提交于 2020-04-07 07:57:59
06-20 15:54:35.331 23889 23889 I DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 06-20 15:54:35.331 23889 23889 I DEBUG : Build fingerprint: 'google/razorg/deb:4.4.2/KOT49H/937116:user/release-keys' 06-20 15:54:35.331 23889 23889 I DEBUG : Revision: '0' 06-20 15:54:35.331 23889 23889 I DEBUG : pid: 1981, tid: 2020, name: Thread-3399 >>> com.guangyou.ddgame <<< 06-20 15:54:35.331 23889 23889 I DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000028 06-20 15:54:35.431 187 710 D audio_hw_primary: out_set_parameters: enter: usecase(0: deep-buffer-playback)

分析安卓ANR tombstone使用ndk-stack addr2line

断了今生、忘了曾经 提交于 2020-04-07 07:56:34
刷机过程中会碰到很多crash问题,此时安卓会在/data/tombstones目录下保存9个session文件,如下 root@android:/ # find . |grep tombs ./data/tombstones ./data/tombstones/tombstone_00 ./data/tombstones/tombstone_01 root@android:/ # 每个tombstone文件里包含如下信息: Build fingerprint Crashed process and PIDs Terminated signal and fault address CPU registers Call stack Stack content of each call 下面讲述怎么使用ndk-stack和addr2line来跟踪tombstone文件里的错误信息: 1、安装NDK,设置环境变量 export ANDROID_NDK_PATH=/home/bytesthink/tools/android-ndk-r8d/ PATH= $ANDROID_NDK_PATH:$PATH 2、执行ndk-stack命令,其中--sym指向AOSP编译目录中符号路径 --dump指向要调试的tombstone文件 bytesthink@ubuntu:~/tools/android

NDK调试之ndk-stack

三世轮回 提交于 2020-04-07 02:39:37
ndk-stack 工具使你能够在 stack traces 出现在 adb logcat 的输出中时过滤 它们。它也能将一个共享库中的任何地址替换为你的源码中的对应 <source-file>:<line-number> 值,以使问题能够更精确的描述。 比如,它能够将类似于下面的这些东西: I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys' I/DEBUG ( 31): pid: 351, tid: 351 %gt;%gt;%gt; /data/local/ndk-tests/crasher <<< I/DEBUG ( 31): signal 11 (SIGSEGV), fault addr 0d9f00d8 I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8 I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44 I/DEBUG ( 31): r8

Android android problem

不羁的心 提交于 2020-04-05 16:45:53
{ 目录 一、Mac下de的java路径 二、android studio的编译命令 三、在cocos3.1.5中 android-studio中的build-cfg.json找不到了 四、导入第三方jar包: 五、 文件同步 Synchronize 六、找不到libs文件夹 七、android studio打包不同cpu架构的so文件 八 、 如何解决Unable to get CMake version编译问题 九、 Android Could not find method ndk 十、 Your project contains C++ files but it is not using a supported native build system 十一、 cocos run 安卓apk制作 AppDelegate.h 找不到 十二、 Suggestion: add 'tools:replace="android:icon"' to element 十三、 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap; 十四、自动导入包名 十五、 用AS直接连接到手机上能运行,安装apk就运行报错? 十六、更改版本号 十七、在cocos中 用 android

android studio NDK配置

喜你入骨 提交于 2020-04-01 13:07:29
向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运行示例应用 向现有项目添加 C/C++ 代码 创建新的原生源文件 创建 CMake 构建脚本 将 Gradle 关联到您的原生库 搭配使用 Android Studio 2.2 或更高版本 与 Android Plugin for Gradle 版本 2.2.0 或更高版本 时,您可以将 C 和 C++ 代码编译到 Gradle 与 APK 一起打包的原生库中,将这类代码添加到您的应用中。您的 Java 代码随后可以通过 Java 原生接口 (JNI) 调用您的原生库中的函数。如果您想要详细了解如何使用 JNI 框架,请阅读 Android 的 JNI 提示 。 Android Studio 用于构建原生库的默认工具是 CMake。由于很多现有项目都使用构建工具包编译其原生代码,Android Studio 还支持 ndk-build 。如果您想要将现有的 ndk-build 库导入到您的 Android Studio 项目中,请参阅介绍如何配置 Gradle 以 关联到您的原生库 的部分。不过,如果您在创建新的原生库,则应使用 CMake。 本页面介绍的信息可以帮助您使用所需构建工具设置 Android Studio、创建或配置项目以支持 Android 上的原生代码