随笔分类 - NDK
摘要:一、不同CPU架构之间的兼容性 Android 设备上不同CPU的架构兼容性如下图所示: 但是需要指出的是,以兼容模式运行会存在一些问题: 兼容模式运行的Native库无法获得最优性能。 兼容模式下运行会出现一些难以排查的内存问题。 系统会优先加载对应架构目录下的so库,当so库不全时,会导致一些C
阅读全文
摘要:一、CMake 介绍 CMake是一个跨平台的安装/编译工具,通过CMake我们可以通过简单的语句来描述所有平台的安装/编译过程。它能输出各种makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。Cmake 并不直接建构出最终的软件,而是产生标准的
阅读全文
摘要:在进行Android NDK开发的时候, 因为代码编写导致崩溃的问题时有发生,但是问题在于,Native层的崩溃日志,如果只看LogCat输出的内容,我们会发现,根本无法进行分析和处理,因为日志内容中都是一大堆的内存地址信息。 原始错误日志: 2020-08-20 18:04:01.149 2712
阅读全文
摘要:如果你的C++代码中出现了很多C++特有的库,例如<iostream>,<list>等,那么你还需要在jni的文件夹下添加一个Application.mk文件,文件内容为: APP_STL := stlport_static APP_STL := gnustl_static 示例 Applicati
阅读全文
摘要:一、Android.mk Android.mk分为一下几部分: LOCAL_PATH:= $(call my-dir), 返回当前文件在系统中的路径,Android.mk文件开始时必须定义该变量。 include $(CLEAR_VARS), 表明清楚上一次构建过程中的所有全局变量,因为在一个Mak
阅读全文
摘要:我们配置好NDK环境后,基本可以看到其目录结构如下图: 下面我们来分析一下NDK根目录的结构: ndk-build:该Shell脚本是Android NDK构建系统的起始点,一般在项目中仅仅执行这一个命令就可以编译出对应的动态链接库库了。 ndk-gdb:该Shell允许用GUN调试器调试Nativ
阅读全文
摘要:一、概述 当 Java 调用 native 方法时,虚拟机是怎么知道该调用 so 中的哪个方法呢?这就需要用到注册了,通过注册,将指定的 native 方法和 so 中对应的方法绑定起来(函数映射表),这样就能够找到相应的方法了。 native 方法的注册方式分为静态注册 和 动态注册 两种。默认的
阅读全文
摘要:最近项目中遇到了要使用JavaCV的情况,涉及到了abi兼容的选择。因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个。但是今天在x64-v8a的模拟器上看的时候,提示我的library.so文件找不到,我记得这个应该是向下兼容的,但
阅读全文
摘要:一、从C/C++层调用JAVA层代码(无参数调用) //在c代码里面调用java代码里面的方法 // java 反射 // 1 . 找到java代码的 class文件 // jclass (*FindClass)(JNIEnv*, const char*); jclass dpclazz = (*e
阅读全文
摘要:版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/6925810.html 首先编写Jni接口的c文件,此文件命名有些特殊,具体的命名方式可以参考文档来做。 #include <jni.h> #include <string.h> #include <stdi
阅读全文