重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

静态库android,静态库与动态库的区别

安卓平台属于动态库操作吗

属于

创新互联建站凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、成都网站设计、成都网站制作、网站优化、软件开发、网站改版等服务,在成都10余年的网站建设设计经验,为成都近1000家中小型企业策划设计了网站。

静态库全称静态链接库,动态库全称动态链接库,看到全称就知道什么意思了吧?也就是说在链接的时候才会用到的库,只有C/C++、OC语言才会有链接过程,Java没有。

在Android中说到静态库和动态库,一般说的都是C/C++代码,我们知道在android中是通过jni技术访问到C代码的,我们会把C/C++打包成so文件,这个就是动态库(共享库)。如果我们想要使用的C库是.a形式的静态库时,我们要把.a包装成so库,具体网上有方法。

个人感觉在java语言中讨论静态库和动态库就是个伪概念,java是的编译结果是字节码文件,不是二进制文件,而且没有链接的过程,jvm在解释执行java代码的时候调用C++代码只能是动态的。

在C++和object C开发中,用编译链接的过程,静态库在链接过程中,会和自己写的源代码打到一块,多个程序多个静态库。动态库不会打到一块,如果有共享情况的话,系统只会加载一次。

OC的代码处理过程是很复杂的,有预处理、编译、链接过程,预处理就是处理宏什么的,编译这个过程就很复杂了,有编译前端和编译后端,编译称机器码(中间还会有汇编的过程),链接就是链接动态库或者静态库。

Android(java)代码处理过程就很简单啦,毕竟是运行在虚拟机上的。没有所谓的预处理,直接编译,这里的编译也就是把java代码转化成字节码,这个编译和OC中的编译可不是一个概念,只不过也这么叫而已。后续Aandroid还会用dex工具把.class打包成.dex,不同的VM模式(5.0以后都是ART)会对.dex进行不同的优化,具体看Android 编译到运行APK过程总结。需要提一下的是,ART采用AOT和JIT技术,在安装或者运行的时候,会把字节码转化成机器码,这个机器码也会受VM控制的,具体看Android之Dalvik 、ART

C/C++、Object C属于编译型语言,这是毋庸置疑的,因为它们都会在生成安装包之前编译成机器码。

Android中静态库和共享库的区别

简单来讲:

静态库是在连接阶段直接拷贝到代码中使用的,而共享库是由加载器加载到内存,在运行时使用的。

编译出来的静态库(这里指jar包)里每个java文件对应的class文件都单独存在,可以直接导入Eclipse等IDE使用

而编译出来的共享库(jar包),内部是Android字节码Dex格式的文件,一般无法导入Eclipse等IDE使用。Android.mk中由BUILD_JAVA_LIBRARY指定生成共享BUILD_STATIC_JAVA_LIBRARY指定生成静态库。

如何在android使用已经有的静态库

关于编译静态库:

android.mk和xxx.cpp放在新文件夹里:

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \xxx.cpp

LOCAL_MODULE:= libx

include $(BUILD_STATIC_LIBRARY)

生成静态库libx.a文件

关于链接静态库:

有两种方法:

1、把libx.a文件放在android.mk同一目录下,添加:

LOCAL_PREBUILT_LIBS += libx.a

2、同上,添加:

include $(CLEAR_VARS)LOCAL_MODULE := libxLOCAL_SRC_FILES := libx.ainclude $(PREBUILT_STATIC_LIBRARY)LOCAL_STATIC_LIBRARIES += libx

貌似第二种是NDK里比较常见,第一种在其他的android.mk里比较常见。

android 怎么引用一个静态库

关于编译静态库:

android.mk和xxx.cpp放在新文件夹里:

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \xxx.cpp

LOCAL_MODULE:= libx

include $(BUILD_STATIC_LIBRARY)

生成静态库libx.a文件

打包android的时候怎么引入一些静态库

方法1 :

人为建立上面的文件夹并将静态库拷入;

方法2 :

就是通过编译配置来做上面的动作。具体如下:

1. 将动态库的编译部分和静态库的编译部分分开;

2. 在工作目录下建立一个lib文件夹(必须是这个名字),将第三方的静态库拷贝进去,并且增加一个编译配置文件Android.mk,具体内容如下:

Android wbr: wbr编译动态库时如何引入静态库

这个编译配置文件就是要在obj下生成中间文件,供其他地方使用。

文件列表如下:

Android wbr: wbr编译动态库时如何引入静态库

3. 在工作目录下建立一个文件夹,并且将生成动态库的相关文件全部拷贝进去。这里我们起的名字是src,当然也可以起其他名字。Android.mk内容如下:

Android wbr: wbr编译动态库时如何引入静态库

这里只要直接引入第三方库就可以了。

文件列表如下:

Android wbr: wbr编译动态库时如何引入静态库

third_lib.h是静态库的头文件,test.cpp很简单,就是一个函数里面顺序调了一下静态库里开放的函数,内容如下:

Android wbr: wbr编译动态库时如何引入静态库

3. 工作目录下增加一个编译配置文件Android.mk,作用就是查找工作目录下所有的子目录中的Android.mk来编译。Android.mk的内容如下:

Android wbr: wbr编译动态库时如何引入静态库

好,工作都做完了,下面进入工作目录mm -B 试一下,可以顺利编译成功。


本文标题:静态库android,静态库与动态库的区别
网页URL:http://cqcxhl.com/article/dsiieeo.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP