首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LiteAVSDK集成,动态加载so

如果是集成的商业版SDK,比如移动直播5.4商业版(LiteAVSDK_Enterprise_Android_5.4.6097),解压sdk包,会发现多了一些jar、so,而这些so动态加载方式,...image.png 1、这三个so必需要在本地加载。 image.png 2、这些so需要按照如下顺序动态加载。...//sdk接口动态加载so TXLiveBase.setLibraryPath(newFilePath); //系统接口动态加载so loadLibrary(newFilePath, "YTCommon...解决办法就是:先把一个32位的so文件打进安装包,其它so在运行时动态加载,这样App启动的是32位进程,动态加载so也是32位版本,运行时就不再闪退。...五、资源 相关文章: LiteAVSDK商业版6.6+,安卓集成动态加载so 动态加载so的实现方法与问题处理 Android 的 so 文件加载机制提问源码总结参考资料 demo下载

8.5K3510

Java 动态加载 so 的解决方案

业务场景有对so实现动态加载/替换的需求,但Java并没有直接动态加载so的机制。本文将深度剖析Java加载so的实现机制,并提出一套Java动态加载so的方案。...在一些业务场景中,为了支持单点单so(动态链接)的热更新,需要在框架层动态加载/替换so。...这个过程涉及到的Java加载so,一般都是使用Java函数System.load()或者System.loadLibrary(),通过JNI调用C++动态链接,整个流程在业界已经非常成熟。...到这里恍然,dlopen(filename, RTLD_LAZY)即是linux下Java System.load的最终实现,其实跟C++加载动态链接是一样的。...三、Java动态加载so 我们没法通过System.load()重复加载同名so或者直接动态替换so,也没法在Java层拿到dlopen返回的句柄,所以我们没法在Java代码层实现so动态加载

8.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

Android 开发中如何动态加载 so 文件

我想对于静态加载 so 文件,大家都已经很熟悉了,这里就不多说了。...在 Android 开发中调用动态文件(*.so)都是通过 jni 的方式,而静态加载往往是在 apk 或 jar 包中调用so文件时,都要将对应 so 文件打包进 apk 或 jar 包。...动态加载的优点 静态加载,不灵活,apk 包有可能大。所以采用动态加载 so 文件,有以下几点好处: 灵活,so 文件可以动态加载,不是绑定死的,修改方便,so 有问题,我们可以动态更新。...so 文件很大的话,采用动态加载可以减少 apk 的包,变小。 其实我们常用第三方 so ,单个可能没问题,如果多个第三方 so 文件,同时加载可能会出现冲突,而动态加载就能够解决这一问题。...注意路径陷阱 动态加载 so 文件,并不是说可以把文件随便存放到某个 sdcard 文件目录下,这样做既不安全,系统也加载不了。

5.1K101

【Android 逆向】Android 中常用的 so 动态 ( systemliblibc.so 动态 | libc++.so 动态 | libstdc++.so 动态 )

Windows 文件中 ; 使用 64 位的 IDA 打开上述动态 ; libc.so 中有以下几个导入库 , dlopen , dlerror , dlclose ; 加载 libc.so 之前..., 要先加载 /system/bin/linker , 这是 so 动态加载模块 , 该动态中 , 主要是实现了 dlopen 方法 ; 二、拷贝并分析 Android 中的 /system.../lib/libc++.so 动态 ---- /system/lib/libc++.so 动态是 C++ 程序中使用的动态 ; 使用下面的命令拷贝该动态 ; cp /system/lib/libc...lib/libstdc++.so 动态 ---- /system/lib/libstdc++.so 动态是 C++ 程序中使用的动态 ; 使用下面的命令拷贝该动态 ; cp /system/lib.../libc++.so 动态 和 /system/lib/libstdc++.so 动态 都依赖于 libc.so 动态 ;

2.3K30

【Android 逆向】Android 中常用的 so 动态 ( libm.so 数学函数动态 | liblog.so 日志模块动态 | libselinux.so 安全模块动态 )

文章目录 一、libm.so 数学函数动态 二、liblog.so 日志模块动态 三、libselinux.so 安全模块动态 一、libm.so 数学函数动态 ---- libm.so 是数学相关函数..., 该动态是 libc.so 动态的依赖 , 是最基础的函数 ; 执行 cp /system/lib/libm.so /sdcard/Pictures 命令 , 将 libm.so 动态拷贝到...对数函数 , 等 ; 二、liblog.so 日志模块动态 ---- liblog.so 是日志模块的动态 , 所有的日志打印 , 都使用的这个 ; 执行 cp /system/lib/liblog.so.../sdcard/Pictures 命令 , 将 liblog.so 动态拷贝到 /sdcard/Pictures 目录 , 之后可以将其拷贝到文件系统 ; 三、libselinux.so 安全模块动态...---- libselinux.so 是安全模块的动态 ; 执行 cp /system/lib/libselinux.so /sdcard/Pictures 命令 , 将 libselinux.so

1.2K10

Java调用Golang生成的动态(dll,so

//export Sum 6func Sum(a int, b int) int { 7 return a + b 8} 9 10func main() { 11} 注意,即使是要编译成动态...Windows动态 执行如下命令生成DLL动态链接: 1go build -buildmode=c-shared -o libhello.dll ....Linux/Unix/macOS动态 执行如下命令生成SO动态: 1go build -buildmode=c-shared -o libhello.so .\libhello.go 4....JNA的引用 Java调用Native的动态有两种方式,JNI和JNA,JNA是Oracle最新推出的与Native交互的方式,具体介绍我就不多说了,引用百度百科的连接:https://baike.baidu.com...8 9 int Sum(int a, int b); 10} 注意,Sum是函数名,一定要与Go中事先写好的函数名保持一致 Native.loadLibrary()的第一个参数是一个字符串,要加载动态的名称或全路径

5K40

c#封装动态_nginx调用so动态

一般分为两种:静态(.a 、.lib)动态(.so 、.dll )所谓静态、动态是指链接过程。 3、静态动态 区别: (1)lib是编译时用到的,dll是运行时用到的。...使用静态编译的lib文件,在运行程序时不需要再挂动态,缺点是导致应用程序比较大,而且失去了动态的灵活性,发布新版本时要发布新的应用程序才行。...------这里主要讲动态的优点特性。-------- 静态:函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。...特点: 1)代码共享,所有引用该动态的可执行目标文件共享一份相同的代码与数据。 2)程序升级方便,应用程序不需要重新链接新版本的动态来升级,理论上只要简单地将旧的目标文件覆盖掉。...3)在运行时可以动态地选择加载各种应用程序模块 下面重点介绍Windows下动态链接DLL. DLL即动态链接(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象。

2.7K20

Android安全-SO动态注入

0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态注入; (注:实际上,0x06和0x07并不属于SO动态注入的步骤,然而仅仅注入是完全没有意义的,通常我们需要执行...和目标进程dlopen函数所在动态的基地址remote_module_base,接着获取本进程dlopen函数的绝对地址local_addr = (void*)dlopen。...需要明白的是,不同进程中相同的动态中的同一个函数的偏移地址一定是一样的,所以目标进程dlopen函数的绝对地址为:local_addr - local_module_base + remote_module_base...0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态注入: 调用ptrace_writedata(pid, (uint8_t *)saved_regs.ARM_sp...动态注入。

2.6K20

linux 动态加载_linux默认动态加载路径

当我们在linux系统引用动态时,经常会遇到一个问题,加入我们需要的动态没有在系统的默认目录下,我们编译时使用-L指定了动态的路径,编译时没有问题,但是执行调用该动态的可执行文件时,却提示找不到动态...假设我们使用tensorflow,把需要调用的libtensorflow.so和libtensorflow_framework.so两个动态放在我们和我们的程序同一级目录下。...library version %s\n”, TF_Version()); return 0; } 程序编译及结果如下: 可见程序编译没有问题,但是当执行可执行程序时,出现如下结果: 程序提示加载动态失败...解决办法,使用-Wl,-rpath 所需动态的路径 告诉程序如果在默认路径下找不到所需动态,则去当前指定的路径下找动态。...修改gcc编译指令后,结果如下: 可见,动态加载成功,程序运行成功,问题解决。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

11.7K20

Android So动态加载 优雅实现与原理分析

背景:漫品Android客户端集成适配转换功能(基于目标识别(So35M)和人脸识别(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载....在 Android 开发中调用动态链接文件*.so都是通过 jni 的加载方式,一般的开发方式往往是在 apk 或 jar 包中调用so文件时,都要将对应 so 文件打包进 apk 或 jar 包。...基于以上的常见的方式,我们一般使用java提供的so加载api System.loadLibrary(String libName):参数为so名称,位于 apk 压缩文件中的 libs 目录,最后复制到...如果项目native很多,还支持各种平台,为了减少apk size,so动态下发,按需加载是不错的选择。比如x86服务器下发,动态加载,瘦身效果将非常可观。...最终他们都会调用doLoad()加载动态

5.8K64

linux编译curl动态so

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)  curl是一个很强大的http开源,c++里面能够很方便的和http服务器交互。...最近项目开始内测,开始接登录和充值的SDK,选择了使用curl来和第三方http服务器交互。...在windows下还是很容易使用,如何使用的案例比比皆是,而且很容易就找到已经编译好的动态进行测试,但是最后在linux下部署的时候,发现不好找已经编译好的so文件,最后没办法只好自理更生。...我是使用腾讯的SDK里面附带的curl的源码(ps,腾讯SDK的示例代码貌似没在linux测试过,我编译后使用他们的代码,发现很容易崩溃,需要修改才能运行,但是windows正常)。...包含了编译生产的、头文件等。 然后为了能够方便的移植我们的程序,把include/lib下面的头文件和so文件拷贝到自己的工程目录就能使用curl了。

6.4K10

java:加载jar包中的动态

java中System.load(String)方法可以加载一个动态,有时为了便于管理和发行,我们会把动态打包jar包一起发行。这时如何加载jar包中的动态呢?...原理也很简单,就是先把动态解压到系统临时文件夹,再调用System.load(String)方法加载动态,github上这个项目native-utils上提供了完整实现代码,我做了一些简化,实现如下...* 先将jar包中的动态复制到系统临时文件夹,然后加载动态,并且在JVM退出时自动删除。...* * @param path 要加载动态的路径,必须以'/'开始,比如 /lib/mylib.so,必须以'/'开始 * @param loadClass 用于提供...{@link ClassLoader}加载动态的类,如果为null,则使用NativeUtils.class * @throws IOException 动态读写错误 * @throws

3.8K20

Android So动态加载 优雅实现与原理分析

背景:漫品Android客户端集成适配转换功能(基于目标识别(So35M)和人脸识别(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载....在 Android 开发中调用动态链接文件*.so都是通过 jni 的加载方式,一般的开发方式往往是在 apk 或 jar 包中调用so文件时,都要将对应 so 文件打包进 apk 或 jar 包。...基于以上的常见的方式,我们一般使用java提供的用于加载So文件的API System.loadLibrary(String libName):参数为so名称,位于 apk 压缩文件中的 libs 目录...如果项目native很多,还支持各种平台,为了减少apk size,so动态下发,按需加载是不错的选择。比如x86服务器下发,动态加载,瘦身效果将非常可观。...最终他们都会调用doLoad()加载动态

1.8K20

一种Android App在Native层动态加载so的方案

对于Java层直接引用的so动态加载可以使用Java层的系统API提供的方法System.load()或者System.loadLibrary()方式实现。...然而对于功能实现的so,是通过JNI层soJava层间接引用的,自身没有直接与Java层对接的JNI函数。所以对于功能实现so,无法再使用Java动态加载的方法。...为了解决这些问题,就不能再使用Java动态加载so的方法,而需要在Native层直接动态加载so,由JNI层so动态加载功能实现so。...Java层调用Native层动态加载的实现 确定动态加载的方案后,Native层代码模块的划分也有所修改:增加一个公共数据结构定义的so,专门存放一些通用常量和基本的数据操作接口,例如一些基类的定义,...so动态加载的流程如下: 为了便于配置so路径,so路径的获取方法在Java层实现,在动态加载开始之前Native层通过JNI对象指针调用Java层的so路径配置,获取so路径并将其回传到Native

7.2K60

静态(.a)与动态(.so)的简明介绍

静态(.a)与动态(.so)的简明介绍 gcc有很多关于静态动态的选项如-l,-L,-fPIC,-shared -Wl,-soname,看着很复杂容易混淆,其实静态动态都是应需而生,只要有了一个线索都很容易理解...-o libmod.so mod1.o mod2.o 最后使用这个动态: $ gcc -o resultant main.c libmod.so $ ....gcc提示加载动态失败,找不到它。...动态的搜索顺序如下 编译目标代码时指定的动态搜索路径; 环境变量LD_LIBRARY_PATH指定动态搜索路径,它指定程序动态链接文件搜索路径;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH...:data/home/billchen/lib 配置文件/etc/ld.so.conf中指定的动态搜索路径; 默认的动态搜索路径/lib; 默认的动态搜索路径/usr/lib。

1.6K50
领券