版权声明:允许转载,请注明来源。 https://blog.csdn.net/weixin_42127613/article/details/81869354
上篇,做了Xposed是否安装、以及是否激活的判断。
链接:https://blog.csdn.net/weixin_42127613/article/details/81868440
本节,加入更多环境检测,判断微信的版本以及是否安装,是否root,以及Android系统的版本。最终运行的效果,如下图所示。
本节要新增和修改的文件结构,如下图所示。绿色为新增,蓝色为修改。
1、新建版本支持类SupportVersion,用于存在系统能支持的版本号。只要当前的版本,在列表中,那边就支持。
public class SupportVersion {
//微信支持的版本
public static final String[] wechatSupport = {"6.6.7"};
//安卓系统支持的版本
public static final String[] androidSupport = {"8.1.1", "8.0.1", "7.1.1", "7.0.1", "6.0.1"};
public static final int[] androidSdkSupport = {27, 26, 25, 24, 23};
}
2、新建ShellUtil类,用于执行ROOT指令,判断是否ROOT。不过此类的方法,在有些真机上执行时,有个缺陷。就是会弹出申请管理员权限的确认框,如果这个确认框没有弹出来,则有可能会一直卡在那里。
此类的代码,是网上找的,并非我写。就不贴出来了,比较长。
3、修改AppInfo类。
加入Android系统和微信版本相关的成员变量,并加入相应的检测方法。关键代码如下:
//Android系统版本
private String mAndroidVersionName;
private boolean mIsDeviceRooted; //设备是否ROOT
private boolean mIsSupportAndroid; //是否支持该版本Android
//Xposed是否安装
private boolean mIsXposedInstall;
private String mXposedVersionName;
//微信是否安装、版本号
private boolean mIsWechatInstall;
private String mWechatVersionName;
private boolean mIsSupportWechat;
//检测设备环境
public void ValidateEnvironment(Context context) {
//判断root
mIsDeviceRooted = ShellUtil.checkRootPermission();
//Android系统版本
mAndroidVersionName = Build.VERSION.RELEASE;
//判断微信
mWechatVersionName = AppUtils.getAppVersionName(context, AppUtils.PACKAGE_NAME_WECHAT);
mIsWechatInstall = !StringUtils.isEmpty(getWechatVersionName());
//判断Xposed是否安装
mXposedVersionName = AppUtils.getAppVersionName(context, AppUtils.PACKAGE_NAME_XPOSED);
mIsXposedInstall = !StringUtils.isEmpty(getXposedVersionName());
//检测安卓版本是否符合要求
mIsSupportAndroid = isContainAndroidVersion();
//判断微信版本是否符合要求
mIsSupportWechat = mIsWechatInstall && isContainWechatVersion();
}
//获取微信版本是否包含在支持列表中
private boolean isContainWechatVersion() {
if (mWechatVersionName == null) {
return false;
}
for (int i = 0; i < SupportVersion.wechatSupport.length; i++) {
if (mWechatVersionName.equals(SupportVersion.wechatSupport[i])) {
return true;
}
}
return false;
}
//获取微信版本是否包含在支持列表中
private boolean isContainAndroidVersion() {
if (mAndroidVersionName == null) {
return false;
}
for (int i = 0; i < SupportVersion.androidSupport.length; i++) {
if (mAndroidVersionName.equals(SupportVersion.androidSupport[i])) {
return true;
}
}
return false;
}
4、修改MainActivity,加入系统版本和微信版本的显示。
//初始化QMUIGroupListView
private void initMainContentView() {
AppInfo appInfo = AppInfo.getInstance();
boolean boolResult;
String strResult;
//region 系统版本与root状态
//系统版本
QMUICommonListItemView listItemSystem = mGroupListView.createItemView("系统版本");
listItemSystem.setDetailText("Android V" + appInfo.getAndroidVersionName());
boolResult = appInfo.isSupportAndroid();
listItemSystem.setImageDrawable(ContextCompat.getDrawable(this, boolResult? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
//是否已ROOT
QMUICommonListItemView listItemRoot = mGroupListView.createItemView("是否ROOT");
boolResult = appInfo.isDeviceRooted();
strResult = boolResult ? "已ROOT" : "未ROOT";
listItemRoot.setDetailText(strResult);
listItemRoot.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
QMUIGroupListView.newSection(this)
.setTitle("系统状态")
.addItemView(listItemSystem, null)
.addItemView(listItemRoot, null)
.addTo(mGroupListView);
//endregion
//region 微信版本状态
//微信安装版本
QMUICommonListItemView listItemWechatVersion = mGroupListView.createItemView("微信版本");
boolResult = appInfo.isWechatInstall();
listItemWechatVersion.setDetailText(boolResult ? "V" + appInfo.getWechatVersionName() : "未安装");
boolResult = appInfo.isSupportWechat();
listItemWechatVersion.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
QMUIGroupListView.newSection(this)
.setTitle("微信状态")
.addItemView(listItemWechatVersion, null)
.addTo(mGroupListView);
//endregion
//region Xposed框架状态
//Xposed版本
QMUICommonListItemView listItemXposed = mGroupListView.createItemView("Xposed版本");
boolResult = appInfo.isXposedInstall();
listItemXposed.setDetailText(boolResult ? "V" + appInfo.getXposedVersionName() : "未安装");
listItemXposed.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
//Xposed模块激活
QMUICommonListItemView listItemXposedActive = mGroupListView.createItemView("Xposed模块激活");
boolResult = appInfo.isXposedActive();
listItemXposedActive.setDetailText(boolResult ? "已激活" : "未激活");
listItemXposedActive.setImageDrawable(ContextCompat.getDrawable(this, boolResult ? R.drawable.qmui_icon_checkbox_checked : R.mipmap.icon_error));
QMUIGroupListView.newSection(this)
.setTitle("Xposed框架状态")
.addItemView(listItemXposed, null)
.addItemView(listItemXposedActive, null)
.addTo(mGroupListView);
//endregion
}
OK。完成这些修改,现在编译运行,看看效果。就是上图展示的效果啦。
这样 我们的软件是否能运行,就可以做一个简单的环境判断。
代码已提交GitHub:https://github.com/dalu2048/WeChatGenius
下篇,将引入网络请求包,获取网络数据。
链接:https://blog.csdn.net/weixin_42127613/article/details/81872403