美文网首页
简单了解一下.so

简单了解一下.so

作者: 初心一点 | 来源:发表于2019-02-17 12:19 被阅读2次

做Android应用开发的同学接触NDK还是偏少的,但是第三方库引用多了,难免被NDK给坑个几次

今天就来对NDK做个概况了解

第一点:先认识一些文件

  1. .h头文件

写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):

#ifndef CIRCLE_H
#define CIRCLE_H

// 代码写在这里
// 这样做是为了防止重复编译,不这样做就有可能出错。
// 至于CIRCLE_H这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。
// 原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。
#endif
  1. .c文件是C源文件、.cpp文件是C++源文件
  1. 源文件(.cpp)主要写实现头文件中已经声明函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件
  2. .h文件和cpp文件也就是说,在h文件中声明Declare,而在cpp文件中定义Define。 “声明”向计算机介绍名字是什么意思。而“定义”为这个名字分配存储空间。无论涉及到变量时还是函数时含义都一样
  1. java代码如何跟.c、.cpp文件交互:
  1. .java文件编写。
  2. .class文件生成。
  3. 产生C头文件 *.h
  4. 编写jni实现代码 *.c
  5. 最终生成动态链接库 *.so
  6. 在JAVA代码中调用 System.loadLibrary("xxx")
  7. 然后java代码就可以调用native标识的方法了

第二点:NDK使用场景

  1. 引用第三方库(C、C++),因为大部分开源库都用C、C++开发。例如:opencv人脸识别、WebRTC等等
  2. 便于移植,方便一套代码Android,ios都可以使用
  3. 复杂算法的逻辑或加密逻辑可以用C、C++编写,避免java反编译的劣势

第三点:如何使用.so

在项目里使用SO库非常简单,只需要把需要用到的SO库拷贝进 jniLibs(或者Eclipse项目里面的libs) 中,然后在JAVA代码中调用 System.loadLibrary("xxx") 加载对应的.so,就可以使用JNI语句调用SO库里面的Native方法了

第四点:使用.so时,我们经常会报类似错误

java.lang.UnsatisfiedLinkError

其实这个问题就涉及到手机CPU架构的问题了,目前手机CPU架构绝大多数都是arm架构。ARM处理器,特点是体积小、低功耗、低成本、高性能,所以几乎所有手机处理器都基于ARM,在嵌入式系统中应用广泛

第五点:NDK和SDK区别?

严格说AndroidNDK只是AndroidSDK的一个组件,通过NDK,你就可以用c或c++来开发app了。

第六点:Android支持的cpu架构(目前是七种)

  • armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢
  • armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能
  • arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit
  • x86 intel 32位,一般用于平板
  • x86_64 intel 64位,一般用于平板
  • mips 少接触
  • mips64 少接触

参考链接:

  1. https://www.cnblogs.com/fenghuan/p/4794514.html
  2. https://zhuanlan.zhihu.com/p/23102158
  3. http://www.mamicode.com/info-detail-1680973.html
  4. https://blog.csdn.net/potato512/article/details/52312565
  5. https://blog.csdn.net/stupid56862/article/details/72617065
  6. https://segmentfault.com/a/1190000005646078
  7. https://blog.csdn.net/smallwei2014/article/details/74475105

相关文章

  • 简单了解一下.so

    做Android应用开发的同学接触NDK还是偏少的,但是第三方库引用多了,难免被NDK给坑个几次 今天就来对NDK...

  • runtime(一)

    前言 runtime 几乎么怎么用过,但是你要深入了解 ios ,这个你必须了解。so ……(尽量简单易懂) 简介...

  • Android Studio下编译LatinIME so库CMa

    继上次Android Studio下编译LatinIME so库NDK版,这次简单记录一下使用CMake编译的so...

  • 就是如此简单,SO SO

    见 《板桥笔榜》作者:郑燮 原文:大幅六两,中幅四两,小幅二两,书条对联一两,扇子斗方五钱。凡送礼物食物,总不如白...

  • 再见,2018!你好,2019!

    如何评价我的2018年呢? Just so so. 与2017年相比,没有PB,仅仅维持了状态。 简单总结一下吧:...

  • XMLHttpRequest简单了解一下

    XMLHttpRequest简单了解一下 最近的项目开发中遇到这么一个问题: 因为某些历史原因,后端大大需要对线上...

  • 简单早餐,了解一下!

    因为考虑到现在大部分的上班族,因为时间的缘故,每次都不能吃上早餐,所以今天小编特意给大家介绍一种好吃的早餐! 食材...

  • 简单了解一下 GraphQL

    GraphQL 是什么? 一款 API 查询语言,它不捆绑任何类型的数据库,它的作用就是返回你定义类型的数据。就...

  • ida pro动态调试步骤

    在上篇文章中,我简单介绍了使用IDA Pro静态分析so文件。今天,我将介绍一下如何使用IDA Pro动态调试so...

  • LTSSM

    一篇文章来简单地介绍一下链路训练状态机[https://so.csdn.net/so/search?q=%E7%8...

网友评论

      本文标题:简单了解一下.so

      本文链接:https://www.haomeiwen.com/subject/hklgeqtx.html