修复 5.1.1 系统的 vivo 设备安装大文件的 ANR 问题

This commit is contained in:
juntao
2021-02-23 10:41:55 +08:00
parent 23dd89198b
commit 8c05d2be8a
3 changed files with 39 additions and 12 deletions

View File

@ -18,6 +18,7 @@ import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.g00fy2.versioncompare.Version;
import com.gh.common.xapk.XapkInstaller;
import com.gh.gamecenter.BuildConfig;
import com.gh.gamecenter.entity.ApkEntity;
import com.gh.gamecenter.entity.GameEntity;
@ -297,13 +298,12 @@ public class PackageUtils {
// 部分设备 (已知 vivo 5.1.1) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR
// 大于 1G 的 APK 就走另类方法
if ("vivo".equals(Build.MANUFACTURER)
&& (Build.VERSION_CODES.LOLLIPOP == Build.VERSION.SDK_INT)
|| Build.VERSION_CODES.LOLLIPOP_MR1 == Build.VERSION.SDK_INT) {
File file = new File(path);
if (file != null && file.length() > 1024 * 1024 * 1024) {
return getPackageNameByPathAlternative(path);
if (isDeviceUnableToHandleBigApkFile(path)) {
// XAPK 不存在 AndroidManifest
if (path.contains(XapkInstaller.XAPK_EXTENSION_NAME)) {
return null;
}
return getPackageNameByPathAlternative(path);
}
PackageManager packageManager = context.getApplicationContext().getPackageManager();
@ -316,6 +316,24 @@ public class PackageUtils {
return null;
}
/**
* 此设备是否不能调用 packageManager.getPackageArchiveInfo 来获取 APK 信息
*
* 部分设备 (已知 vivo 5.1.1) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR
*/
public static boolean isDeviceUnableToHandleBigApkFile(String path) {
if ("vivo".equals(Build.MANUFACTURER)
&& (Build.VERSION_CODES.LOLLIPOP == Build.VERSION.SDK_INT) || Build.VERSION_CODES.LOLLIPOP_MR1 == Build.VERSION.SDK_INT) {
File file = new File(path);
if (file != null && file.length() > 1024 * 1024 * 1024) {
return true;
}
}
return false;
}
/**
* 从 APK 文件里读包名的另类方法
* 部分设备 (已知 vivo 5.1.1) 在调用 packageManager.getPackageArchiveInfo 获取比较大的 APK 文件时会出现 ANR