/**
* MobiRpcLoader, so文件加载类
*
* @author ddd
* @date 2024/2/26 19:06
*/
@Slf4j
public final class MobiRpcLoader {
private static final String NATIVE_MODULE_NAME = "mobirpc";
private static final String SDK_CONFIG_DIRECTORY = "config";
private static final String SDK_CONFIG_TEMP_PATH = "/.cache/engine-adapter/mobi/";
private static final String SDK_MOBI_LOG_LEVEL_NAME = "SDK_MOBI_LOG_LEVEL";
private MobiRpcLoader() {
}
/**
* 加载so文件
*
* @return 接口协议对象
*/
public static MobiRpc load() {
try {
MobiRpc mobiRpc = Native.load(NATIVE_MODULE_NAME, MobiRpc.class);
String configPath = getConfigPath();
log.info("module: {}, loading config: {}", NATIVE_MODULE_NAME, configPath);
mobiRpc.rpcInitEnv(configPath);
String logLevelStr = System.getenv(SDK_MOBI_LOG_LEVEL_NAME);
if (CharSequenceUtil.isNotBlank(logLevelStr)) {
mobiRpc.setLogLevel(Integer.parseInt(logLevelStr));
}
return mobiRpc;
} catch (Throwable e) {
log.error("load module: {} failed", NATIVE_MODULE_NAME, e);
}
return null;
}
/**
* 获取配置文件路径
* 配置文件,so接口使用,需要文件夹路径
* 因配置文件打在jar中,需要读取并保存到外部路径中
*
*/
private static String getConfigPath() throws IOException {
URL fileUrl = ClassUtil.getLocation(MobiRpcLoader.class);
//jarFile
JarFile jarFile = null;
if (URLUtil.isJarFileURL(fileUrl)) {
jarFile = new JarFile(fileUrl.getPath());
} else if (URLUtil.isJarURL(fileUrl)) {
jarFile = URLUtil.getJarFile(fileUrl);
} else {
//do nothing
}
//config
if (Objects.nonNull(jarFile)) {
String targetPath = FileUtil.getUserHomePath() + SDK_CONFIG_TEMP_PATH;
try {
List<JarEntry> jarEntries = jarFile.stream()
.filter(jarEntry -> jarEntry.getName().startsWith(SDK_CONFIG_DIRECTORY))
.filter(jarEntry -> !jarEntry.isDirectory())
.collect(Collectors.toList());
for (JarEntry jarEntry : jarEntries) {
InputStream input = jarFile.getInputStream(jarEntry);
FileUtil.writeFromStream(input, targetPath + jarEntry.getName());
}
} finally {
IoUtil.close(jarFile);
}
return targetPath + SDK_CONFIG_DIRECTORY;
} else {
return fileUrl.getPath() + SDK_CONFIG_DIRECTORY;
}
}
}
版权声明:《 jni加载so文件 》为Saber原创文章,转载请注明出处!
最后编辑:2025-2-21 15:02:19