Skip to content

Commit 525f4a8

Browse files
author
SimpleLang
committed
S1.01: Unified dark theme for all 3 IDEs (#0a0a0c + #c7a56b), learn center header fix + nav simplification (remove v200/v301/v366 top links), mobile IDE topbar restructure (run/export/snippets drawer, ed-switch→statusbar), bottom panel 44→32vh for bigger code area, email hicodehc@outlook.com revert, S1.01 version bump, offline + APK rebuild
1 parent 86cc5bb commit 525f4a8

33 files changed

Lines changed: 506 additions & 462 deletions

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ pkg/node_modules/
1010
pkg/build/
1111
*.log
1212
.DS_Store
13+
*.bak

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Simple(简称 **SimpleLang**)的诞生源于一个朴素的愿望:**让编
7171

7272
如果你有任何想法、建议或反馈,欢迎通过产品建议邮箱与我们联系:
7373

74-
📮 **simple-lang@outlook.com**
74+
📮 **hicodehc@outlook.com**
7575

7676
## 免责声明
7777

@@ -86,7 +86,7 @@ Simple 目前仍处于持续开发与完善阶段。本站及本仓库中所展
8686
- **SimpleLang** —— `非注册商标`
8787
- **HcLogo** —— `非注册商标`
8888

89-
上述名称与图形标识仅作为本项目的内部名称、工程代号与品牌自称使用。若其中任一名称或图形与任何第三方已合法注册的商标、商号或受保护作品相同或近似,相关权利归属以相应权利人及当地法律为准。如你认为存在侵权情形,请通过 **[simple-lang@outlook.com](mailto:simple-lang@outlook.com)** 与我们联系,我们将在合理时间内核实并处理(包括删除或修改相应名称/标识)。
89+
上述名称与图形标识仅作为本项目的内部名称、工程代号与品牌自称使用。若其中任一名称或图形与任何第三方已合法注册的商标、商号或受保护作品相同或近似,相关权利归属以相应权利人及当地法律为准。如你认为存在侵权情形,请通过 **[hicodehc@outlook.com](mailto:hicodehc@outlook.com)** 与我们联系,我们将在合理时间内核实并处理(包括删除或修改相应名称/标识)。
9090

9191
更完整、详细的免责声明见官网《[完整免责声明](https://SimpleHC.github.io/disclaimer.html)》。
9292

‎android/css/style.css‎

Lines changed: 97 additions & 74 deletions
Large diffs are not rendered by default.

‎android/index.html‎

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>Simple · 手机开发环境 S1.00(安卓端)</title>
6+
<title>Simple · 手机开发环境 S1.01(安卓端)</title>
77
<link rel="icon" href="/assets/favicon.svg" type="image/svg+xml" />
88
<link rel="icon" href="/assets/favicon-32.png" sizes="32x32" type="image/png" />
99
<link rel="icon" href="/assets/favicon-16.png" sizes="16x16" type="image/png" />
@@ -18,18 +18,14 @@
1818
<div class="brand" id="btnHome" title="返回首页">
1919
<span class="logo-dot"></span>
2020
<span class="brand-name">Simple</span>
21-
<span class="ver" id="verTag">S1.00 · 手机端</span>
21+
<span class="ver" id="verTag">S1.01 · 手机端</span>
2222
</div>
2323
<div class="crumb" id="crumb" title="当前文件">—</div>
2424
<div class="actions">
25-
<div class="ed-switch" id="edSwitch" title="切换 SIMPLE 版本:M 轻量(仅 SIMPLE 内核)/ R 标准(+Python 编译)/ X 全能(+Python +C++ 编译)。切换后预览与导出页面均按所选版本编译">
26-
<button type="button" class="ed-btn" data-ed="m">M</button>
27-
<button type="button" class="ed-btn" data-ed="r">R</button>
28-
<button type="button" class="ed-btn on" data-ed="x">X</button>
29-
</div>
30-
<button id="btnLive" class="btn ghost live" title="观看实时转译:立即把当前页面 SIMPLE 代码转译为 HTML">✓ 实时转译</button>
25+
<button id="btnRun" class="btn solid" title="实时转译(▶ 运行)">▶</button>
26+
<button class="mini" id="btnSnippets" title="插入代码片段">{}</button>
3127
<div class="menu-wrap">
32-
<button id="btnExport" class="btn solid">导出 ▾</button>
28+
<button id="btnExport" class="btn ghost">导出 ▾</button>
3329
<div class="menu" id="exportMenu">
3430
<div class="menu-title">导出当前项目</div>
3531
<button data-act="hc">导出 .hc(可导入继续开发)</button>
@@ -44,6 +40,17 @@
4440
</div>
4541
</header>
4642

43+
<!-- ===== 代码片段抽屉 ===== -->
44+
<div class="menu snippet-menu" id="snippetMenu">
45+
<div class="menu-title">插入代码片段</div>
46+
<button type="button" class="snippet" data-snip="region">+ 触发区域</button>
47+
<button type="button" class="snippet" data-snip="use">+ 标准库 use</button>
48+
<button type="button" class="snippet" data-snip="app">+ 下载文件</button>
49+
<button type="button" class="snippet" data-snip="html">+ 原生 HTML</button>
50+
<button type="button" class="snippet" data-snip="py" data-ed="rx">+ Python</button>
51+
<button type="button" class="snippet" data-snip="cpp" data-ed="x">+ C++</button>
52+
</div>
53+
4754
<div class="layout">
4855
<!-- ===== 移动端侧栏抽屉遮罩 ===== -->
4956
<div class="drawer-scrim" id="drawerScrim" hidden></div>
@@ -153,7 +160,7 @@
153160
<div class="console-welcome">
154161
<span class="cw-logo">H</span>
155162
<div class="cw-text">
156-
<span class="cw-title">Simple · SIMPLE 手机开发环境 S1.00(安卓端)</span>
163+
<span class="cw-title">Simple · SIMPLE 手机开发环境 S1.01(安卓端)</span>
157164
<span class="cw-sub">SIMPLE 引擎已就绪 · 正在加载编辑器…</span>
158165
</div>
159166
</div>
@@ -190,6 +197,11 @@
190197

191198
<div class="statusbar" id="statusbar">
192199
<span class="sb-left" id="sbLeft">就绪</span>
200+
<span class="ed-switch mini-ed" id="edSwitch" title="切换 SIMPLE 版本:M 轻量 / R 标准(+Python)/ X 全能(+Python +C++)">
201+
<button type="button" class="ed-btn" data-ed="m">M</button>
202+
<button type="button" class="ed-btn" data-ed="r">R</button>
203+
<button type="button" class="ed-btn on" data-ed="x">X</button>
204+
</span>
193205
<span class="sb-right" id="sbRight">行 1, 列 1 · UTF-8 · LF · SIMPLE</span>
194206
</div>
195207
</main>

‎android/js/app.js‎

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
modalBody: $("modalBody"),
5050
addProject: $("addProject"),
5151
addPage: $("addPage"),
52-
btnLive: $("btnLive"),
52+
btnRun: $("btnRun"), btnSnippets: $("btnSnippets"), snippetMenu: $("snippetMenu"), btnLive: $("btnLive"),
5353
btnExport: $("btnExport"),
5454
edSwitch: $("edSwitch"),
5555
fileImg: $("fileImg"),
@@ -129,7 +129,7 @@
129129
if (typeof SimpleLang !== "undefined" && SimpleLang.setEdition) SimpleLang.setEdition(ed);
130130
try { window.SIMPLE_EDITION = ed; } catch (e) {}
131131
const VT = document.getElementById("verTag");
132-
if (VT) VT.textContent = "S1.00 · " + ED_NAME[ed];
132+
if (VT) VT.textContent = "S1.01 · " + ED_NAME[ed];
133133
if (el.edSwitch) Array.prototype.forEach.call(el.edSwitch.querySelectorAll(".ed-btn"), function (b) {
134134
b.classList.toggle("on", b.getAttribute("data-ed") === ed);
135135
});
@@ -756,11 +756,14 @@
756756
el.code.setSelectionRange(pos, pos);
757757
if (window.hiced) { el.code.scrollTop = (hit.line - 4) * 23; window.hiced.render(); }
758758
});
759-
el.btnLive.onclick = function () {
759+
// ▶ 运行(原 btnLive 实时转译)
760+
if (el.btnRun) el.btnRun.onclick = function () {
760761
doLive();
761762
document.querySelector('[data-tab="preview"]').click();
762763
setStatus("已实时转译当前页面");
763764
};
765+
// btnLive 兼容(某些发布形态仍引用)
766+
if (el.btnLive) el.btnLive.onclick = el.btnRun ? el.btnRun.onclick : function () { doLive(); };
764767
// 顶部工作区 tab
765768
Array.prototype.forEach.call(document.querySelectorAll(".tab"), function (t) {
766769
t.onclick = function () {
@@ -786,7 +789,16 @@
786789
});
787790
// 导出下拉
788791
el.btnExport.onclick = function () { el.exportMenu.classList.toggle("open"); };
789-
document.addEventListener("click", function (e) { if (!e.target.closest(".menu-wrap")) el.exportMenu.classList.remove("open"); });
792+
// snippet 抽屉
793+
if (el.btnSnippets) el.btnSnippets.onclick = function (e) {
794+
e.stopPropagation();
795+
if (el.exportMenu) el.exportMenu.classList.remove("open");
796+
el.snippetMenu.classList.toggle("open");
797+
};
798+
document.addEventListener("click", function (e) {
799+
if (!e.target.closest(".menu-wrap")) el.exportMenu.classList.remove("open");
800+
if (el.snippetMenu && !e.target.closest("#snippetMenu") && !e.target.closest("#btnSnippets")) el.snippetMenu.classList.remove("open");
801+
});
790802
Array.prototype.forEach.call(el.exportMenu.querySelectorAll("button"), function (b) {
791803
b.onclick = function () {
792804
el.exportMenu.classList.remove("open");
@@ -862,6 +874,7 @@
862874
// (「+ Python / + C++」按钮随版本显隐由 applyEditionUI 统一处理)
863875
Array.prototype.forEach.call(document.querySelectorAll(".snippet"), function (b) {
864876
b.onclick = function () {
877+
if (el.snippetMenu) el.snippetMenu.classList.remove("open");
865878
const snip = b.getAttribute("data-snip");
866879
const code = el.code, s = code.selectionStart;
867880
if (snip === "region") {

‎android/js/hic.js‎

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
})(typeof self !== 'undefined' ? self : null, function () {
1212
"use strict";
1313

14-
const APP = { version: "S1.00", name: "Simple", lang: "SIMPLE" };
14+
const APP = { version: "S1.01", name: "Simple", lang: "SIMPLE" };
1515
// 当前发布形态:r=标准(+py) / m=轻量(仅hic) / x=全能(+py+cpp)。
1616
// 导出的 HTML 会在 head 写入 window.SIMPLE_EDITION,由内建编译器宿主据此决定编译哪些语言。
1717
let EDITION = "x"; // 源码/网页在线版默认全能(X);离线单文件按 R/M/X 各自注入。可用 SimpleLang.setEdition() 覆盖。
1818
function setEdition(e) { EDITION = String(e || "").toLowerCase()[0] === "r" ? "r" : String(e || "").toLowerCase()[0] === "m" ? "m" : "x"; }
19-
// S1.00 三版发布:R(标准,+py) / M(轻量,仅hic) / X(全能,+py+cpp)。
19+
// S1.01 三版发布:R(标准,+py) / M(轻量,仅hic) / X(全能,+py+cpp)。
2020
// 引擎统一解析全部语言块,具体版本决定「哪些语言可被 SIMPLE 编译进 HTML」以及打包形态。
2121
// 块语法:html:(…)end(原样 HTML)、py:(…)end(SIMPLE 编译 Python→HTML)、cpp:(…)end(SIMPLE 编译 C++→HTML)
2222
const BLOCK_LANG = { html: "html", py: "py", py3: "py", cpp: "cpp", cxx: "cpp" };
@@ -80,7 +80,7 @@
8080
if (FULLWIDTH_OPS[c]) { out.push({ t: FULLWIDTH_OPS[c], v: FULLWIDTH_OPS[c] }); i++; continue; }
8181
if (c === "(") { out.push({ t: "(", v: c }); i++; continue; }
8282
if (c === ")") { out.push({ t: ")", v: c }); i++; continue; }
83-
/* ---- S1.00 扩展:列表/字典字面量 token ---- */
83+
/* ---- S1.01 扩展:列表/字典字面量 token ---- */
8484
if (c === "[") { out.push({ t: "[", v: c }); i++; continue; }
8585
if (c === "]") { out.push({ t: "]", v: c }); i++; continue; }
8686
if (c === "{") { out.push({ t: "{", v: c }); i++; continue; }
@@ -120,7 +120,7 @@
120120
const sL = String(l), sR = String(r);
121121
if (op === "==") return numL && numR ? l === r : sL === sR;
122122
if (op === "!=") return numL && numR ? l !== r : sL !== sR;
123-
/* ---- S1.00 扩展:列表/字典 in 操作符 ---- */
123+
/* ---- S1.01 扩展:列表/字典 in 操作符 ---- */
124124
if (op === "in") {
125125
if (Array.isArray(r)) return r.indexOf(l) >= 0;
126126
if (r && typeof r === "object") return l in r;
@@ -135,7 +135,7 @@
135135
return false;
136136
}
137137

138-
/* ---- S1.00 扩展:evalExpr 内置函数库 ---- */
138+
/* ---- S1.01 扩展:evalExpr 内置函数库 ---- */
139139
const BUILTINS = {
140140
len: function (x) {
141141
if (x == null) return 0;
@@ -198,7 +198,7 @@
198198
if (typeof v === "number") return v !== 0;
199199
return String(v).length > 0;
200200
}
201-
/* ---- S1.00 扩展:primary 处理列表、字典、内置函数调用 ---- */
201+
/* ---- S1.01 扩展:primary 处理列表、字典、内置函数调用 ---- */
202202
function primary() {
203203
const t = next();
204204
if (!t) return "";
@@ -275,7 +275,7 @@
275275
}
276276
return v;
277277
}
278-
/* ---- S1.00 扩展:字符串拼接(+ 操作数含字符串时用 String() 拼接)---- */
278+
/* ---- S1.01 扩展:字符串拼接(+ 操作数含字符串时用 String() 拼接)---- */
279279
function addSub() {
280280
let v = mulDiv();
281281
while (peek() && (peek().t === "+" || peek().t === "-")) {
@@ -368,14 +368,14 @@
368368
// for 循环头:for 变量 in 迭代源:
369369
const form = line.match(/^for\s+([A-Za-z_\u4e00-\u9fff][A-Za-z0-9_\u4e00-\u9fff]*)\s+in\s+(.+?)\s*:\s*$/i);
370370
if (form) return { kind: "for", var: form[1], iter: form[2].trim() };
371-
/* ---- S1.00 扩展:新语句分类(while / break / continue / set / let / opset / say)---- */
371+
/* ---- S1.01 扩展:新语句分类(while / break / continue / set / let / opset / say)---- */
372372
// while 条件: 循环头
373373
const whileM = line.match(/^while\s+(.+?)\s*:\s*$/i);
374374
if (whileM) return { kind: "while", cond: whileM[1].replace(/:\s*$/, "").trim() };
375375
// break / continue
376376
if (/^break\s*$/.test(line)) return { kind: "break" };
377377
if (/^continue\s*$/.test(line)) return { kind: "continue" };
378-
/* ---- S1.00 扩展:fn 定义 / fn end / call / return / raise ---- */
378+
/* ---- S1.01 扩展:fn 定义 / fn end / call / return / raise ---- */
379379
const fnStart = line.match(/^fn\s+([A-Za-z_\u4e00-\u9fff][A-Za-z0-9_\u4e00-\u9fff]*)\s*\(([^)]*)\)\s*:\s*$/i);
380380
if (fnStart) {
381381
const params = fnStart[2].split(",").map(function (s) { return s.trim(); }).filter(Boolean);
@@ -461,7 +461,7 @@
461461
for (let li = 0; li < rawLines.length; li++) {
462462
const raw = rawLines[li];
463463
const mt = raw.match(/^[ \t]*/)[0];
464-
/* ---- S1.00 扩展:// 多行注释 ---- */
464+
/* ---- S1.01 扩展:// 多行注释 ---- */
465465
const lt = raw.replace(/(^|[ \t])\/\/.*$/, "").replace(/(^|[ \t])#.*$/, "").trim();
466466
if (/^(html|py|py3|cpp|cxx)\s*:\s*\(\s*$/i.test(lt)) {
467467
const lang = mapLang(lt.match(/^([a-z0-9]+)\s*:/i)[1]);
@@ -519,14 +519,14 @@
519519
const bodyEndFor = collectUntil(i, end, indentGoal);
520520
out.push({ kind: "for", var: st.var, iter: st.iter, body: build(i, bodyEndFor, minIndent(i, bodyEndFor)) });
521521
i = bodyEndFor;
522-
/* ---- S1.00 扩展:while 块收集 ---- */
522+
/* ---- S1.01 扩展:while 块收集 ---- */
523523
} else if (st.kind === "while") {
524524
if (pendingIf) { out.push(pendingIf); pendingIf = null; }
525525
i++;
526526
const bodyEndW = collectUntil(i, end, indentGoal);
527527
out.push({ kind: "while", cond: st.cond, body: build(i, bodyEndW, minIndent(i, bodyEndW)) });
528528
i = bodyEndW;
529-
/* ---- S1.00 扩展:fn 块收集 ---- */
529+
/* ---- S1.01 扩展:fn 块收集 ---- */
530530
} else if (st.kind === "fnStart") {
531531
if (pendingIf) { out.push(pendingIf); pendingIf = null; }
532532
const fnName = st.name; const fnParams = st.params;
@@ -615,7 +615,7 @@
615615
collectVars(n.body, vars);
616616
n.chains.forEach(function (c) { collectVars(c.body, vars); });
617617
if (n.orphan) { /* orphan body already collected */ }
618-
/* ---- S1.00 扩展:fnStart 跳过 body(编译期内联时才处理)---- */
618+
/* ---- S1.01 扩展:fnStart 跳过 body(编译期内联时才处理)---- */
619619
} else if (n.kind === "while") {
620620
collectVars(n.body, vars);
621621
} else if (n.kind === "fnStart") {
@@ -719,7 +719,7 @@
719719
return 0;
720720
}
721721

722-
/* ---- S1.00 扩展:函数表收集(编译期内联用)---- */
722+
/* ---- S1.01 扩展:函数表收集(编译期内联用)---- */
723723
function collectFns(nodes, out) {
724724
const o = out || {};
725725
// 简化:仅收集顶层 fn,不进 fn body 内部(不支持嵌套高阶函数)
@@ -737,7 +737,7 @@
737737

738738
function renderNodes(nodes, vars, ctx, out) {
739739
nodes.forEach(function (n) {
740-
/* ---- S1.00 扩展:break/continue/return/raise 传播 ---- */
740+
/* ---- S1.01 扩展:break/continue/return/raise 传播 ---- */
741741
if (ctx && (ctx.breakFlag || ctx.continueFlag || ctx.returnFlag || ctx.raiseFlag)) return;
742742
if (n.kind === "it") {
743743
out.push(n); // 声明保留(供变量面板)
@@ -759,7 +759,7 @@
759759
// 逐个取值渲染循环体,循环变量按普通变量注入
760760
const vals = iterVals(n.iter, vars);
761761
vals.forEach(function (val) {
762-
/* ---- S1.00 扩展:循环内 break/continue/return/raise 传播 ---- */
762+
/* ---- S1.01 扩展:循环内 break/continue/return/raise 传播 ---- */
763763
if (ctx && (ctx.breakFlag || ctx.returnFlag || ctx.raiseFlag)) { ctx.breakFlag = false; return; }
764764
const prev = vars[n.var];
765765
vars[n.var] = { type: "ordinary", value: val, isImg: false };
@@ -796,7 +796,7 @@
796796
out.push({ kind: "cppBlock", lang: "cpp", code: n.code });
797797
} else if (n.kind === "textline") {
798798
out.push({ kind: "textline", text: n.text });
799-
/* ---- S1.00 扩展:break / continue / while / set / let / opset / say / fn / call / return / raise ---- */
799+
/* ---- S1.01 扩展:break / continue / while / set / let / opset / say / fn / call / return / raise ---- */
800800
} else if (n.kind === "break") {
801801
if (ctx) ctx.breakFlag = true;
802802
return;
@@ -839,7 +839,7 @@
839839
// 编译期 while 展开:条件动态求值,最多 50 次(安全上限,不是语言限制)
840840
let safety = 0;
841841
while (safety++ < 50) {
842-
/* ---- S1.00 扩展:while 内 break/return/raise 传播 ---- */
842+
/* ---- S1.01 扩展:while 内 break/return/raise 传播 ---- */
843843
if (ctx && (ctx.breakFlag || ctx.returnFlag || ctx.raiseFlag)) { ctx.breakFlag = false; break; }
844844
let condVal = false;
845845
try { condVal = evalExpr(n.cond, vars); } catch (e) {}
@@ -899,7 +899,7 @@
899899
v.value = (f && f.dataURL) || "";
900900
}
901901
});
902-
/* ---- S1.00 扩展:收集函数表并传入 renderNodes ---- */
902+
/* ---- S1.01 扩展:收集函数表并传入 renderNodes ---- */
903903
const FN_TABLE = collectFns(nodes, {});
904904
const items = renderNodes(nodes, vars, { fnTable: FN_TABLE }, []);
905905
return { vars, items };
@@ -953,7 +953,7 @@
953953
".hic-ext-out{margin-top:8px;padding:12px 16px;border-radius:12px;background:rgba(217,174,107,.08);border:1px dashed rgba(217,174,107,.35);}",
954954
".hic-ext-state{font-size:12.5px;color:#8d7f63;}",
955955
".hic-ext-run{margin:0;padding-top:6px;font:13px/1.6 ui-monospace,Consolas,Menlo,monospace;color:#d9ae6b;white-space:pre-wrap;word-break:break-word;}",
956-
/* ---- S1.00 扩展:raise 样式 ---- */
956+
/* ---- S1.01 扩展:raise 样式 ---- */
957957
".hic-raise{color:#c05a5a;font-weight:700;}",
958958
"@media(max-width:700px){.hic-text{font-size:32px;}}"
959959
].join("\n");
@@ -1035,7 +1035,7 @@
10351035
if (it.kind === "textline") {
10361036
return '<p class="hic-item hic-body">' + esc(it.text) + "</p>";
10371037
}
1038-
/* ---- S1.00 扩展:say / raise 输出 ---- */
1038+
/* ---- S1.01 扩展:say / raise 输出 ---- */
10391039
if (it.kind === "say") {
10401040
return '<p class="hic-item hic-body">' + esc(it.text) + "</p>";
10411041
}

‎android/js/store.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"use strict";
2424

2525
const KEY = "SIMPLE_DATA";
26-
const STORE_VERSION = "S1.00";
26+
const STORE_VERSION = "S1.01";
2727

2828
function uuid() {
2929
return "h" + Date.now().toString(36) + Math.random().toString(36).slice(2, 8);

‎build/pack/android/pack-apk.sh‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ GRADLE_USER_HOME="${GRADLE_USER_HOME:-/workspace/.gradle}"
1212

1313
mkdir -p "$ASSETS"
1414
for KEY in M R X; do
15-
file="Simple-S1.00${KEY}-offline.html"
15+
file="Simple-S1.01${KEY}-offline.html"
1616
[ -f "$OFF/$file" ] || { echo "缺少 $file"; exit 1; }
1717
cp "$OFF/$file" "$ASSETS/index.html"
1818
echo "▶ 构建 $KEY apk …"
1919
( cd "$SRC" && GRADLE_USER_HOME="$GRADLE_USER_HOME" \
2020
/root/.local/share/mise/shims/gradle assembleDebug \
2121
-PappId=com.simplelang.android.$(echo $KEY | tr A-Z a-z) \
22-
-PappLabel="Simple-S1.00${KEY}" )
22+
-PappLabel="Simple-S1.01${KEY}" )
2323
apk=$(find "$OUT_DIR" -name "app-debug.apk" | head -1)
2424
[ -n "$apk" ] || { echo "$KEY 打包失败:未找到 app-debug.apk"; exit 1; }
25-
cp "$apk" "$OFF/Simple-S1.00${KEY}-android.apk"
26-
echo "✓ $KEY → Simple-S1.00${KEY}-android.apk($(du -m "$OFF/Simple-S1.00${KEY}-android.apk" | cut -f1) MB)"
25+
cp "$apk" "$OFF/Simple-S1.01${KEY}-android.apk"
26+
echo "✓ $KEY → Simple-S1.01${KEY}-android.apk($(du -m "$OFF/Simple-S1.01${KEY}-android.apk" | cut -f1) MB)"
2727
done
28-
echo "全部 apk 完成:" ; ls -la "$OFF"/Simple-S1.00?-android.apk
28+
echo "全部 apk 完成:" ; ls -la "$OFF"/Simple-S1.01?-android.apk

0 commit comments

Comments
 (0)