Merge pull request #294 from kevinfen9/dev

pn插件升级为apk插件问题
This commit is contained in:
Jiongxuan Zhang 2017-08-11 20:22:06 +08:00 committed by GitHub
commit d574eab5e2
2 changed files with 39 additions and 15 deletions

View File

@ -283,15 +283,14 @@ public class PluginContext extends ContextThemeWrapper {
/**
* 设置文件的访问权限
*
* @param name 需要被设置访问权限的文件
* @param mode 文件操作模式
* @param name 需要被设置访问权限的文件
* @param mode 文件操作模式
* @param extraPermissions 文件访问权限
*
* 注意 <p>
* 此部分经由360安全部门审核后在所有者|同组用户|其他用户三部分的权限设置中认为在其他用户的权限设置存在一定的安全风险 <p>
* 目前暂且忽略传入的文件操作模式参数并移除了允许其他用户的读写权限的操作 <p>
* 对于文件操作模式以及其他用户访问权限的设置开发者可自行评估 <p>
*
* <p>
* 注意 <p>
* 此部分经由360安全部门审核后在所有者|同组用户|其他用户三部分的权限设置中认为在其他用户的权限设置存在一定的安全风险 <p>
* 目前暂且忽略传入的文件操作模式参数并移除了允许其他用户的读写权限的操作 <p>
* 对于文件操作模式以及其他用户访问权限的设置开发者可自行评估 <p>
* @return
*/
private final void setFilePermissionsFromMode(String name, int mode, int extraPermissions) {
@ -443,7 +442,12 @@ public class PluginContext extends ContextThemeWrapper {
// 直接获取插件的Application对象
// NOTE 切勿获取mLoader.mPkgContext因为里面的一些方法会调用getApplicationContext如registerComponentCallback
// NOTE 这样会造成StackOverflow异常所以只能获取Application对象框架版本为3以上的会创建此对象
return mLoader.mPluginObj.mApplicationClient.getObj();
//entry中调用context.getApplicationContext时mApplicationClient还没被赋值会导致空指针造成插件安装失败
if (mLoader.mPluginObj.mApplicationClient == null) {
return this;
} else {
return mLoader.mPluginObj.mApplicationClient.getObj();
}
}

View File

@ -236,9 +236,15 @@ public class PluginInfo implements Parcelable, Cloneable {
}
// 针对有问题的字段做除错处理
if (low <= 0) { low = Constant.ADAPTER_COMPATIBLE_VERSION; }
if (high <= 0) { high = Constant.ADAPTER_COMPATIBLE_VERSION; }
if (ver <= 0) { ver = pi.versionCode; }
if (low <= 0) {
low = Constant.ADAPTER_COMPATIBLE_VERSION;
}
if (high <= 0) {
high = Constant.ADAPTER_COMPATIBLE_VERSION;
}
if (ver <= 0) {
ver = pi.versionCode;
}
PluginInfo pli = new PluginInfo(pn, alias, low, high, ver, path, PluginInfo.TYPE_NOT_INSTALL);
@ -417,7 +423,7 @@ public class PluginInfo implements Parcelable, Cloneable {
* 获取Extra Dex优化后生成时所在的目录 <p>
* 若为"纯APK"插件则会位于app_p_od/xx_eod中若为"p-n"插件则会位于"app_plugins_v3_odex/xx_eod" <p>
* 若支持同版本覆盖安装的话则会位于app_p_c/xx_eod中 <p>
* 注意仅供框架内部使用;仅适用于Android 4.4.x及以下
* 注意仅供框架内部使用;仅适用于Android 4.4.x及以下
*
* @return 优化后Extra Dex所在目录的File对象
*/
@ -700,7 +706,7 @@ public class PluginInfo implements Parcelable, Cloneable {
/**
* 更新插件信息通常是在安装完新插件后调用此方法 <p>
* 只更新一些必要的方法如插件版本路径时间等插件名之类的不会被更新
* 只更新一些必要的方法如插件版本路径时间等
*
* @param info 新版本插件信息
*/
@ -709,6 +715,8 @@ public class PluginInfo implements Parcelable, Cloneable {
setVersion(info.getVersion());
setPath(info.getPath());
setType(info.getType());
setPackageName(info.getPackageName());
setAlias(info.getAlias());
}
/**
@ -735,6 +743,18 @@ public class PluginInfo implements Parcelable, Cloneable {
return pi;
}
private void setPackageName(String pkgName) {
if (!TextUtils.equals(pkgName, getPackageName())) {
JSONHelper.putNoThrows(mJson, "pkgname", pkgName);
}
}
private void setAlias(String alias) {
if (!TextUtils.equals(alias, getAlias())) {
JSONHelper.putNoThrows(mJson, "ali", alias);
}
}
private void setVersion(int version) {
JSONHelper.putNoThrows(mJson, "ver", version);
JSONHelper.putNoThrows(mJson, "verv", buildCompareValue());
@ -1069,8 +1089,8 @@ public class PluginInfo implements Parcelable, Cloneable {
/**
* 判断是否为p-n类型的插件
* @return 是否为p-n类型的插件
*
* @return 是否为p-n类型的插件
* @deprecated 只用于旧的P-n插件可能会废弃
*/
public boolean isPnPlugin() {