Android的CPU架构

手机CPU架构查询
需要在Android studio中的项目里打开Device File Explorer,找到proc文件,点击cpuinfo文件

1、JNI的全称是Java Native Interface

JNI是java平台的一部分,Java无法直接调用系统操作,1)通过可以实现与其他语言进行交互。如:c/c++
JNI的接口函数和指针:
native代码想要访问 java虚拟机需要调用JNI方法,而获取JNI方法则通过 JNI interface Pointer。它实际指向的就是一个都是指针的数组,每个指针指向的都是一个接口函数
• JNI 命名和native code书写分开,避免硬编码
JNI interface Pointer 只在当前线程有效,即native 方法不能在线程之间传递(不同线程的指针可能不一
样),VM保证同一个线程中调用多次JNI interface Pointer是同一个
对应不同的系统打包的后缀名会有所不同,solaris系统一般是.so windows系统则是.dll 如果当前系统不支持动态连接,所有的Native方法必须预先和VM建立连接,通过System.loadLibrary是无法自动加载。如果要静态连接可以使用 JNI的函数 RegisterNatives
Native方法名
(1)生成规则:Java_ 作为前缀,类的全路径名,用 “_” 分隔每一个目录名,再加上 方法名,如果是重载的方法,则会添加 “__”和
方法签名,比如: 全路径是:com.study.jnilearn.HelloWorld,生成的方法是 Java_com_study_jnilearn_HelloWorld_sayHello:
(2)查找规则:VM查找native library里面的方法名,首先查找短的名字,即方法名没有参数签名;然后查找有参数签名的方法;长方法名只有在native方法重载了另一个native方法的时候需要
Native的方法参数:
第一个参数是JNI Interface pointer(类型是 JNIEnv),如果是静态native方法,第二个参数则是对应java class的引用,非静态的native则对应的是 对象的引用,其它的参数对应的是java方法的参数

2、Android中so文件加载流程
调用.so文件有两种方案:
一、首先需要把so文件放到libs文件夹中,调用System.loadLibrary方法加载工程中的libs目录下默认的so文件,需要注意的是该文件名会自动生成lib。比如加载文件名是aaa,而整个so文件名为libaaa.so
还有一种是加载指定的目录下的so文件,使用System.load方法,这里加载的文件名是全路径,比如xxx/xxx/libxxx.so

二、创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用androidNDK开发包中的ndk-build脚本生成对应的.so共享库
第二种方案,是自己引用so库,最后声称JAR。
解决方案:首先看这个so文件是不是JNI规范的so,有没有返回JNI不直接支持类型,不支持的话需要选择第二种方案,怎么看能不能从JAVA调用,就是看so里的函数名是不是Java_XXX_XXX_XXX格式

三、解决A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 9269的问题
看提示,是在C++代码里使用了某个Java层的对象,而这个Java层的对象已经被释放了。
重点检查一下由Java层往Native传递的object 。
这种情况发生在将一个activity contect传到Native层时发生比较多, 应该传一个getApplicationContext. Activity可能被destory, application context 不会。
3、Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法
原因:.so中函数声明涉及到的package name和class name与调用它的package name和class name不符。
解决方法:改变工程中的package name和class name,使其与.so文件中函数签名提示的一致。
4、Android 目前支持的7中cpu类型

Json格式数据转为encodeURL编码()
5、android-android studio 推送项目代码到git码云报错:
Push to origin/master was rejected解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值