Android中集成第三方库的方法和问题

声明:

1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接。

2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部分为參考网上同学们的成果加以整理而成。

3. 欢迎转载,交流,请尊重作者劳动成果;转载请注明出处,谢谢!

Android中使用第三方库可能有两种:Java库.jar和原生库.so/.a,假设仅仅是做上层APK开发,这两种库都能够通过Eclipse集成开发环境进行集成,假设是平台级开发,则都可通过源代码集成。本文整理这两种集成方式使用步骤,下面假设程序scanerapp,集成Java库scanerjar.jar,原生库libscanerbase.so/libscanerbase.a,libscanerplus.so/libscanerplus。当中,so库要尽量參照Android引用库规范编写,内部函数命名也要规范(虽然不规范也可能能够使用),.a库为静态联编,一般面向C/C++引用使用,假设Java上层使用,一般须要通过动态库(.so)转接。

一、Eclipse集成


1、scanerjar.jar包集成

A.当前projectscanerapp下创建libs文件夹

B.使用Eclipse导入scanerjar.jar包就可以

2、libscanerbase.so和libscanerplus.so集成

A.当前projectscanerapp下创建libs/armeabi文件夹

B.把libscanerbase.so和libscanerplus库文件复制到libs/armeabi文件夹下就可以,由于libscanerbase.so和libscanerplus.so库为原生库,一般做执行时载入的动态库。

C.Java文件引用载入库

终于生成的apk会自己主动把libscanerjar.jar和libscanerbase.so和libscanerplus.so文件打包进去。

二、源代码集成


源代码集成第三方库也至少有两种方式:C/C++链接方式和Android Prebuild方式,当然似乎前者无法集成libscanerjar.jar包。C/C++方式

1、C/C++链接方式

静态库和动态库一般放置在libs/armeabi文件夹下,假设库文件较多,也能够单独另立文件夹存放,仅仅要相应改动库文件路径(搜索路径就可以)。

改动Android.mk文件,演示样例链接libscanerbase.a静态库:

LOCAL_LDFLAGS := $(LOCAL_PATH)/libs/armeabi/libbase.a

2、Android Prebuild方式

1) libscanerbase.jar包集成

A.在packages/app/scanerapp下创建libs文件夹,这里如果程序包放在packages/app以下。

B.把scanerbase.jar包复制到该文件夹下

C.改动Android.mk文件,示比例如以下:

include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := scanerjar
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=scanerjar:libs/libscaner.jar
include $(BUILD_MULTI_PREBUILT)

当中,

LOCAL_STATIC_JAVA_LIBRARIES为引用jar库的别名,能够随便取名,一般就是用库名称就能够了。

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES为指定prebuilt java库规则,格式为:别名:jar文件的完整路径,这里的别名就是LOCAL_STATIC_JAVA_LIBRARIES所取的名字。

源代码开发时,scanerapp.apk将会连同libscaner.jar打包,一起放在out/target/product/<prjname>/system/app/文件夹下;

2) libscanerbase.so和libscanerplus.so集成

A.在packages/app/scanerapp下创建libs/armeabi文件夹

B.把.so库复制到libs/armeabi文件夹下

C.改动Android.mk配置文件,加入例如以下:

    include $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libscanersoLOCAL_PREBUILT_LIBS := libscanerso:libs/armeabi/libscanerbase.so libs/armeabi/libscanerplus.soinclude $(BUILD_MULTI_PREBUILT)

当中,

LOCAL_PREBUILT_LIBS指定prebuilt so库规则,格式:别名:so文件路径。

源代码开发时,这个libscanerbase.so将会被放在out/target/product/<prjname>/system/lib/下,当中system/lib为载入动态库时缺省搜索路径。

此外,libscanerbase.so还能够集成到build/core/user_tags.mk中,只是一般不建议那么做,我们应尽量降低改动系统级配置。

3) 源代码集成编译

mmm  /packages/apps/scanerapp

以上指令是在展讯ANDROID平台上使用,其他平台可能不同。

三、easy出现故障的点及解决的方法

1.  集成库文件到Eclipse项目

在将库文件加入到Eclipse项目中时,一定要注意加入库的位置,不能放错,否则不能被正常使用。Jar包放在libs/文件夹下,so库文件一定要放在libs/armeabi文件夹下。

2.集成库文件到源代码中

在源代码集成环境中(我们的平台为展讯平台),其它平台能够參考

(1) 在应用文件夹(scanerapp)下的Android.mk文件里,在引用多个库的时候,库文件的别名能够不声明,可是假设声明了别名,就一定要注意该问题:别名后要将全部引用的库都写上,及一个别名后加入全部要引用的库。

比如:

应写成例如以下格式:

  include $(CLEAR_VARS)LOCAL_STATIC_JAVA_LIBRARIES := scanerjarLOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=scanerjar:libs/libscaner.jar libs/libscanerplus.jar #问题点include $(BUILD_MULTI_PREBUILT)include $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libscanersoLOCAL_PREBUILT_LIBS := libscanerso:libs/armeabi/libscanerbase.so libs/armeabi/libscanerplus.so #问题点include $(BUILD_MULTI_PREBUILT)

而不能写成以下的格式:

  include $(CLEAR_VARS)LOCAL_STATIC_JAVA_LIBRARIES := scanerjarLOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=scanerjar:libs/libscaner.jar scanerjar:libs/libscanerplus.jar #注意问题点include $(BUILD_MULTI_PREBUILT)include $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libscanersoLOCAL_PREBUILT_LIBS := libscanerso:libs/armeabi/libscanerbase.so libscanerso:libs/armeabi/libscanerplus.so #注意问题点include $(BUILD_MULTI_PREBUILT)

(2) 在应用包中有使用jni代码的情况,在软件包jni文件夹下的(scanerapp/jni)Android.mk中要參考例如以下声明方式:

  include $(CLEAR_VARS)LOCAL_MODULE    := libscanerjniLOCAL_SRC_FILES := scaner.cppLOCAL_LDLIBS    := -llogLOCAL_MODULE_TAGS := optionalinclude $(BUILD_SHARED_LIBRARY)

当中,LOCAL_MODULE会被应用所使用,LOCAL_MODULE_TAGS一定要申明,否则编译时会报错,不能进行编译。

在应用(scanerapp)文件夹下的Android.mk文件里一定要声明LOCAL_JNI_SHARED_LIBRARIES,示比例如以下:

 LOCAL_JNI_SHARED_LIBRARIES := libscanerjniLOCAL_PROGUARD_ENABLED := disabled

当中libscanerjni为应用(scanerapp/jni)文件夹下Android.mk文件里申明的Jni模块。

假设应用的包,在编译时提示proguard错误,则要将LOCAL_PROGUARD_ENABLED设置为disabled;

(3)依照该规则正确写了Android.mk文件,使用mmm单独编译scanerapp也能正常编译通过,可以正常看到提示已经将所用到的so库文件copy到out/…/system/libs文件夹下。可是将整个项目全编时,却发现out/…/system/libs文件夹下并没有我们所须要的.so库文件。出现这样的情况,可进行例如以下操作,(展讯平台可照搬,其它平台可參考,思路是一样的)

第一:将所要引用的so文件复制到project/vendor/sprd/proprietaries/<projectName>/system/lib文件夹下

第二:打开project/device/sprd/<prjecetName>/proprietaries.mk

将索要引用的so库文件加入到PROPMODS项中。

第三:make –j4编译项目

(完)

---------------------------

參考资料:

http://blog.csdn.net/thl789/article/details/7918093

http://www.zzqhost.com/?post=14

http://www.metsky.com/archives/635.html

----------------------------------

欢迎浏览、技术交流
请尊重劳动成果
转载请注明出处,谢谢!

http://blog.csdn.net/netwalk/article/details/24737241

转载于:https://www.cnblogs.com/zfyouxi/p/4471117.html

Android中集成第三方库的方法和问题相关推荐

  1. 如何在 SAP UI5 应用中集成第三方库 :一个在移动设备上查看 Web 应用打印调试信息的小技巧

    这是 Jerry 2021 年的第 43 篇文章,也是汪子熙公众号总共第 320 篇原创文章. 做 Web 开发的程序员,无论使用 SAP UI5,还是 Angular,React,Vue,每天都离不 ...

  2. Android Studio导入第三方库的三种方法

    今天在项目中使用一个图片选择器的第三方框架--GalleryFinal,想要导入源码,以便于修改,于是上完查找了一下方法,想到之前用到过其他导入第三方库的方法,现在做个小总结,以防忘记. Androi ...

  3. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  4. 如何在Android中使用emojicon库集成表情符号, 妈妈在也不用担心我的表情了~~~

    如何在Android中使用emojicon库集成表情符号 最全最专业的emojicon库教程. 在本教程中,我们将学习如何通过一个简单的示例在Android应用程序中使用emojicon库集成  表情 ...

  5. python安装成功第三方库但import出问题_解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程...

    一.问题具体描述: 在cmd控制台 pip install xxxx 后并显示安装成功后,并且尝试用cmd 的python 中import xxxx ,没有显示异常,说明这个库是安装成功了的.(这里以 ...

  6. python语言中、用来安装第三方库的命令_python安装第三方库的方法

    python安装第三方库的方法 发布时间:2020-09-03 11:22:15 来源:亿速云 阅读:76 作者:小新 小编给大家分享一下python安装第三方库的方法,相信大部分人都还不怎么了解,因 ...

  7. SAP UI5 应用开发教程之一百零三 - 如何在 SAP UI5 应用中消费第三方库试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  8. Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载

    场景 经常会有后台服务向Android推送消息通知的情况. 实现 首先在Android Studio中新建一个Android应用 在Project根目录的build.gradle中配置了jcenter ...

  9. Swift项目引入第三方库的方法

     分类: iOS(55)  目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...

最新文章

  1. 树莓派 Linux 备份,Turtlebot3中级教程-树莓派系统备份与恢复
  2. Windows 10 还有前途么?
  3. redis在PHP中的基本使用
  4. jvm性能调优 - 15JVM的老年代垃圾回收器CMS的缺点
  5. Django模板语言
  6. Java 建模:UML 工作簿,第 1 部分
  7. dual mysql 获取序列_如何使用mysql 一次查询多个序列
  8. java response 状态码_response(向客户端写入数据、对相应进行设置(状态码、响应头))...
  9. 升级win11-需要开启主板的tpm2.0
  10. 【Linux】如何在文件中写入感叹号
  11. vue3小兔鲜儿项目文档,视频
  12. LabVIEW与Microsoft Windows的兼容性
  13. SpringBoot入门项目——holleWorld
  14. 微信付款到个人银行卡php,微信企业付款到银行卡(下)
  15. html画布动画,画布动画(Canvas Animation)
  16. win7 配置apache24 https访问
  17. 【附源码】计算机毕业设计Python安卓基于安卓的校园跑腿代购476ww(源码+程序+LW+调试部署)
  18. 虚拟机centOS6 Linux系统关于yum install mirror报错 路径报错
  19. 根据2021年天文年历计算非表列的其他时刻的太阳赤经纬
  20. 多功能起名查重工具微信小程序源码

热门文章

  1. tomcat如何进入管理页面 manager/html 配置方法
  2. 中国主流的大数据分析厂商
  3. jedis操作set_Redis从入门到深入-Java操作Redis(12)
  4. 使用fetch函数发送ajax
  5. docker php kafka,docker安装kafka
  6. 判断utf8无bom_[Java] 判断UTF8 无BOM编码
  7. java五层架构_Web五层架构
  8. python网络监控程序_python linux监控程序
  9. markdown生成html不出效果,mdeditor: 简单markdown编辑器,同步预览html效果。不依赖任何插件,使用简单,原创,造轮子中。。。更新中。。。...
  10. hashmap扩容机制_图文并茂,HashMap经典详解!