静态库android,静态库的创建与使用

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

简单来讲:

成都创新互联公司成立与2013年,是专业互联网技术服务公司,拥有项目做网站、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元门源做网站,已为上家服务,为门源各地企业和个人服务,联系电话:028-86922220

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

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

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

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

属于

静态库全称静态链接库,动态库全称动态链接库,看到全称就知道什么意思了吧?也就是说在链接的时候才会用到的库,只有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使用已经有的静态库

关于编译静态库:

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,静态库的创建与使用
文章分享:http://myzitong.com/article/dsseepo.html