重新整理检查是否可以更新/插件化的方法

This commit is contained in:
kehaoyuan@ghzhushou.com
2020-04-10 19:03:37 +08:00
parent 0612582a46
commit 2d9b69fd1e
8 changed files with 240 additions and 45 deletions

View File

@ -8,7 +8,6 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.content.pm.SigningInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
@ -46,47 +45,38 @@ public class PackageUtils {
/*
* 判断是否可以更新只判断gh_version的大小
*/
public static List<GameUpdateEntity> isCanUpdate(Context context, GameEntity gameEntity) {
public static List<GameUpdateEntity> getUpdateData(Context context, GameEntity gameEntity) {
List<GameUpdateEntity> updateList = new ArrayList<>();
boolean isAPluginGame = false;
// 插件更新
for (ApkEntity apkEntity : gameEntity.getApk()) {
// 判断是否gh_version是否存在
String gh_version = (String) PackageUtils.getMetaData(context, apkEntity.getPackageName(), "gh_version");
Object gh_id = PackageUtils.getMetaData(context, apkEntity.getPackageName(), "gh_id");
if (gh_version != null && apkEntity.getGhVersion() != null && gh_id != null) {
// 确定这是一个插件游戏
if (!isAPluginGame) isAPluginGame = true;
gh_version = gh_version.substring(2);
if (Long.parseLong(gh_version) < Long.parseLong(apkEntity.getGhVersion()) && apkEntity.getForce()
&& gh_id.equals(gameEntity.getId())) {
GameUpdateEntity updateEntity = new GameUpdateEntity();
updateEntity.setId(gameEntity.getId());
updateEntity.setName(gameEntity.getName());
updateEntity.setIcon(gameEntity.getIcon());
updateEntity.setPackageName(apkEntity.getPackageName());
updateEntity.setSize(apkEntity.getSize());
updateEntity.setVersion(apkEntity.getVersion());
updateEntity.setGhVersion(apkEntity.getGhVersion());
updateEntity.setUrl(apkEntity.getUrl());
updateEntity.setPlatform(apkEntity.getPlatform());
updateEntity.setEtag(apkEntity.getEtag());
updateEntity.setBrief(gameEntity.getBrief());
updateEntity.setTag(gameEntity.getTag());
updateEntity.setTagStyle(gameEntity.getTagStyle());
updateEntity.setDownload(gameEntity.getDownload());
updateEntity.setIndexPlugin(gameEntity.getIndexPlugin());
updateList.add(updateEntity);
}
if (isCanUpdate(apkEntity, gameEntity.getId())) {
GameUpdateEntity updateEntity = new GameUpdateEntity();
updateEntity.setId(gameEntity.getId());
updateEntity.setName(gameEntity.getName());
updateEntity.setIcon(gameEntity.getIcon());
updateEntity.setPackageName(apkEntity.getPackageName());
updateEntity.setSize(apkEntity.getSize());
updateEntity.setVersion(apkEntity.getVersion());
updateEntity.setGhVersion(apkEntity.getGhVersion());
updateEntity.setUrl(apkEntity.getUrl());
updateEntity.setPlatform(apkEntity.getPlatform());
updateEntity.setEtag(apkEntity.getEtag());
updateEntity.setBrief(gameEntity.getBrief());
updateEntity.setTag(gameEntity.getTag());
updateEntity.setTagStyle(gameEntity.getTagStyle());
updateEntity.setDownload(gameEntity.getDownload());
updateEntity.setIndexPlugin(gameEntity.getIndexPlugin());
updateList.add(updateEntity);
}
}
// 不是插件游戏
if (!isAPluginGame) {
for (ApkEntity apkEntity : gameEntity.getApkNormal()) {
// 插件游戏更新
for (ApkEntity apkEntity : gameEntity.getApkNormal()) {
// ghVersion 不存在即是非插件游戏
if (TextUtils.isEmpty(apkEntity.getGhVersion())) {
String versionFromRequest = apkEntity.getVersion();
String versionFromInstalledApp = getVersionByPackage(apkEntity.getPackageName());
@ -197,7 +187,7 @@ public class PackageUtils {
}
return ret;
}
/*
* 启动安装应用程序
*/
@ -223,6 +213,7 @@ public class PackageUtils {
/**
* 根据 path 获取 apk 信息确定处理方式
*
* @return true 为直接唤起系统 PackageInstaller, false 为需要插件化
*/
public static boolean isCanLaunchSetup(Context context, String path) {
@ -458,4 +449,56 @@ public class PackageUtils {
return null;
}
/**
* todo 统一判断
*
* 判断游戏包是否可以更新
*
* @param apkEntity apkEntity 必须是已安装的游戏
* @param gameId 游戏id
* @return true可以更新 false不可以更新
*/
public static boolean isCanUpdate(ApkEntity apkEntity, String gameId) {
// gh_version: gh + timestamp
String gh_version = (String) PackageUtils.getMetaData(
HaloApp.getInstance().getApplication(),
apkEntity.getPackageName(),
"gh_version");
// gh_version: game id
Object gh_id = PackageUtils.getMetaData(
HaloApp.getInstance().getApplication(),
apkEntity.getPackageName(),
"gh_id");
if (gh_version != null && apkEntity.getGhVersion() != null && gh_id != null) {
gh_version = gh_version.substring(2);
return Long.parseLong(gh_version) < Long.parseLong(apkEntity.getGhVersion())
&& apkEntity.getForce()
&& gh_id.equals(gameId);
}
return false;
}
/**
* todo 统一判断
*
* 判断游戏包是否可以插件化
*
* @param apkEntity apkEntity 必须是已安装的游戏
*
* @return true可以插件化 false不可以插件化
*/
public static boolean isCanPluggable(ApkEntity apkEntity) {
String gh_id = (String) PackageUtils.getMetaData(
HaloApp.getInstance().getApplication(),
apkEntity.getPackageName(),
"gh_id");
return PackageHelper.INSTANCE.getLocalPackageNameSet().contains(apkEntity.getPackageName())
&& gh_id == null
&& !TextUtils.isEmpty(apkEntity.getGhVersion())
&& !PackageUtils.isSignature(HaloApp.getInstance().getApplication(), apkEntity.getPackageName());
}
}