fix(icon): 宽松 ShortX 图标库匹配规则,修复图标不显示问题
- 将 APK 扫描正则从 ic_remix_ 放宽到所有 ic_ 开头的图标 - 反射获取 R 时接受所有 ic_ 开头的字段,不再限\u5b9a ic_remix_ - 弹\u7a97\u9009\u62e9\u5668\u589e\u52a0\u9519\u8bef\u63d0\u793a\u548c\u5f3a\u5236\u91cd\u8bd5\u673a\u5236
This commit is contained in:
@@ -341,7 +341,8 @@ FloatBallAppWM.prototype.scanShortXIconsFromApk = function() {
|
|||||||
var out = [];
|
var out = [];
|
||||||
var seen = {};
|
var seen = {};
|
||||||
var paths = this.getShortXApkPaths();
|
var paths = this.getShortXApkPaths();
|
||||||
var regex = /^res\/drawable[^\/]*\/(ic_remix_[a-z0-9_]+|ic_shortx|ic_launcher|ic_menu_preferences)\.(xml|png|webp|jpg|jpeg)$/;
|
// 宽松匹配:匹配 res/drawable* 下所有以 ic_ 开头的图标,不限于 ic_remix_
|
||||||
|
var regex = /^res\/drawable[^\/]*\/(ic_[a-z0-9_]+)\.(xml|png|webp|jpg|jpeg)$/;
|
||||||
var lastErr = "";
|
var lastErr = "";
|
||||||
var pi;
|
var pi;
|
||||||
for (pi = 0; pi < paths.length; pi++) {
|
for (pi = 0; pi < paths.length; pi++) {
|
||||||
@@ -355,6 +356,8 @@ FloatBallAppWM.prototype.scanShortXIconsFromApk = function() {
|
|||||||
var m = regex.exec(name);
|
var m = regex.exec(name);
|
||||||
if (!m) continue;
|
if (!m) continue;
|
||||||
var fullName = String(m[1]);
|
var fullName = String(m[1]);
|
||||||
|
// 过\u6ee4\u6389\u7cfb\u7edf\u56fe\u6807,只\u4fdd\u7559 ShortX 自\u5b9a\u4e49\u56fe\u6807
|
||||||
|
if (fullName.indexOf("ic_launcher") === 0 || fullName.indexOf("ic_menu_") === 0) continue;
|
||||||
if (seen[fullName]) continue;
|
if (seen[fullName]) continue;
|
||||||
seen[fullName] = true;
|
seen[fullName] = true;
|
||||||
out.push({
|
out.push({
|
||||||
@@ -439,6 +442,7 @@ FloatBallAppWM.prototype.getShortXIconCatalog = function(forceReload) {
|
|||||||
var handle = this.getShortXResHandle();
|
var handle = this.getShortXResHandle();
|
||||||
if (handle && handle.cl) {
|
if (handle && handle.cl) {
|
||||||
try {
|
try {
|
||||||
|
// 尝试反射获取 R$drawable 类(未混淆时可用)
|
||||||
var clz = handle.cl.loadClass(CONST_SHORTX_PACKAGE + ".R$drawable");
|
var clz = handle.cl.loadClass(CONST_SHORTX_PACKAGE + ".R$drawable");
|
||||||
var fields = clz.getFields();
|
var fields = clz.getFields();
|
||||||
var i;
|
var i;
|
||||||
@@ -446,7 +450,7 @@ FloatBallAppWM.prototype.getShortXIconCatalog = function(forceReload) {
|
|||||||
try {
|
try {
|
||||||
var f = fields[i];
|
var f = fields[i];
|
||||||
var fname = String(f.getName());
|
var fname = String(f.getName());
|
||||||
if (fname.indexOf("ic_remix_") !== 0 && fname !== "ic_shortx" && fname !== "ic_launcher" && fname !== "ic_menu_preferences") continue;
|
if (fname.indexOf("ic_remix_") !== 0 && fname.indexOf("ic_") !== 0) continue;
|
||||||
out.push({
|
out.push({
|
||||||
name: fname,
|
name: fname,
|
||||||
shortName: (fname.indexOf("ic_remix_") === 0) ? fname.substring("ic_remix_".length) : fname,
|
shortName: (fname.indexOf("ic_remix_") === 0) ? fname.substring("ic_remix_".length) : fname,
|
||||||
@@ -455,7 +459,7 @@ FloatBallAppWM.prototype.getShortXIconCatalog = function(forceReload) {
|
|||||||
} catch (eField) {}
|
} catch (eField) {}
|
||||||
}
|
}
|
||||||
} catch (eClz) {
|
} catch (eClz) {
|
||||||
this._shortxIconCatalogError = String(eClz);
|
this._shortxIconCatalogError = "reflect: " + String(eClz);
|
||||||
safeLog(this.L, 'w', "getShortXIconCatalog reflect failed: " + String(eClz));
|
safeLog(this.L, 'w', "getShortXIconCatalog reflect failed: " + String(eClz));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3769,8 +3769,20 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
|
|||||||
var catalog = [];
|
var catalog = [];
|
||||||
try { catalog = self.getShortXIconCatalog() || []; } catch(e) {}
|
try { catalog = self.getShortXIconCatalog() || []; } catch(e) {}
|
||||||
if (!catalog.length) {
|
if (!catalog.length) {
|
||||||
self.toast("图标库未加载,请检查 ShortX 是否安装");
|
var errMsg = "\u56fe\u6807\u5e93\u672a\u52a0\u8f7d";
|
||||||
return null;
|
try { errMsg = self._shortxIconCatalogError || errMsg; } catch(e) {}
|
||||||
|
self.toast("\u56fe\u6807\u5e93\u672a\u52a0\u8f7d: " + errMsg);
|
||||||
|
// 尝试强\u5236\u91cd\u65b0\u52a0\u8f7d
|
||||||
|
try {
|
||||||
|
catalog = self.getShortXIconCatalog(true) || [];
|
||||||
|
if (!catalog.length) {
|
||||||
|
try { errMsg = self._shortxIconCatalogError || "\u91cd\u8bd5\u4ecd\u5931\u8d25"; } catch(e) {}
|
||||||
|
self.toast("\u56fe\u6807\u5e93\u91cd\u8bd5\u5931\u8d25: " + errMsg);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch(eRetry) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var selectedName = currentName;
|
var selectedName = currentName;
|
||||||
|
|||||||
Reference in New Issue
Block a user