Skip to content

Commit 97b1d84

Browse files
committed
feat(core.manager): 固定getAbi实现
可以从宿主的`ApplicationInfo.nativeLibraryDir`获得宿主安装时系统为它自动确定的ABI。 插件只能使用这个ABI,所以getAbi实现可以固定下来。
1 parent 08da57d commit 97b1d84

File tree

5 files changed

+17
-38
lines changed

5 files changed

+17
-38
lines changed

projects/sample/maven/manager-project/sample-manager/src/main/java/com/tencent/shadow/sample/manager/SamplePluginManager.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,6 @@ protected String getName() {
3636
return "sample-manager";
3737
}
3838

39-
/**
40-
* @return demo插件so的abi
41-
*/
42-
@Override
43-
public String getAbi() {
44-
return "";
45-
}
46-
4739
/**
4840
* @return 宿主中注册的PluginProcessService实现的类名
4941
*/

projects/sample/source/sample-manager/src/main/java/com/tencent/shadow/sample/manager/SamplePluginManager.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,6 @@ protected String getName() {
5555
return "test-dynamic-manager";
5656
}
5757

58-
/**
59-
* @return 宿主so的ABI。插件必须和宿主使用相同的ABI。
60-
*/
61-
@Override
62-
public String getAbi() {
63-
return "";
64-
}
65-
6658
/**
6759
* @return 宿主中注册的PluginProcessService实现的类名
6860
*/

projects/sdk/core/manager/src/main/java/com/tencent/shadow/core/manager/BasePluginManager.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,11 @@ public final void oDexPluginLoaderOrRunTime(String uuid, int type, File apkFile)
184184

185185

186186
/**
187-
* 插件apk的so解压
187+
* 解压插件apk中的so。
188+
* <p>
189+
* 插件的ABI和宿主正在使用的保持一致。
190+
* 注意:如果宿主没有打包so,它的ABI会被系统自动设置为设备默认值,
191+
* 默认值可能和插件apk中打包的ABI不一致,导致插件so解压不正确。
188192
*
189193
* @param uuid 插件包的uuid
190194
* @param partKey 要解压so的插件partkey
@@ -195,6 +199,10 @@ public final void extractSo(String uuid, String partKey, File apkFile) throws In
195199
File root = mUnpackManager.getAppDir();
196200
String filter = "lib/" + getAbi() + "/";
197201
File soDir = AppCacheFolderManager.getLibDir(root, uuid);
202+
if (mLogger.isInfoEnabled()) {
203+
mLogger.info("extractSo uuid=={} partKey=={} apkFile=={} soDir=={} filter=={}",
204+
uuid, partKey, apkFile.getAbsolutePath(), soDir.getAbsolutePath(), filter);
205+
}
198206
CopySoBloc.copySo(apkFile, soDir
199207
, AppCacheFolderManager.getLibCopiedFile(soDir, partKey), filter);
200208
} catch (InstallPluginException e) {
@@ -289,12 +297,15 @@ private boolean deletePart(InstalledPlugin.Part part) {
289297

290298

291299
/**
292-
* 业务插件的abi
293-
*
294-
* @return
300+
* 获取插件应该采用的ABI
301+
* <p>
302+
* 对系统来说插件代码是系统的一部分,所以插件只能用跟宿主一样ABI的so。
303+
* 这里查询宿主安装后系统自动决定的ABI目录,而不是Build.SUPPORTED_ABIS,因为宿主可能采用了兼容模式的ABI。
295304
*/
296-
public String getAbi() {
297-
return null;
305+
private String getAbi() {
306+
String nativeLibraryDir = mHostContext.getApplicationInfo().nativeLibraryDir;
307+
int nextIndexOfLastSlash = nativeLibraryDir.lastIndexOf('/') + 1;
308+
return nativeLibraryDir.substring(nextIndexOfLastSlash);
298309
}
299310

300311
/**

projects/test/dynamic/manager/test-dynamic-manager/src/main/java/com/tencent/shadow/test/dynamic/manager/ActivityTestDynamicPluginManager.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,6 @@ protected String getName() {
5252
return "test-dynamic-manager";
5353
}
5454

55-
/**
56-
* @return 宿主so的ABI。插件必须和宿主使用相同的ABI。
57-
*/
58-
@Override
59-
public String getAbi() {
60-
return "";
61-
}
62-
6355
/**
6456
* @return 宿主中注册的PluginProcessService实现的类名
6557
*/

projects/test/dynamic/manager/test-dynamic-manager/src/main/java/com/tencent/shadow/test/dynamic/manager/ServiceTestDynamicPluginManager.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,6 @@ protected String getName() {
5555
return "service-test-dynamic-manager";
5656
}
5757

58-
/**
59-
* @return 宿主so的ABI。插件必须和宿主使用相同的ABI。
60-
*/
61-
@Override
62-
public String getAbi() {
63-
return "";
64-
}
65-
6658
/**
6759
* @return 宿主中注册的PluginProcessService实现的类名
6860
*/

0 commit comments

Comments
 (0)