Android无法加载第三方so的解决方法

今天要用一个第三方so的功能,自己要写一个JNI的so封装一下。然后把同个SO一起打到APK中。

编译脚本大致是下面这样的,这个网上说的都有。

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)
LOCAL_MODULE := module1
LOCAL_SRC_FILES := libmodule1.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := demo

LOCAL_SRC_FILES := testmain.cpp 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_LDLIBS    := -L$(SYSROOT)/usr/lib -llog

LOCAL_SHARED_LIBRARIES := libmodule1

LOCAL_JNI_SHARED_LIBRARIES := libmodule1
include $(BUILD_SHARED_LIBRARY)

我遇到的问题是,在Java代码如果这样写

static {
    	System.loadLibrary("demo");
	}
会出现无法加载libdemo.so,因为它所依赖的libmodule1.so找不到。

后来我打印出System.getProperty("java.library.path"),只有/vendor/lib和/system/lib,而libmodule1.so根本不会在这个目录下,libmodule1.so是和libdemo.so在同一个目录下面的。我把libmodule1.so拷贝到/vendor/lib下面,果然就可以成功加载了。

但是这样拷贝很麻烦。于是我想到这样写:

static {
    	System.loadLibrary("module1");
    	System.loadLibrary("demo");
	}
这样发现demo可以正常加载了。怪!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值