`
lvwz2008
  • 浏览: 28298 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

加载第三方so

 
阅读更多

将so打包进apk ,网上常见的就是 在源码中有c代码,编译出一个so,然后打进apk,也是网上大家转来转去的那几篇文章,因为一致只做纯java开发,这种方法没有试过。

 

如果是第三方so ,则有诸多麻烦。

一种就是 其他同事现在的方法,在eclipse开发,那么libs/armeabi下的so 自动弄进去了,真是简单又方便。

另外一种就是要把so拷贝到编译环境的某个目录,在编译代码时整合进去。

 

 

客户方给了一个so,不知道开发细节,需要编进去。我习惯了在代码树下开发,刚开始并没有注意配置so,结果编译正常,安装正常,但是一旦 loadLibary ,就exception: load library renturn null。

解压发现apk发现,里面并没有源码对应的libs/armeabi/xxx.so,看来并没有打包进去。

在纠结中实战,找到如下实用方法;

 

1  copy 你的so 到out/target/product/generic/system/lib 。 这个目录是你没有修改过TARGET_PRODUCT的情况下。

   如果你的TARGET_PRODUCT是 XXXYYY,则要去out/target/product/XXXYYY/system/lib 。

 

ps:这一步其实可以在第二步中的mk文件中用代码执行,同事给的参考为:

 

  $(shell mkdir -p $(TARGET_OUT)/../obj/STATIC_LIBRARIES/$(LOCAL_MODULE)_intermediates )

 

$(shell cp $(LOCAL_PATH)/lib/libmap-encrypt.a  $(TARGET_OUT)/../obj/STATIC_LIBRARIES/$(LOCAL_MODULE)_intermediates/$(LOCAL_MODULE).a)

 

晚上回去试一试。

 

 

2 在app代码中创建mk文件,文件名可随意,但建议和so同名吧 。  格式如下:

 

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

 

LOCAL_MODULE_TAGS := optional

 

LOCAL_MODULE:= libmupdf

 

 

红色的libmupdf是你要加载的so名称,也就是out/target/product/generic/system/lib下的so名称。

一个so对应一个mk,我们习惯把n个mk放在jni目录下。这个jni目录与app的android.mk 同级。

 

3 在app的Android.mk中 需要有这样的声明

 LOCAL_JNI_SHARED_LIBRARIES := libmupdf ,libmupdf为第二步中声明的LOCAL_MODULE如果是多个 ,用空格隔开

 

还有这一句:

include $(call all-makefiles-under,$(LOCAL_PATH))

 

 

 

4 这样编译后,即使你的源码中没有so,在生成的apk会自动建eStore.apk_FILES/lib/armeabi ,下面便是你想加载的so,只可能是第一步中的目录拷贝而来。

 

5 install -r 时可能报 INSTALL_FAILED_DEXOPT 。 原来在模拟器下开发,/data太小,  重新启动模拟器加  wipe-data 解决。

 

 

 

这个问题是解决了,但是对Android.mk的语法并不了解。以后遇到此类问题,估计还要纠结 ,555

 

有时间学习学习去

 

 

 

 

分享到:
评论

相关推荐

    UE4 4.15 加载第三方dll so

    通过插件的方式 加载ARWrapper库中的arwIsRunning函数 windows和android下可以正常执行

    Android.mk引入第三方jar包和so库文件的方法

    主要介绍了Android.mk引入第三方jar包和so库文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    ndk调用第三方库实例测试

    NDK 调用第三方库的方法 1,编写基础库 libndktest.so,实现一个加法(a+b); 2,编写一个基本的android程序在 MainActivity 中调libndktest.so 并实现其中的加法; 3,对原有的外部库进行进一步封装,并实现其中的...

    适配android11及以上版本的 ijkplayer播放器so包

    2022年2月份最新的so.

    详解android.mk中引用第三方库的方法

    本篇文章主要介绍了详解android.mk中引用第三方库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详解Android Studio如何导入第三方类库、jar包和so库

    主要介绍了Android Studio如何导入第三方类库、jar包和so库的相关资料,需要的朋友可以参考下

    Delphi XE10加载百度地图定位SDK

    Delphi XE10加载百度地图定位SDK...其实也就是在Delphi中使用第三方jar包, 以及第三方jar包所需要的so文件

    android开发JNI调用三方.so的demo

    android开发时候需要依赖第三方库,cmake中添加第三方库的方法

    Android系统定制之Android.mk和Android.bp语法详解(精通版).mp4

    3.Android.mk或Android.bp中引用Android的第三方(jar、aar、so)、Androidx的类库等的使用方法 4.Android.mk或Android.bp编译生成Apk、静态库、动态库、可执行文件等的使用方法 5.Android系统定制有源码App或无源码...

    PHP中调用C/C++制作的动态链接库的教程

    一般而言,php速度已经比较快,但是,对于一些较高级开发者而言,如果想要追求更快的速度,那毫无疑问可以通过自己写c代码,并编译为动态链接库(常为.so文件),然后php通过创建一个新的扩展(extension),并在扩展里...

    yett::locked_with_key:一个小型网页库,用于控制(第三方)脚本的执行

    :locked_with_key: 一个小型网页库,用于控制分析等(第三方)脚本的执行 只需将htt放到html的顶部,它将允许您阻止和延迟其他脚本的执行。 背景 [ :red_question_mark: ] So, why on Earth would I want to block ...

    为Nginx动态添加模块的方法

    写在前面 ...这里以安装第三方ngx_http_google_filter_module模块为例。 Nginx的模块是需要重新编译Nginx,而不是像Apache一样配置文件引用.so 下载第三方扩展模块ngx_http_google_filter_module #

    把小黄鸟HttpCanary证书装成系统证书(需要配合面具)

    对应软件不信任第三方证书,这大概是最一劳永逸的方法了,你不是只信任系统证书,不信任用户证书吗?那我就把自定义证书装成系统证书。 解锁手机 Bootloader 刷入第三方 Recovery(例如 TWRP) 下载官方 Magisk 包...

    Qt Mac 下调用动态链接库1

    Windows下动态库是以.lib和.dll为扩展名的,而在Mac下,库是以.a和.dylib为扩展名的,Linux下则是以.a和.so为扩展名的,分别如下所示

    Nginx之为已安装nginx动态添加模块的方法

    这里以安装第三方ngx_http_google_filter_module模块为例 nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so 1. 下载第三方扩展模块ngx_http_google_filter_module # cd /data/software/ # git...

    Nginx为已安装nginx动态添加模块

    这里以安装第三方ngx_http_google_filter_module模块为例 nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so 1. 下载第三方扩展模块ngx_http_google_filter_module # cd /data/software/ # git ...

    java_jsp项目源码_opencart简洁主题simplecart sot12.rar

    7. **兼容性**:该主题与OpenCart最新版本兼容,同时支持多种第三方插件和扩展,方便您根据业务需求进行二次开发。 总之,SimpleCart是一款功能全面、简单易用且高度可定制的OpenCart主题,非常适合希望建立专业...

    Android开发之Android.mk模板的实例详解

    如何添加第三方静态库、动态库的依赖  3. 如何构造一个完整的NDK工程框架  假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:algorithm,core,ne

    AndroidProject案例集合

    作者AndroidHJS,源码AndroidProject,简单说几句 敲这个项目也是一时兴起,但是在敲这个项目...不使用任何第三方框架完成QQ,微博第三方登录和QQ ,微博,微信分享。 butterknife,gson,BoomMenu第三方依赖库的使用。

    Android studio 下JNI编程实例并生成so库的实现代码

    2.怎样生成.so动态库提供给第三方使用。 以下是正文: 一,编写jni文件,实现本地方法 1,建立一个新工程,只有一个MainActivity,里面加载库文件并且调用若干本地方法,然后通过Android Studio里的build-make...

Global site tag (gtag.js) - Google Analytics