Compare commits
89 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23968eb1fc | ||
|
|
2aac0e57d7 | ||
|
|
ed1c4aa9b1 | ||
|
|
f2eb3e0491 | ||
|
|
d17e515981 | ||
|
|
10f481f976 | ||
|
|
c10d2b733f | ||
|
|
417cf7feef | ||
|
|
7b219facfe | ||
|
|
ed3ec63212 | ||
|
|
8f26ed77e7 | ||
|
|
db4431d4c7 | ||
|
|
0793f589f2 | ||
|
|
1f8b83ddb1 | ||
|
|
ceca9a1892 | ||
|
|
4cb8bfb01e | ||
|
|
645e60cf83 | ||
|
|
350f4e93ef | ||
|
|
ee22cbc1d9 | ||
|
|
51c67ac546 | ||
|
|
ba43ec7ad0 | ||
|
|
1203dcf737 | ||
|
|
d9c4c24adc | ||
|
|
3b84c7da2c | ||
|
|
3a6d22956f | ||
|
|
8b5013a479 | ||
|
|
6d924bded9 | ||
|
|
6ff16e3559 | ||
|
|
cd8fea5f98 | ||
|
|
83a544acda | ||
|
|
c80be46909 | ||
|
|
90be3dc9ee | ||
|
|
45d60d6519 | ||
|
|
d8b4390c03 | ||
|
|
0e186e93f7 | ||
|
|
b788cea689 | ||
|
|
affc3173ef | ||
|
|
6b67ddaf9a | ||
|
|
009cd4ebe2 | ||
|
|
7e685fae64 | ||
|
|
91688ec4ae | ||
|
|
ba62910793 | ||
|
|
e1f24796b2 | ||
|
|
23b7889fcc | ||
|
|
db0689a9bd | ||
|
|
9f294af413 | ||
|
|
304df8ca96 | ||
|
|
c0795474cf | ||
|
|
1f596424f2 | ||
|
|
e86fb4e3a9 | ||
|
|
ee230f91dd | ||
|
|
b5cbda42cb | ||
|
|
fd535f0e20 | ||
|
|
a5a381604d | ||
|
|
a911efdc54 | ||
|
|
49c2377e46 | ||
|
|
a117050fde | ||
|
|
958d7839ff | ||
|
|
106b5fc325 | ||
|
|
699f1eef37 | ||
|
|
905ff609b1 | ||
|
|
70c2018ddf | ||
|
|
b1895af653 | ||
|
|
62995e0a5d | ||
|
|
5ebbaf7073 | ||
|
|
cb1f4b23ee | ||
|
|
0d2f5f4e91 | ||
|
|
d54d1ef6f3 | ||
|
|
0377aa7b8f | ||
|
|
232afe9929 | ||
|
|
fcb472594d | ||
|
|
aa6d0feed7 | ||
|
|
1ee935105e | ||
|
|
7242c45e38 | ||
|
|
d0a539d6dc | ||
|
|
3e443ceedc | ||
|
|
b50622787d | ||
|
|
231d1167e0 | ||
|
|
a956d26f6d | ||
|
|
c2ee3b694c | ||
|
|
09bf75beed | ||
|
|
b00ede9483 | ||
|
|
b8393dacfd | ||
|
|
ce5ad3b758 | ||
|
|
cf15e2e07d | ||
|
|
938745036d | ||
|
|
b3428555c6 | ||
|
|
2a19c5eb78 | ||
|
|
54a941da63 |
96
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
name: Bug 报告
|
||||
description: 报告软件异常行为(提交前请阅读所有说明文字)
|
||||
title: "[Bug] "
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**必读须知:**
|
||||
- 请先搜索[所有issue](https://github.com/Cateners/tiny_computer/issues?q=is%3Aissue),**相同问题重复提交会被直接关闭**
|
||||
- 请先自查[常见使用问题](https://gitee.com/caten/tc-hints/blob/master/pool/faq.md),是否能解决你的问题
|
||||
- 本模板中的每项要求都有其特定原因,请完整填写
|
||||
|
||||
- type: input
|
||||
id: device
|
||||
attributes:
|
||||
label: "设备型号"
|
||||
description: |
|
||||
**为什么需要这个信息?**
|
||||
许多Bug与设备强相关,例如:
|
||||
- 三星OneUI 7无法使用v1.0.23及以下版本(issue #303)
|
||||
- 鸿蒙4缺少无线调试选项
|
||||
placeholder: "品牌+具体型号"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: os-version
|
||||
attributes:
|
||||
label: "操作系统版本"
|
||||
description: |
|
||||
**为什么需要这个信息?**
|
||||
Android各版本存在兼容性差异
|
||||
placeholder: "完整系统名称+版本号"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: app-version
|
||||
attributes:
|
||||
label: "小小电脑版本"
|
||||
description: |
|
||||
**为什么需要这个信息?**
|
||||
1. 旧版问题可能已在新版修复(请始终使用最新版)
|
||||
2. 不同桌面环境(XFCE/LXQT/GXDE)行为可能不同
|
||||
**如果不是最新版,请做好问题被忽略的准备**
|
||||
placeholder: "版本号+桌面环境(如:v1.0.23 GXDE)"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: is-latest
|
||||
attributes:
|
||||
label: "是否最新版?"
|
||||
options:
|
||||
- "是"
|
||||
- "否"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: why-not-latest
|
||||
attributes:
|
||||
label: "若非最新版,必须说明原因"
|
||||
placeholder: "详细解释原因..."
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: "出现问题的重现步骤"
|
||||
description: |
|
||||
**为什么需要详细步骤?**
|
||||
Linux的自由度极高,任何操作都可能影响结果,例如:
|
||||
- 是否通过sudo运行?
|
||||
- 是否修改过环境变量?
|
||||
- 是否安装过第三方依赖?
|
||||
placeholder: "也许可以从启动软件开始逐步描述..."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: "提供终端截图或其他相关信息"
|
||||
description: |
|
||||
**为什么需要这些?**
|
||||
文字描述可能遗漏关键信息
|
||||
placeholder: "粘贴日志文本或拖入图片..."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**问题优先级说明:**
|
||||
本软件的初衷是安装PC级软件如WPS、CAJ Viewer、亿图图示。和这些软件相关的问题会得到重视。如果是其他问题得视情况(受限于精力和能力...),没能修复的issue会保留以让更多人看到,也许网友会有更好的解决办法!
|
||||
95
.github/ISSUE_TEMPLATE/bug_report_eng.yml
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
name: Bug Report
|
||||
description: Report abnormal software behavior (please read all instructions before submitting)
|
||||
title: "[Bug] "
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**Important Notes:**
|
||||
- First search [all issues](https://github.com/Cateners/tiny_computer/issues?q=is%3Aissue). **Duplicate reports will be closed immediately**
|
||||
- Every requirement in this template has its specific purpose. Please complete all fields
|
||||
|
||||
- type: input
|
||||
id: device
|
||||
attributes:
|
||||
label: "Device Model"
|
||||
description: |
|
||||
**Why is this needed?**
|
||||
Many bugs are device-specific, such as:
|
||||
- Samsung OneUI 7 incompatible with v1.0.23 and below (issue #303)
|
||||
- HarmonyOS 4 missing wireless debugging option
|
||||
placeholder: "Brand + specific model"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: os-version
|
||||
attributes:
|
||||
label: "Operating System Version"
|
||||
description: |
|
||||
**Why is this needed?**
|
||||
Compatibility varies across Android versions
|
||||
placeholder: "Full OS name + version number"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: app-version
|
||||
attributes:
|
||||
label: "Tiny Computer Version"
|
||||
description: |
|
||||
**Why is this needed?**
|
||||
1. Old version issues may have been fixed in newer releases (always use the latest version)
|
||||
2. Different desktop environments (XFCE/LXQT/GXDE) may behave differently
|
||||
**If not using the latest version, be prepared for your issue to be ignored**
|
||||
placeholder: "Version number + desktop environment (e.g., v1.0.23 GXDE)"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: is-latest
|
||||
attributes:
|
||||
label: "Is this the latest version?"
|
||||
options:
|
||||
- "Yes"
|
||||
- "No"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: why-not-latest
|
||||
attributes:
|
||||
label: "If not latest version, explanation is mandatory"
|
||||
placeholder: "Explain in detail..."
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: "Steps to reproduce the issue"
|
||||
description: |
|
||||
**Why detailed steps?**
|
||||
Linux offers extreme flexibility where any operation may affect results, such as:
|
||||
- Did you run with sudo?
|
||||
- Modified environment variables?
|
||||
- Installed third-party dependencies?
|
||||
placeholder: "Maybe start from launching the application..."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: "Provide terminal screenshots or other relevant information"
|
||||
description: |
|
||||
**Why is this needed?**
|
||||
Text descriptions might omit critical details
|
||||
placeholder: "Paste log text or drag images here..."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**Issue Priority Explanation:**
|
||||
This software's primary purpose is running PC-level applications like WPS, CAJ Viewer, and Edraw Max. Issues related to these applications will receive priority. Other issues will be handled case-by-case (limited by time and capabilities...). Unresolved issues will remain open for community visibility - maybe someone has a better solution!
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 获取帮助或提问
|
||||
url: https://github.com/Cateners/tiny_computer/discussions
|
||||
about: 请在这里提问和讨论,不要将其作为 Issue。
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: 功能请求
|
||||
description: "请先确认:该功能是否能显著提升小小电脑的使用体验?"
|
||||
title: "[Feature] "
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**必读须知:**
|
||||
- 请先搜索[所有issue](https://github.com/Cateners/tiny_computer/issues?q=is%3Aissue),**相同问题重复提交会被直接关闭**
|
||||
|
||||
- type: textarea
|
||||
id: rationale
|
||||
attributes:
|
||||
label: "必须说明使用场景和价值"
|
||||
description: |
|
||||
**为什么需要这个?(附用户调研数据或统计截图更佳,避免主观描述)**
|
||||
因为精力有限,我会更高可能采纳有价值且易实现的功能。没能处理的issue会保留以让更多人看到,也许网友会有更好的解决办法!
|
||||
validations:
|
||||
required: true
|
||||
20
.github/ISSUE_TEMPLATE/feature_request_eng.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Feature Request
|
||||
description: "Please confirm first: Will this feature significantly improve the user experience of Tiny Computer?"
|
||||
title: "[Feature] "
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**Important Notes:**
|
||||
- Please search [all issues](https://github.com/Cateners/tiny_computer/issues?q=is%3Aissue) first. **Duplicate submissions will be closed directly**
|
||||
|
||||
- type: textarea
|
||||
id: rationale
|
||||
attributes:
|
||||
label: "Must specify usage scenarios and value"
|
||||
description: |
|
||||
**Why is this needed? (User research data or screenshot statistics are preferred. Avoid subjective descriptions.)**
|
||||
Due to limited resources, I'm more likely to adopt valuable and easily implementable features. Unaddressed issues will remain visible for community solutions!
|
||||
validations:
|
||||
required: true
|
||||
17
.gitignore
vendored
@@ -39,10 +39,27 @@ app.*.symbols
|
||||
app.*.map.json
|
||||
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/build
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
/android/app/.cxx
|
||||
|
||||
/backup
|
||||
|
||||
assets/xa*
|
||||
assets/patch.tar.gz
|
||||
|
||||
android/app/src/main/jniLibs/*
|
||||
|
||||
devtools_options.yaml
|
||||
|
||||
lib/l10n/app_localizations*
|
||||
|
||||
# Keystore files
|
||||
*.jks
|
||||
*.keystore
|
||||
|
||||
# Configuration files
|
||||
android/keystore.properties
|
||||
android/local.properties
|
||||
0
.gitmodules
vendored
Normal file
25
.metadata
@@ -4,7 +4,7 @@
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: "efbf63d9c66b9f6ec30e9ad4611189aa80003d31"
|
||||
revision: "edada7c56edf4a183c1735310e123c7f923584f1"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
@@ -13,26 +13,11 @@ project_type: app
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
create_revision: edada7c56edf4a183c1735310e123c7f923584f1
|
||||
base_revision: edada7c56edf4a183c1735310e123c7f923584f1
|
||||
- platform: android
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
- platform: ios
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
- platform: linux
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
- platform: macos
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
- platform: web
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
- platform: windows
|
||||
create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31
|
||||
create_revision: edada7c56edf4a183c1735310e123c7f923584f1
|
||||
base_revision: edada7c56edf4a183c1735310e123c7f923584f1
|
||||
|
||||
# User provided section
|
||||
|
||||
|
||||
137
README.md
@@ -1,86 +1,113 @@
|
||||
[](https://github.com/Cateners/tiny_computer/blob/master/readme/cover0.png)
|
||||
|
||||
# 小小电脑
|
||||
|
||||
<img decoding="async" src="readme/cover0.png" width="50%">
|
||||
给所有安卓 9 以上 arm64 设备的“PC 应用引擎”平替。你可以在小小电脑上安装 PC 级 WPS、CAJ Viewer、亿图图示等软件。
|
||||
|
||||
即开即用的类PC环境,内置火狐浏览器和fcitx输入法等常用软件
|
||||
|
||||
Click-to-run debian bookworm xfce on android for Chinese users, with fcitx pinyin input method preinstalled. No termux required.
|
||||
Run Debian Bookworm with XFCE, LXQt, or other desktop environments on Android—just with one click. Originally developed for Chinese users to run applications like WPS Office, it comes preinstalled with tools such as the Fcitx Pinyin input method. Please note that this app does not require Termux.
|
||||
|
||||
To change the language inside the container, simply run the `tmoe` command, select “Manager” and navigate to the locale settings. The root filesystem was built using [tmoe](https://github.com/2moe/tmoe), so locale configuration is handled through it. You will also need to update the `LANG=zh_CN.UTF-8` environment variable in the startup command (go to Control → Advanced Settings → Startup Command) when switching to another language.
|
||||
|
||||
Note: English UI is supported since version 1.0.23, though some hint texts may still appear in Chinese.
|
||||
As of version 1.0.100, the container will automatically switch to English if it detects that your device is not using Chinese.
|
||||
|
||||
## 特点
|
||||
|
||||
- 一键安装,即开即用
|
||||
- 来自 kali-undercover 的 win10 主题(仅 xfce 版本),友好的界面
|
||||
|
||||

|
||||
|
||||
- 提供常用软件的一键安装指令(点击图片可查看更多说明)
|
||||
|
||||
[](https://gitee.com/caten/tc-hints/blob/master/pool/solution.md)
|
||||
|
||||
- 可方便地改变屏幕缩放,不用担心屏幕过大或过小 (点击图片可查看更多说明)
|
||||
|
||||
[](https://gitee.com/caten/tc-hints/blob/master/pool/scale.md)
|
||||
|
||||
- 便捷访问设备文件,或通过设备 SAF 访问软件文件(点击图片可查看更多说明)
|
||||
|
||||
[](https://gitee.com/caten/tc-hints/blob/master/pool/fileaccess.md)
|
||||
|
||||
- 提供终端和众多可调节参数供高级用户使用
|
||||
|
||||

|
||||
|
||||
## 下载
|
||||
|
||||
小小电脑提供多个版本。要将小小电脑作为 PC 应用引擎使用,请在 [Releases](https://github.com/Cateners/tiny_computer/releases) 页面下载并安装 [XFCE](https://xfce.org/) 版本(tiny-computer-xfce.apk)。
|
||||
|
||||
如果遇到黑屏问题,请卸载后尝试 [LXQt](https://lxqt-project.org/) 版本([Releases](https://github.com/Cateners/tiny_computer/releases) 页寻找 tiny-computer-lxqt.apk)。
|
||||
|
||||
这些版本的区别在于桌面环境不同。你可以简单地理解为界面不一样,但功能基本一致。
|
||||
|
||||
LXQt 的界面示例:
|
||||
|
||||
[](https://camo.githubusercontent.com/016ff8803c228f26db750c8424777d8e04a3aebec4ff11d8436a0b22a2e6f58a/68747470733a2f2f6c7871742d70726f6a6563742e6f72672f696d616765732f73637265656e73686f74732f616d6269616e63652e706e67)
|
||||
|
||||
如果你下载小小电脑是为了体验更多桌面环境,享受折腾 Linux 的乐趣,这里也有一些其他版本供下载!
|
||||
|
||||
和 [GXDE](https://www.gxde.org/) 团队合作的版本 [#129](https://github.com/Cateners/tiny_computer/issues/129)。可在[此处](https://mirrors.sdu.edu.cn/spark-store-repository/GXDE-OS/APK/)下载。GXDE 的界面示例:
|
||||
|
||||
[](https://www.gxde.top/1.jpg)
|
||||
|
||||
由[灵墨桌面](https://www.lingmo.org/)开发者提供的版本[#218](https://github.com/Cateners/tiny_computer/issues/218)。灵墨桌面的界面[示例](https://www.bilibili.com/video/BV1Ci421R7AR)。
|
||||
|
||||
## 原理
|
||||
|
||||
使用proot运行debian环境
|
||||
使用 proot 运行 debian 环境。
|
||||
|
||||
内置[noVNC](https://github.com/novnc/noVNC)显示图形界面
|
||||
|
||||
初次启动由于解压的缘故要点时间
|
||||
以后点开就能用
|
||||
|
||||
只支持arm64安卓
|
||||
内置 [noVNC](https://github.com/novnc/noVNC)/[AVNC](https://github.com/gujjwal00/avnc)/[Termux:X11](https://github.com/termux/termux-x11) 显示图形界面。
|
||||
|
||||
## 项目结构
|
||||
|
||||
assets的文件来源如下:
|
||||
assets 和 android/app/src/main/jniLibs 的文件源信息可以在[这里](https://github.com/Cateners/tiny_computer/blob/master/extra/readme.md)找到。
|
||||
|
||||
- [proot](https://github.com/Cateners/proot), 使用[build-proot-android](https://github.com/green-green-avk/build-proot-android)脚本编译
|
||||
- [busybox](https://github.com/meefik/busybox)
|
||||
- [mediamtx相关](https://github.com/bluenviron/mediamtx)
|
||||
- [tar](https://github.com/Rprop/tar-android-static)
|
||||
- [Xserver XSDL, pulseaudio相关文件](https://github.com/pelya/commandergenius/tree/sdl_android/project/jni/application/xserver)
|
||||
- [Tmoe Linux, debian包来源](https://github.com/2moe/tmoe)
|
||||
完整的容器制作过程可以在[这里](https://github.com/Cateners/tiny_computer/blob/master/extra/build-tiny-rootfs.md)看到。
|
||||
|
||||
其中tar、busybox和pulseaudio相关文件都是直接用了二进制文件。
|
||||
数据包、patch.tar.gz 以及 jniLibs 的文件不在代码仓更新,而是随 releases 提供,主要是为了避免 git 越来越大。
|
||||
|
||||
更多信息可以在[这里](extra/readme)找到。
|
||||
lib 目录:
|
||||
|
||||
对debian容器进行了如下修改:
|
||||
- 使用tmoe安装了xfce环境和全套VNC;
|
||||
- 使用kali-undercover提供的Win10主题美化xfce;
|
||||
- (使用tmoe)安装了fcitx输入法和云拼音组件。按<Ctrl+空格>切换输入法。
|
||||
- 强烈建议**不要**使用安卓中文输入法直接输入中文,而是使用英文键盘通过容器的输入法输入中文,避免丢字错字。
|
||||
- 对noVNC进行[修改](https://github.com/Cateners/noVNC),添加了scale factor滑块控制缩放(scale_factor分支),添加了上下左右shift等按键(arrow_key分支),添加了强制显示原系统光标的功能(force_cursor分支),添加了中文翻译(translation_zh_cn分支);
|
||||
- 在主目录下可以方便地访问手机存储(如果提供了存储权限的话);
|
||||
- 启动时会尝试挂载手机的一些字体目录(AppFiles/Fonts、Fonts和/system/fonts), 如果这些目录下有字体文件的话会一并加载到系统中,无需额外安装;
|
||||
- 最后采用tar.xz压缩,用split命令分成了xa*等多个文件(低内存设备一次性拷贝大文件会导致软件闪退)。
|
||||
|
||||
完整的容器制作过程可以在[这里](extra/build-tiny-rootfs.md)看到。
|
||||
|
||||
数据包不再在assets中更新,而是随releases提供,主要是为了避免git越来越大
|
||||
|
||||
lib目录:
|
||||
|
||||
- main.dart文件,页面布局,老实说已经有点乱了
|
||||
- workflow.dart文件,逻辑部分,目前也还可以理解
|
||||
- Util 工具类
|
||||
- TermPty 一个终端
|
||||
- G 全局变量类
|
||||
- Workflow 从软件点开到容器启动的所有步骤
|
||||
- main.dart 文件,页面布局,有点乱
|
||||
- workflow.dart 文件,逻辑部分,目前也还可以理解
|
||||
- Util 工具类
|
||||
- TermPty 一个终端
|
||||
- G 全局变量类
|
||||
- Workflow 从软件点开到容器启动的所有步骤
|
||||
- l10n 文件夹,包含多语言文件
|
||||
|
||||
## 编译
|
||||
|
||||
你需要配置好flutter和安卓sdk,然后克隆此项目。
|
||||
你需要配置好 flutter 和安卓 sdk。
|
||||
|
||||
在编译之前,需要在release中下载系统rootfs(或者[自行制作](extra/build-tiny-rootfs.md)),之后使用split命令分割,拷贝到assets。一般我将其分为98MB。
|
||||
在编译之前,需要在 release 中下载 jniLibs.zip ,将里面的库文件解压后放到 android/app/src/main/jniLibs/arm64-v8a;下载 patch.tar.gz 拷贝到 assets。以及下载系统 rootfs(或者[自行制作](https://github.com/Cateners/tiny_computer/blob/master/extra/build-tiny-rootfs.md)),之后使用 split 命令分割,拷贝到 assets。一般我将其分为 98MB。
|
||||
|
||||
`split -b 98M debian.tar.xz`
|
||||
```bash
|
||||
split -b 98M debian.tar.xz
|
||||
```
|
||||
|
||||
然后修改workflow的代码,找到复制资源的部分,把生成的xa\*名字写进去(我还不知道怎么写代码识别有多少个xa*文件)
|
||||
接下来就可以编译了。如果要编译release版本,需要设置发布密钥,可以参考android/keystore.properties.example文件。
|
||||
|
||||
接下来就可以编译了。我使用的命令如下:
|
||||
我使用的编译命令如下:
|
||||
|
||||
`flutter build apk --target-platform android-arm64 --split-per-abi --obfuscate --split-debug-info=tiny_computer/sdi`
|
||||
```bash
|
||||
flutter build apk --target-platform android-arm64 --split-per-abi --obfuscate --split-debug-info=tiny_computer/sdi
|
||||
```
|
||||
|
||||
## 目前已知bug
|
||||
## 目前已知 bug
|
||||
|
||||
多用户/分身情形无法sudo, 其它见issue
|
||||
多用户/分身情形无法 sudo , 其它见 issue。
|
||||
|
||||
## 一些链接
|
||||
|
||||
这是我的第一个flutter软件,感谢这些项目为我指路
|
||||
这是我的第一个 flutter 软件,感谢这些项目为我指路
|
||||
|
||||
- 要一点基础的 [《Flutter实战·第二版》](https://book.flutterchina.club)
|
||||
- 要一点基础的[《Flutter实战·第二版》](https://book.flutterchina.club/)
|
||||
- 也许是零基础的Flutter视频课程 [freeCodeCamp Flutter Course](https://www.youtube.com/watch?v=wFn-m-OgKPU&list=PL6yRaaP0WPkVtoeNIGqILtRAgd3h2CNpT)
|
||||
|
||||
- 安卓上的VS Code [Code FA](https://github.com/nightmare-space/vscode_for_android)
|
||||
- 安卓上的 VS Code [Code FA](https://github.com/nightmare-space/vscode_for_android)
|
||||
|
||||
## Getting Started
|
||||
|
||||
@@ -91,6 +118,4 @@ A few resources to get you started if this is your first Flutter project:
|
||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
For help getting started with Flutter development, view the [online documentation](https://docs.flutter.dev/), which offers tutorials, samples, guidance on mobile development, and a full API reference.
|
||||
|
||||
@@ -22,18 +22,24 @@ if (flutterVersionName == null) {
|
||||
flutterVersionName = '1.0'
|
||||
}
|
||||
|
||||
def keystoreProperties = new Properties()
|
||||
def keystorePropertiesFile = rootProject.file('keystore.properties')
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
|
||||
android {
|
||||
namespace "com.example.tiny_computer"
|
||||
compileSdkVersion flutter.compileSdkVersion
|
||||
ndkVersion flutter.ndkVersion
|
||||
ndkVersion "27.0.12077973" // flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = '1.8'
|
||||
jvmTarget = 17
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
@@ -46,28 +52,70 @@ android {
|
||||
applicationId "com.fct.tiny"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||
minSdkVersion 24 //ffmpeg_kit; flutter.minSdkVersion
|
||||
targetSdkVersion 28 //https://github.com/termux/termux-app/issues/1072; native; linker; flutter.targetSdkVersion
|
||||
minSdk 28 // glob() version //proot version //ffmpeg_kit; flutter.minSdkVersion
|
||||
targetSdk 28 //https://github.com/termux/termux-app/issues/1072; native; linker; flutter.targetSdkVersion
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
|
||||
buildConfigField "String", "COMMIT", "\"" + ("git rev-parse HEAD\n".execute().getText().trim() ?: (System.getenv('CURRENT_COMMIT') ?: "NO_COMMIT")) + "\""
|
||||
|
||||
}
|
||||
signingConfigs {
|
||||
release {
|
||||
keyAlias keystoreProperties['keyAlias']
|
||||
keyPassword keystoreProperties['keyPassword']
|
||||
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
||||
storePassword keystoreProperties['storePassword']
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig signingConfigs.debug
|
||||
signingConfig signingConfigs.release
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
debug {
|
||||
signingConfig signingConfigs.debug
|
||||
minifyEnabled true
|
||||
shrinkResources false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
aidl true
|
||||
dataBinding true
|
||||
viewBinding true
|
||||
buildConfig true
|
||||
}
|
||||
|
||||
|
||||
lint {
|
||||
disable "NullSafeMutableLiveData"
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
//checkReleaseBuilds false
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
pickFirst 'lib/arm64-v8a/libc++_shared.so'
|
||||
pickFirst 'lib/x86_64/libc++_shared.so'
|
||||
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
|
||||
pickFirst 'lib/arm64-v8a/libc++_shared.so'
|
||||
}
|
||||
}
|
||||
|
||||
flutter {
|
||||
source '../..'
|
||||
}
|
||||
|
||||
dependencies {}
|
||||
dependencies {
|
||||
implementation "androidx.core:core-ktx:1.15.0"
|
||||
implementation "androidx.appcompat:appcompat:1.7.0"
|
||||
implementation "com.google.android.material:material:1.7.0"
|
||||
implementation 'com.github.tiann:FreeReflection:3.2.2'
|
||||
}
|
||||
|
||||
14
android/app/proguard-rules.pro
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# Please add these rules to your existing keep rules in order to suppress warnings.
|
||||
# This is generated automatically by the Android Gradle plugin.
|
||||
-dontwarn android.app.ActivityThread
|
||||
-dontwarn android.app.ContextImpl
|
||||
-dontwarn android.app.IActivityManager
|
||||
-dontwarn android.content.IIntentReceiver$Stub
|
||||
-dontwarn android.content.IIntentReceiver
|
||||
-dontwarn android.content.IIntentSender
|
||||
-dontwarn android.content.pm.IPackageManager
|
||||
-dontwarn com.google.errorprone.annotations.CanIgnoreReturnValue
|
||||
-dontwarn com.google.errorprone.annotations.Immutable
|
||||
# 保持 Termux X11 所有内容
|
||||
-keep class com.termux.x11.** { *; }
|
||||
-keepclassmembers class com.termux.x11.** { *; }
|
||||
@@ -1,15 +1,20 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
|
||||
<application
|
||||
android:label="小小电脑"
|
||||
android:name="${applicationName}"
|
||||
android:label="@string/tc_app_name"
|
||||
android:name=".MainApplication"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:usesCleartextTraffic="true">
|
||||
android:usesCleartextTraffic="true"
|
||||
android:launchMode="singleInstance"
|
||||
android:theme="@style/App.Theme"
|
||||
android:extractNativeLibs="true">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
@@ -31,6 +36,10 @@
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".Signal9Activity"
|
||||
android:exported="true"
|
||||
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
|
||||
<provider
|
||||
android:name="com.example.tiny_computer.filepicker.TinyDocumentsProvider"
|
||||
android:authorities="com.example.tiny_computer.documents"
|
||||
|
||||
BIN
android/app/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
@@ -1,6 +1,38 @@
|
||||
package com.example.tiny_computer
|
||||
|
||||
import android.system.Os.setenv
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.annotation.NonNull
|
||||
import androidx.annotation.Keep
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
|
||||
|
||||
class MainActivity: FlutterActivity() {
|
||||
|
||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "android").setMethodCallHandler {
|
||||
// 注册通道并设置方法调用处理器
|
||||
call, result ->
|
||||
// 判断方法名
|
||||
when (call.method) {
|
||||
"launchSignal9Page" -> {
|
||||
startActivity(Intent(this, Signal9Activity::class.java))
|
||||
result.success(0)
|
||||
}
|
||||
"getNativeLibraryPath" -> {
|
||||
result.success(getApplicationInfo().nativeLibraryDir)
|
||||
}
|
||||
else -> {
|
||||
// 不支持的方法名
|
||||
result.notImplemented()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.example.tiny_computer
|
||||
|
||||
import android.content.Context
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import io.flutter.app.FlutterApplication
|
||||
import me.weishu.reflection.Reflection
|
||||
|
||||
class MainApplication : FlutterApplication() {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
DynamicColors.applyToActivitiesIfAvailable(this@MainApplication)
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context?) {
|
||||
super.attachBaseContext(base)
|
||||
Reflection.unseal(base)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.example.tiny_computer
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import com.example.tiny_computer.databinding.ActivitySignal9Binding
|
||||
|
||||
class Signal9Activity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: ActivitySignal9Binding
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivitySignal9Binding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
||||
// 设置状态栏和导航栏颜色匹配蓝屏背景
|
||||
window.statusBarColor = ContextCompat.getColor(this, R.color.tc_s9a_blue_screen_blue)
|
||||
window.navigationBarColor = ContextCompat.getColor(this, R.color.tc_s9a_blue_screen_blue)
|
||||
|
||||
setupContent()
|
||||
}
|
||||
|
||||
private fun setupContent() {
|
||||
// 设置错误信息
|
||||
binding.errorDetails.text = getString(R.string.tc_s9a_error_message)
|
||||
|
||||
// 根据Android版本显示不同的解决方案
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||||
// Android 14以下版本
|
||||
binding.preAndroid14Layout.isVisible = true
|
||||
binding.solutionIntro.text = getString(R.string.tc_s9a_solution_intro)
|
||||
binding.solutionAlternative.text = getString(R.string.tc_s9a_solution_alternative)
|
||||
binding.toolButton.text = getString(R.string.tc_s9a_tool_button)
|
||||
binding.tutorialButton.text = getString(R.string.tc_s9a_tutorial_button)
|
||||
|
||||
binding.toolButton.setOnClickListener {
|
||||
openBrowserLink("https://www.vmos.cn/zhushou.htm")
|
||||
}
|
||||
|
||||
binding.tutorialButton.setOnClickListener {
|
||||
openBrowserLink("https://gitee.com/caten/tc-hints/blob/master/pool/signal9fix.md")
|
||||
}
|
||||
} else {
|
||||
// Android 14及以上版本
|
||||
binding.solutionAndroid14.isVisible = true
|
||||
binding.solutionAndroid14.text = getString(R.string.tc_s9a_solution_android14)
|
||||
}
|
||||
}
|
||||
|
||||
private fun openBrowserLink(url: String) {
|
||||
if (url.isNotEmpty()) {
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
||||
startActivity(intent)
|
||||
}
|
||||
// 如果URL为空,则不执行任何操作(等待后续补充链接)
|
||||
}
|
||||
}
|
||||
85
android/app/src/main/res/layout/activity_signal_9.xml
Normal file
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/tc_s9a_blue_screen_blue"
|
||||
tools:context=".Signal9Activity">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/kaomoji_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/tc_s9a_kaomoji"
|
||||
android:textColor="@color/tc_s9a_white"
|
||||
android:textSize="96sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/error_details"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:textColor="@color/tc_s9a_white"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<!-- Android 14以下版本的内容 -->
|
||||
<LinearLayout
|
||||
android:id="@+id/pre_android14_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/solution_intro"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:textColor="@color/tc_s9a_white"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/tool_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:backgroundTint="@color/tc_s9a_white"
|
||||
android:textColor="@color/tc_s9a_blue_screen_blue" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/solution_alternative"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:textColor="@color/tc_s9a_white"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/tutorial_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:backgroundTint="@color/tc_s9a_white"
|
||||
android:textColor="@color/tc_s9a_blue_screen_blue" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Android 14及以上版本的内容 -->
|
||||
<TextView
|
||||
android:id="@+id/solution_android14"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:textColor="@color/tc_s9a_white"
|
||||
android:textSize="16sp"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 7.4 KiB |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 6.1 KiB |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 954 B |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 11 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 13 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
12
android/app/src/main/res/values-zh-rCN/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="tc_app_name">小小电脑</string>
|
||||
|
||||
<string name="tc_s9a_error_message">终端异常终止,返回错误码9。此错误是安卓12+系统限制子进程数量造成的,需要手动关闭限制。</string>
|
||||
<string name="tc_s9a_kaomoji">:(</string>
|
||||
<string name="tc_s9a_solution_intro">可以使用以下工具修复:</string>
|
||||
<string name="tc_s9a_solution_alternative">如果以上工具无法修复,或者设备为鸿蒙设备,请按照以下教程解决(需要电脑和数据线):</string>
|
||||
<string name="tc_s9a_tool_button">修复工具</string>
|
||||
<string name="tc_s9a_tutorial_button">教程链接</string>
|
||||
<string name="tc_s9a_solution_android14">请在设置应用中启用开发者选项(通常步骤是找到关于设备->系统版本->连续点击系统版本5次),然后在开发者选项中找到\"停止限制子进程\",打开开关即可。不同机型开启开发者选项的步骤可能略有不同,具体方法可在网络搜索。</string>
|
||||
</resources>
|
||||
12
android/app/src/main/res/values-zh-rTW/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="tc_app_name">小小電腦</string>
|
||||
|
||||
<string name="tc_s9a_error_message">終端異常終止,返回錯誤碼9。此錯誤是安卓12+系統限制子進程數量造成的,需要手動關閉限制。</string>
|
||||
<string name="tc_s9a_kaomoji">:(</string>
|
||||
<string name="tc_s9a_solution_intro">可以使用以下工具修復:</string>
|
||||
<string name="tc_s9a_solution_alternative">如果以上工具無法修復,或者設備為鴻蒙設備,請按照以下教程解決(需要電腦和數據線):</string>
|
||||
<string name="tc_s9a_tool_button">修復工具</string>
|
||||
<string name="tc_s9a_tutorial_button">教程鏈接</string>
|
||||
<string name="tc_s9a_solution_android14">請在設置應用中啟用開發者選項(通常步驟是找到關於設備->系統版本->連續點擊系統版本5次),然後在開發者選項中找到\"停止限制子進程\",打開開關即可。不同機型開啟開發者選項的步驟可能略有不同,具體方法可在網絡搜尋。</string>
|
||||
</resources>
|
||||
5
android/app/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="tc_s9a_blue_screen_blue">#FF6F43C0</color>
|
||||
<color name="tc_s9a_white">#FFFFFFFF</color>
|
||||
</resources>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#D1BAFD</color>
|
||||
</resources>
|
||||
12
android/app/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="tc_app_name">Tiny Computer</string>
|
||||
|
||||
<string name="tc_s9a_error_message">Terminal terminated abnormally with signal 9. This error is caused by Android 12+ system limiting the number of child processes and requires manual removal of the restriction.</string>
|
||||
<string name="tc_s9a_kaomoji">:(</string>
|
||||
<string name="tc_s9a_solution_intro">You can use the following tool to fix:</string>
|
||||
<string name="tc_s9a_solution_alternative">If the above tool cannot fix the issue, or if the device is a HarmonyOS device, please follow the tutorial below (requires a computer and data cable):</string>
|
||||
<string name="tc_s9a_tool_button">Repair Tool</string>
|
||||
<string name="tc_s9a_tutorial_button">Tutorial Link</string>
|
||||
<string name="tc_s9a_solution_android14">Please enable developer options in the Settings app (usually by going to About device -> System version -> tap System version 5 times continuously), then find "Stop restricting child processes" in developer options and turn on the switch. The steps to enable Developer Options may vary slightly depending on the device model. For specific methods, you can search online.</string>
|
||||
</resources>
|
||||
@@ -1,20 +1,8 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.7.10'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.3.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#org.gradle.jvmargs=-Xmx1536M
|
||||
org.gradle.jvmargs=-Xmx16384m
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
android.enableJetifier=true
|
||||
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
|
||||
|
||||
4
android/keystore.properties.example
Normal file
@@ -0,0 +1,4 @@
|
||||
storePassword=your_store_password_here
|
||||
keyPassword=your_key_password_here
|
||||
keyAlias=upload
|
||||
storeFile=../upload-keystore.jks
|
||||
@@ -10,11 +10,18 @@ pluginManagement {
|
||||
|
||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
include ":app"
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.7.3" apply false
|
||||
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
|
||||
}
|
||||
|
||||
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||
rootProject.name = "TinyComputer"
|
||||
include ":app"
|
||||
|
||||
BIN
assets/busybox
147
build.ps1
Normal file
@@ -0,0 +1,147 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true, ValueFromRemainingArguments=$true)]
|
||||
[ValidateSet("xfce", "lxqt", "gxde")]
|
||||
[string[]]$DesktopEnvs,
|
||||
|
||||
[string]$NameSuffix
|
||||
)
|
||||
|
||||
# 设置路径
|
||||
$SourceDir = "C:\Users\29513\Downloads"
|
||||
$AssetsDir = "assets"
|
||||
|
||||
# 分割文件函数 - 使用xaa, xab, xac...命名
|
||||
function Split-File {
|
||||
param(
|
||||
[string]$Path,
|
||||
[long]$PartSizeBytes,
|
||||
[string]$DestinationPath
|
||||
)
|
||||
|
||||
$stream = [System.IO.File]::OpenRead($Path)
|
||||
$buffer = New-Object byte[] $PartSizeBytes
|
||||
$partNumber = 0
|
||||
|
||||
try {
|
||||
while (($bytesRead = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) {
|
||||
# 生成类似xaa, xab, xac...的文件名
|
||||
$partName = Get-SplitFileName $partNumber
|
||||
$partPath = Join-Path $DestinationPath $partName
|
||||
|
||||
$partStream = [System.IO.File]::OpenWrite($partPath)
|
||||
try {
|
||||
$partStream.Write($buffer, 0, $bytesRead)
|
||||
} finally {
|
||||
$partStream.Close()
|
||||
}
|
||||
|
||||
Write-Host "创建分片: $partName"
|
||||
$partNumber++
|
||||
}
|
||||
} finally {
|
||||
$stream.Close()
|
||||
}
|
||||
|
||||
return $partNumber
|
||||
}
|
||||
|
||||
# 生成split风格的文件名 (xaa, xab, xac, ..., xaz)
|
||||
function Get-SplitFileName {
|
||||
param([int]$index)
|
||||
|
||||
# 计算字母偏移量(0-25对应a-z)
|
||||
$charOffset = $index % 26
|
||||
# 将数字转换为对应的字母字符
|
||||
$char = [char]([byte][char]'a' + $charOffset)
|
||||
|
||||
return "xa$char"
|
||||
}
|
||||
|
||||
# 处理每个桌面环境
|
||||
foreach ($DesktopEnv in $DesktopEnvs) {
|
||||
Write-Host "`n开始处理 $DesktopEnv 桌面环境..." -ForegroundColor Green
|
||||
|
||||
# 设置文件路径
|
||||
$TarFile = "debian-$DesktopEnv.tar.xz"
|
||||
$SourcePath = Join-Path $SourceDir $TarFile
|
||||
|
||||
# 检查源文件是否存在
|
||||
if (-not (Test-Path $SourcePath)) {
|
||||
Write-Error "错误:找不到文件 $SourcePath"
|
||||
continue
|
||||
}
|
||||
|
||||
# 删除assets文件夹中已有的xa*文件
|
||||
if (Test-Path $AssetsDir) {
|
||||
Write-Host "正在清理assets文件夹中的旧文件..."
|
||||
Get-ChildItem -Path $AssetsDir -Filter "xa*" | Remove-Item -Force
|
||||
} else {
|
||||
Write-Host "创建assets文件夹..."
|
||||
New-Item -ItemType Directory -Path $AssetsDir | Out-Null
|
||||
}
|
||||
|
||||
# 分割文件 (98MB = 98 * 1024 * 1024 = 102760448 bytes)
|
||||
Write-Host "正在分割 $TarFile 文件..."
|
||||
$partCount = Split-File -Path $SourcePath -PartSizeBytes 102760448 -DestinationPath $AssetsDir
|
||||
|
||||
Write-Host "文件分割完成,共创建 $partCount 个分片文件"
|
||||
|
||||
# 运行Flutter构建
|
||||
Write-Host "正在运行Flutter构建..."
|
||||
flutter build apk --target-platform android-arm64 --split-per-abi --obfuscate --split-debug-info=tiny_computer/sdi
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error "错误:Flutter构建失败"
|
||||
continue
|
||||
}
|
||||
|
||||
# 构建APK文件名
|
||||
$ApkBaseName = "tiny-computer-$DesktopEnv"
|
||||
if (-not [string]::IsNullOrEmpty($NameSuffix)) {
|
||||
$ApkBaseName += "-$NameSuffix"
|
||||
}
|
||||
|
||||
# 重命名APK和SHA1文件
|
||||
$ApkSource = "build\app\outputs\flutter-apk\app-arm64-v8a-release.apk"
|
||||
$Sha1Source = "build\app\outputs\flutter-apk\app-arm64-v8a-release.apk.sha1"
|
||||
|
||||
if (Test-Path $ApkSource) {
|
||||
Rename-Item -Path $ApkSource -NewName "$ApkBaseName.apk"
|
||||
Write-Host "已重命名APK文件: $ApkBaseName.apk"
|
||||
} else {
|
||||
Write-Error "错误:找不到APK文件 $ApkSource"
|
||||
continue
|
||||
}
|
||||
|
||||
if (Test-Path $Sha1Source) {
|
||||
Rename-Item -Path $Sha1Source -NewName "$ApkBaseName.apk.sha1"
|
||||
Write-Host "已重命名SHA1文件: $ApkBaseName.apk.sha1"
|
||||
} else {
|
||||
Write-Warning "警告:找不到SHA1文件 $Sha1Source"
|
||||
}
|
||||
|
||||
Write-Host "$DesktopEnv 处理完成!" -ForegroundColor Green
|
||||
}
|
||||
|
||||
Write-Host "`n所有桌面环境处理完成!" -ForegroundColor Cyan
|
||||
|
||||
# 既然是开源,我认为应该把prompt开源出来才算,毕竟这个脚本更像编译后的产物,而不是源代码本身。
|
||||
|
||||
# 帮我写一个自动化脚本,做以下几件事:
|
||||
# 1. 脚本所在目录是项目的根目录,脚本应该运行在windows电脑上,接收一个参数,这个参数的值会是xfce, lxqt或gxde。
|
||||
# 2. 在C:\Users\29513\Downloads文件夹有debian-xfce.tar.xz,debian-lxqt.tar.xz和debian-gxde.tar.xz,需要根据之前的参数对应选择,然后分成98MB的小份,命名为xa*(就像linux上的split -b 98M debian.tar.xz),放到项目的assets文件夹。注意这个文件夹可能有之前残留的xa*文件,需要先彻底删除这些xa*文件。
|
||||
# 3. 然后在当前目录运行flutter build apk --target-platform android-arm64 --split-per-abi --obfuscate --split-debug-info=tiny_computer/sdi编译。
|
||||
# 4. 在build\app\outputs\flutter-apk文件夹会有app-arm64-v8a-release.apk和app-arm64-v8a-release.apk.sha1两个文件,需要重命名为tiny-computer-xfce.apk和tiny-computer-xfce.apk.sha1(以xfce为例,具体名称根据参数来定)
|
||||
|
||||
# 直接写成一个ps1脚本行吗
|
||||
|
||||
# 请再添加一些功能:首先可以传入多个选项,比如传入xfce lxqt就可以自动进行这两个构建;其实需要一个新参数允许在生成的apk名字加入后缀,比如添加targetSdk35后缀,就会生成tiny-computer-xfce-targetSdk35.apk和tiny-computer-xfce-targetSdk35.apk.sha1
|
||||
|
||||
# xa*文件的命名不对。要按照split命令默认的那样,命名为xaa,xab,xac... 另外我确定分割后的文件数量不多,不会超过xaz。
|
||||
|
||||
# Cannot convert value "97" to type "System.Char". Error: "Invalid cast from 'Decimal' to 'Char'."
|
||||
# At C:\Users\29513\FlutterProjects\tiny_computer\build.ps1:52 char:5
|
||||
# + $firstChar = [char](97 + [math]::Floor($index / 26)) # a-z
|
||||
# + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# + CategoryInfo : InvalidArgument: (:) [], RuntimeException
|
||||
# + FullyQualifiedErrorId : InvalidCastIConvertible
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
因为我不会,所以只能用自然语言记录一下制作步骤。
|
||||
|
||||
## 制作步骤
|
||||
## 制作步骤(xfce和lxqt)
|
||||
|
||||
### 安装Debian容器
|
||||
|
||||
@@ -160,19 +160,35 @@ tmoe还会安装gnome-keyring,由于之前我做xfce包时会造成VSCode反
|
||||
|
||||
#### cmatrix
|
||||
|
||||
**(20241112)注意,这一步可以略过,因为cmatrix已被内置到patch.tar.gz**
|
||||
|
||||
这个是给快捷指令的彩蛋。下载cmatrix的包,并将cmatrix文件提取放到/home/tiny/.local/bin里即可,记得添加执行权限
|
||||
|
||||
#### WPS
|
||||
|
||||
**(20241112)注意,新版wps不再需要将整合模式改为多组件模式也能正常使用,所以可以跳过软件设置修改的步骤**
|
||||
|
||||
- 软件设置修改
|
||||
- 从官网下载WPS linux arm64 deb安装包,直接在图形界面点开用gdebi安装(正好测试一下gdebi是否能用)
|
||||
- 打开WPS-右上角设置-其他-切换窗口管理模式-整合模式改为多组件模式(否则一些设备在新建文档等操作时卡死,目前原因不明)
|
||||
- 使用gdebi(或自行)卸载WPS
|
||||
- 字体修补
|
||||
- 在你的Windows电脑里的C:\Windows\Fonts文件夹找到symbol.ttf、webdings.ttf、wingding.ttf、WINGDNG2.TTF、WINGDNG3.TTF、MTEXTRA.TTF字体并放到容器/usr/share/fonts的某个文件夹下(我新建了extra文件夹并把这些字体放到里面)
|
||||
- libtiff.so.5库修补
|
||||
- 切换到/lib/aarch64-linux-gnu文件夹,创建软链把libtiff.so.6链接到libtiff.so.5
|
||||
- 或者找libtiff.so.5的包并安装,这样可能更好一些
|
||||
- 预装ttf-mscorefonts-installer
|
||||
- 这个包是WPS的依赖,会在sourceforge下载字体,可能会非常慢,所以提前apt装好
|
||||
|
||||
|
||||
### 额外步骤
|
||||
|
||||
- 将桌面壁纸的配置从monitorBuiltinDisplay改为monitorbuiltin(xfce,v1.0.99),疑似Termux:X11显示器名称改变导致壁纸失效
|
||||
- 修复用vscode打开文件时只打开了vscode本身(v1.0.25):去掉/usr/share/applications/code-no-sandbox.desktop的Exec的--unity-launch
|
||||
- 修复选择文本时会把文本发送到剪切板(v1.0.25):在/usr/local/bin/startvnc文件的start_tmoe_xvnc()的start_win10_tigervnc行前面加入`vncconfig -set SendPrimary=0 SetPrimary=0`
|
||||
- 修复系统更新时变英文(v1.0.19):把/etc/locale.gen文件里包含zh_CN.UTF-8的那行代码解除注释
|
||||
- 修复了xfce使用Termux:X11时占用过高(v1.0.19):把底部面板的电量管理插件移除(右键-面板-面板首选项-项目)
|
||||
- 不弹出终端窗口(v1.0.18):把/etc/X11/xinit/Xsession文件倒数第二行open_terminal删掉
|
||||
- 关闭垂直同步以使用Turnip+Zink(v1.0.17):把文件~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml内vblank_mode值从auto改为off
|
||||
- xfce版本安装了图片查看器ristretto和压缩文件管理器xarchiver(v1.0.16)
|
||||
|
||||
### 打包
|
||||
|
||||
@@ -192,5 +208,69 @@ tmoe还会安装gnome-keyring,由于之前我做xfce包时会造成VSCode反
|
||||
- .ICEauthority
|
||||
- .Xauthority
|
||||
- 等等
|
||||
- 切换到root用户,切换到根目录,`/busybox tar -Jcpvf /debian.tar.xz --exclude=debian.tar.xz --exclude=dev --exclude=proc --exclude=system --exclude=storage --exclude=apex --exclude=sys --exclude=media/sd --exclude=busybox --exclude=".l2s.*" /`
|
||||
- 切换到root用户,切换到根目录,`/busybox tar -Jcpvf /debian.tar.xz --exclude=".l2s.*" bin boot etc home lib media mnt opt root run sbin sd srv tmp usr var`
|
||||
|
||||
|
||||
## 制作步骤(GXDE OS)
|
||||
|
||||
### 咕咕咕
|
||||
|
||||
其实流程和前面差不多。基本上就是 装图形界面->修复中文->修复tmoe->修non-free-firmware->(随便看看空间占用,略)->修wps->准备busybox以便打包->添加Xsession文件以便启动
|
||||
|
||||
请看VCR:
|
||||
```
|
||||
1 exit
|
||||
2 sudo apt install sd/Download/gxde-source_1.0.1_all.deb
|
||||
3 sudo apt install ./sd/Download/gxde-source_1.0.1_all.deb
|
||||
4 sudo apt update
|
||||
5 sudo apt install gxde-testing-source
|
||||
6 sudo apt update
|
||||
7 sudo apt install gxde-desktop-android --no-install-recommends
|
||||
8 nano /etc/locale.gen
|
||||
9 cd /usr/local/etc/tmoe-linux/git/share
|
||||
10 nano replace.sh
|
||||
11 ./replace.sh old-version
|
||||
12 chmod +x replace.sh
|
||||
13 ./replace.sh old-version
|
||||
14 rm replace.sh
|
||||
15 cd
|
||||
16 tmoe
|
||||
17 nano /etc/apt/sources.list
|
||||
18 sudo apt update
|
||||
19 nano /etc/apt/sources.list
|
||||
20 sudo apt update
|
||||
21 cd /var/log
|
||||
22 ls -l
|
||||
23 du -h --max-depth=1 | sort -h
|
||||
24 cd ..
|
||||
25 du -h --max-depth=1 | sort -h
|
||||
26 cd cache/
|
||||
27 ls -l
|
||||
28 sudo apt update ttf-mscorefonts-installer
|
||||
29 sudo apt install ttf-mscorefonts-installer
|
||||
30 cd /usr/lib/aarch64-linux-gnu/
|
||||
31 ln -s libtiff.so.6 libtiff.so.5
|
||||
32 history
|
||||
33 cd /
|
||||
34 cp home/tiny/termux/home/.local/share/tmoe-linux/containers/proot/debian-bookworm_arm64/busybox .
|
||||
35 cd /etc/X11/xinit/
|
||||
36 ls
|
||||
37 cp ~/termux/home/.local/share/tmoe-linux/containers/proot/debian-bookworm_arm64/etc/X11/xinit/Xsession .
|
||||
38 ls -l Xsession
|
||||
39 cd /
|
||||
40 ls -l busybox
|
||||
41 exit
|
||||
42 sudo apt clean;sudo apt autoclean;sudo apt autoremove --purge || sudo apt autoremove
|
||||
43 history
|
||||
44 history > /sd/history.txt
|
||||
```
|
||||
|
||||
关于Xsession文件:
|
||||
|
||||
因为当前小小电脑代码写死了启动X11图形界面就通过执行/etc/X11/xinit/Xsession,如果通过tmoe安装图形界面这个文件是自带的,但安装GXDE没有通过tmoe,所以随便写了个:
|
||||
```
|
||||
rm -rf /run/dbus/pid
|
||||
sudo dbus-daemon --system
|
||||
export $(dbus-launch)
|
||||
startgxde_android
|
||||
```
|
||||
247
extra/cross/chn_fonts.reg
Normal file
@@ -0,0 +1,247 @@
|
||||
REGEDIT4
|
||||
|
||||
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
|
||||
"Agency FB"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Alef"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Algerian"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Amiri Quran"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Amiri"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Arial Rounded MT Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Arial"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bahnschrift"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Baskerville Old Face"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bauhaus 93"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bell MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Berlin Sans FB Demi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Berlin Sans FB"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bernard MT Condensed"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Blackadder ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bodoni MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Book Antiqua"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bookman Old Style"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bookshelf Symbol 7"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Bradley Hand ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Britannic Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Broadway"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Brush Script MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Caladea"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Calibri"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Californian FB"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Calisto MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Cambria"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Candara"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Carlito"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Cascadia Code"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Cascadia Mono"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Castellar"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Centaur"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Century Gothic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Century Schoolbook"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Century"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Chiller"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Colonna MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Comic Sans MS"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Consolas"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Constantia"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Cooper Black"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Copperplate Gothic Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Copperplate Gothic Light"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Corbel"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Courier New"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Curlz MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"David CLM"="XiaolaiMonoSC-Regular.ttf"
|
||||
"David Libre"="XiaolaiMonoSC-Regular.ttf"
|
||||
"DejaVu Math TeX Gyre"="XiaolaiMonoSC-Regular.ttf"
|
||||
"DejaVu Sans Mono"="XiaolaiMonoSC-Regular.ttf"
|
||||
"DejaVu Sans"="XiaolaiMonoSC-Regular.ttf"
|
||||
"DejaVu Serif"="XiaolaiMonoSC-Regular.ttf"
|
||||
"DengXian"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Dubai"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Ebrima"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Edwardian Script ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Elephant"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Engravers MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Eras Bold ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Eras Demi ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Eras Light ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Eras Medium ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"FZShuTi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"FZYaoTi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"FangSong"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Felix Titling"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Footlight MT Light"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Forte"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Frank Ruehl CLM"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Frank Ruhl Hofshi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Franklin Gothic Book"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Franklin Gothic Demi Cond"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Franklin Gothic Demi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Franklin Gothic Heavy"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Franklin Gothic Medium Cond"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Franklin Gothic Medium"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Freestyle Script"="XiaolaiMonoSC-Regular.ttf"
|
||||
"French Script MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gabriola"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gadugi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Garamond"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gentium Basic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gentium Book Basic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Georgia"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gigi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gill Sans MT Condensed"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gill Sans MT Ext Condensed Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gill Sans MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gill Sans Ultra Bold Condensed"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gill Sans Ultra Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Gloucester MT Extra Condensed"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Goudy Old Style"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Goudy Stout"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Haettenschweiler"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Harlow Solid Italic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Harrington"="XiaolaiMonoSC-Regular.ttf"
|
||||
"High Tower Text"="XiaolaiMonoSC-Regular.ttf"
|
||||
"HoloLens MDL2 Assets"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Impact"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Imprint MT Shadow"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Informal Roman"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Ink Free"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Javanese Text"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Jokerman"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Juice ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"KaiTi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Kristen ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Kunstler Script"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Leelawadee UI"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Leelawadee"="XiaolaiMonoSC-Regular.ttf"
|
||||
"LiSu"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Liberation Mono"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Liberation Sans Narrow"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Liberation Sans"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Liberation Serif"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Linux Biolinum G"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Linux Libertine Display G"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Linux Libertine G"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Bright"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Calligraphy"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Console"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Fax"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Handwriting"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Sans Typewriter"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Sans Unicode"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Lucida Sans"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MS Gothic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MS Outlook"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MS Reference Sans Serif"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MS Reference Specialty"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MT Extra"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MV Boli"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Magneto"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Maiandra GD"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Malgun Gothic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Marlett"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Matura MT Script Capitals"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft Himalaya"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft JhengHei"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft New Tai Lue"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft PhagsPa"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft Sans Serif"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft Tai Le"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft Uighur"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft YaHei"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Microsoft Yi Baiti"="XiaolaiMonoSC-Regular.ttf"
|
||||
"MingLiU-ExtB"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Miriam CLM"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Miriam Libre"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Miriam Mono CLM"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Mistral"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Modern No. 20"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Mongolian Baiti"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Monotype Corsiva"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Myanmar Text"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Nachlieli CLM"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Niagara Engraved"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Niagara Solid"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Nirmala UI"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Kufi Arabic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Naskh Arabic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans Arabic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans Armenian"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans Georgian"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans Hebrew"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans Lao"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans Lisu"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Sans"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Serif Armenian"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Serif Georgian"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Serif Hebrew"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Serif Lao"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Noto Serif"="XiaolaiMonoSC-Regular.ttf"
|
||||
"OCR A Extended"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Old English Text MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Onyx"="XiaolaiMonoSC-Regular.ttf"
|
||||
"OpenSymbol"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Palace Script MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Palatino Linotype"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Papyrus"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Parchment"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Perpetua Titling MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Perpetua"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Playbill"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Poor Richard"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Pristina"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Rage Italic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Ravie"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Reem Kufi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Rockwell Condensed"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Rockwell Extra Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Rockwell"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Rubik"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STCaiyun"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STFangsong"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STHupo"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STKaiti"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STLiti"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STSong"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STXihei"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STXingkai"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STXinwei"="XiaolaiMonoSC-Regular.ttf"
|
||||
"STZhongsong"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Sans Serif Collection"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Scheherazade"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Script MT Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe Fluent Icons"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe MDL2 Assets"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe Print"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe Script"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe UI Emoji"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe UI Historic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe UI Symbol"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe UI Variable"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Segoe UI"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Showcard Gothic"="XiaolaiMonoSC-Regular.ttf"
|
||||
"SimHei"="XiaolaiMonoSC-Regular.ttf"
|
||||
"SimSun"="XiaolaiMonoSC-Regular.ttf"
|
||||
"SimSun-ExtB"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Sitka"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Snap ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Stencil"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Sylfaen"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Symbol"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Tahoma"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Tempus Sans ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Times New Roman"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Trebuchet MS"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Tw Cen MT Condensed Extra Bold"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Tw Cen MT Condensed"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Tw Cen MT"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Verdana"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Viner Hand ITC"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Vivaldi"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Vladimir Script"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Webdings"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Wide Latin"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Wingdings 2"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Wingdings 3"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Wingdings"="XiaolaiMonoSC-Regular.ttf"
|
||||
"YouYuan"="XiaolaiMonoSC-Regular.ttf"
|
||||
"Yu Gothic"="XiaolaiMonoSC-Regular.ttf"
|
||||
74
extra/cross/install-hangover
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "正在更新软件包..."
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
|
||||
REPO="AndreRH/hangover"
|
||||
API_URL="https://api.github.com/repos/$REPO/releases/latest"
|
||||
|
||||
# 获取最新release的版本号并储存在变量中
|
||||
latest_version=$(wget -qO- $API_URL | grep -oP '"tag_name": "\Khangover-\K([^"]+)' )
|
||||
|
||||
# 检查是否成功获取版本号
|
||||
if [ -z "$latest_version" ]; then
|
||||
echo "无法获取到最新版本号。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "最新版本: $latest_version"
|
||||
|
||||
hangover_url="https://github.com/AndreRH/hangover/releases/download/hangover-${latest_version}/hangover_${latest_version}_debian12_bookworm_arm64.tar"
|
||||
|
||||
mirror_sites=(
|
||||
"https://github.akams.cn/"
|
||||
"https://gh.llkk.cc/"
|
||||
"https://github.moeyy.xyz/"
|
||||
"https://mirror.ghproxy.com/"
|
||||
""
|
||||
)
|
||||
|
||||
mkdir -p /tmp/hangover
|
||||
cd /tmp/hangover
|
||||
|
||||
for mirror in "${mirror_sites[@]}"; do
|
||||
url="${mirror}${hangover_url}"
|
||||
echo "尝试从 $url 下载Hangover..."
|
||||
wget "${url}" -O hangover.tar
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "成功下载Hangover"
|
||||
break
|
||||
fi
|
||||
if [ -z "$mirror" ]; then
|
||||
cd /tmp
|
||||
rm -rf /tmp/hangover
|
||||
echo "下载失败...退出安装..."
|
||||
exit
|
||||
fi
|
||||
done
|
||||
|
||||
echo "正在安装Hangover..."
|
||||
tar xvf hangover.tar
|
||||
sudo apt install -y ./hangover*.deb
|
||||
if [ $? -ne 0 ]; then
|
||||
cd /tmp
|
||||
rm -rf /tmp/hangover
|
||||
echo "安装失败...退出安装..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "正在初始化Wine..."
|
||||
wineboot --init
|
||||
|
||||
echo "正在安装DXVK..."
|
||||
tar xvf dxvk-v*.tar.gz
|
||||
mv dxvk-v*/x32/* /home/tiny/.wine/drive_c/windows/syswow64
|
||||
mv dxvk-v*/arm64ec/* /home/tiny/.wine/drive_c/windows/system32
|
||||
|
||||
echo "正在修复字体..."
|
||||
regedit "Z:\\home\\tiny\\.local\\share\\tiny\\extra\\chn_fonts.reg" && wine reg delete "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes" /va /f
|
||||
|
||||
cd /tmp
|
||||
rm -rf /tmp/hangover
|
||||
echo "安装完成"
|
||||
58
extra/cross/install-hangover-stable
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "正在更新软件包..."
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
hangover_url="https://github.com/AndreRH/hangover/releases/download/hangover-10.14/hangover_10.14_debian12_bookworm_arm64.tar"
|
||||
latest_version="10.14"
|
||||
|
||||
mirror_sites=(
|
||||
"https://github.akams.cn/"
|
||||
"https://gh.llkk.cc/"
|
||||
"https://github.moeyy.xyz/"
|
||||
"https://mirror.ghproxy.com/"
|
||||
""
|
||||
)
|
||||
|
||||
mkdir -p /tmp/hangover
|
||||
cd /tmp/hangover
|
||||
|
||||
for mirror in "${mirror_sites[@]}"; do
|
||||
url="${mirror}${hangover_url}"
|
||||
echo "尝试从 $url 下载Hangover..."
|
||||
wget "${url}" -O hangover.tar
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "成功下载Hangover"
|
||||
break
|
||||
fi
|
||||
if [ -z "$mirror" ]; then
|
||||
cd /tmp
|
||||
rm -rf /tmp/hangover
|
||||
echo "下载失败...退出安装..."
|
||||
exit
|
||||
fi
|
||||
done
|
||||
|
||||
echo "正在安装Hangover..."
|
||||
tar xvf hangover.tar
|
||||
sudo apt install -y ./hangover*.deb
|
||||
if [ $? -ne 0 ]; then
|
||||
cd /tmp
|
||||
rm -rf /tmp/hangover
|
||||
echo "安装失败...退出安装..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "正在初始化Wine..."
|
||||
wineboot --init
|
||||
|
||||
echo "正在安装DXVK..."
|
||||
tar xvf dxvk-v*.tar.gz
|
||||
mv dxvk-v*/x32/* /home/tiny/.wine/drive_c/windows/syswow64
|
||||
mv dxvk-v*/arm64ec/* /home/tiny/.wine/drive_c/windows/system32
|
||||
|
||||
echo "正在修复字体..."
|
||||
regedit "Z:\\home\\tiny\\.local\\share\\tiny\\extra\\chn_fonts.reg" && wine reg delete "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes" /va /f
|
||||
|
||||
echo "安装完成"
|
||||
24
extra/readme
@@ -1,24 +0,0 @@
|
||||
## 这个readme介绍assets文件夹中文件的制作方式。
|
||||
|
||||
### assets.zip中的文件:
|
||||
|
||||
#### [容器文件xa*](build-tiny-rootfs.md)
|
||||
|
||||
### patch.tar.gz中的文件:
|
||||
|
||||
#### extra/getifaddrs_bridge_client_lib.so:
|
||||
|
||||
在安卓13以上的系统中,proot容器无权使用默认的getifaddrs,而这个库包含了一个getifaddrs实现。
|
||||
|
||||
linux在需要数据时,使用socket通知位于安卓的getifaddrs_bridge_server,让getifaddrs_bridge_server执行getifaddrs函数,并将结构体数据序列化后发送回linux端,这边接收数据并反序列化还原成指针结构体。简单来说就是用安卓的getifaddrs代替linux的getifaddrs。
|
||||
|
||||
源码和编译信息在getifaddrs_bridge文件夹查看。
|
||||
|
||||
#### caj, edraw
|
||||
|
||||
这些分别是cajviewer,亿图图示的补丁
|
||||
|
||||
- 亿图图示补丁的库文件是在小小电脑上下载了Qt对应版本源码后编译得到的;
|
||||
- 编译进行了两次,第一次直接编译,可以得到Gui和Widgets两个库。第二次编译带上XcbQpa,虽然会编译失败,但在这之前就可以得到XcbQpa的库。
|
||||
|
||||
|
||||
60
extra/readme.md
Normal file
@@ -0,0 +1,60 @@
|
||||
## 这个readme介绍assets文件夹中文件的制作方式。
|
||||
|
||||
### assets.zip中的文件:
|
||||
|
||||
- [Xserver XSDL, pulseaudio相关文件](https://github.com/pelya/commandergenius/tree/sdl_android/project/jni/application/xserver)。直接从Xserver XSDL的apk中的lib解包获得,并还原了名称。
|
||||
- [Tmoe Linux, debian包来源](https://github.com/2moe/tmoe),制作了[容器文件xa*](build-tiny-rootfs.md)
|
||||
- getifaddrs_bridge_server,见下面的介绍和getifaddrs_bridge子文件夹
|
||||
|
||||
### jniLibs中的文件
|
||||
|
||||
除libexec_pulseaudio.so(pulseaudio可执行文件)来自Xserver XSDL的apk外,所有文件均通过[termux-packages](https://github.com/termux-play-store/termux-packages)构建。[见这个修改后的仓库](https://github.com/tiny-computer/termux-packages)
|
||||
|
||||
运行scripts/generate-bootstraps.sh即可获得bootstraps压缩包,其中会包含busybox、proot、tar、virglrenderer的可执行文件和依赖库。将可执行文件全部重命名为libexec_xxx.so的格式,将依赖库全部抹去版本号,放到jniLibs/arm64-v8a。
|
||||
|
||||
运行build-package.sh proot,可在output文件夹找到loader和loader32,重命名为libproot-loader.so和libproot-loader32.so,放到jniLibs/arm64-v8a。
|
||||
|
||||
|
||||
### patch.tar.gz中的文件:
|
||||
|
||||
#### extra/getifaddrs_bridge_client_lib.so:
|
||||
|
||||
在安卓13以上的系统中,proot容器无权使用默认的getifaddrs,而这个库包含了一个getifaddrs实现。
|
||||
|
||||
linux在需要数据时,使用socket通知位于安卓的getifaddrs_bridge_server,让getifaddrs_bridge_server执行getifaddrs函数,并将结构体数据序列化后发送回linux端,这边接收数据并反序列化还原成指针结构体。简单来说就是用安卓的getifaddrs代替linux的getifaddrs。
|
||||
|
||||
源码和编译信息在getifaddrs_bridge文件夹查看。
|
||||
|
||||
#### extra/install-hangover, extra/install-hangover-stable:
|
||||
|
||||
这些是用于Windows应用支持的Hangover安装脚本。
|
||||
|
||||
#### extra/chn_fonts.reg:
|
||||
|
||||
修复wine显示方块字的注册表文件。
|
||||
|
||||
#### extra/libvulkan_freedreno.so, extra/freedreno_icd.aarch64.json:
|
||||
|
||||
Turnip驱动。根据[这里](https://github.com/xDoge26/proot-setup/issues/26#issuecomment-1712404849)和[这里](https://github.com/MastaG/mesa-turnip-ppa)编译
|
||||
|
||||
#### extra/cmatrix
|
||||
|
||||
快捷指令的彩蛋。原本放在容器里,但显然放这里更为合适
|
||||
|
||||
#### caj, edraw
|
||||
|
||||
这些分别是cajviewer,亿图图示的补丁
|
||||
|
||||
- 亿图图示补丁的库文件是在小小电脑上下载了Qt对应版本源码后编译得到的;
|
||||
- 编译进行了两次,第一次直接编译,可以得到Gui和Widgets两个库。第二次编译带上XcbQpa,虽然会编译失败,但在这之前就可以得到XcbQpa的库。
|
||||
|
||||
#### wechat
|
||||
|
||||
微信的补丁。license, uos-lsb和uos-release来自星火的微信包或arch的wechat-uos打包(嗯,我忘记到底是哪的了。不过都差不多)。
|
||||
|
||||
libssl1.1来自debian官方源。deepin-elf-verifier是我打的空包。
|
||||
|
||||
#### font
|
||||
|
||||
[小赖字体](https://github.com/lxgw/kose-font)用于修复wine的方块字
|
||||
其他字体用于避免wps报字体缺失的错误
|
||||
|
Before Width: | Height: | Size: 163 KiB |
34
ios/.gitignore
vendored
@@ -1,34 +0,0 @@
|
||||
**/dgph
|
||||
*.mode1v3
|
||||
*.mode2v3
|
||||
*.moved-aside
|
||||
*.pbxuser
|
||||
*.perspectivev3
|
||||
**/*sync/
|
||||
.sconsign.dblite
|
||||
.tags*
|
||||
**/.vagrant/
|
||||
**/DerivedData/
|
||||
Icon?
|
||||
**/Pods/
|
||||
**/.symlinks/
|
||||
profile
|
||||
xcuserdata
|
||||
**/.generated/
|
||||
Flutter/App.framework
|
||||
Flutter/Flutter.framework
|
||||
Flutter/Flutter.podspec
|
||||
Flutter/Generated.xcconfig
|
||||
Flutter/ephemeral/
|
||||
Flutter/app.flx
|
||||
Flutter/app.zip
|
||||
Flutter/flutter_assets/
|
||||
Flutter/flutter_export_environment.sh
|
||||
ServiceDefinitions.json
|
||||
Runner/GeneratedPluginRegistrant.*
|
||||
|
||||
# Exceptions to above rules.
|
||||
!default.mode1v3
|
||||
!default.mode2v3
|
||||
!default.pbxuser
|
||||
!default.perspectivev3
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>App</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>io.flutter.flutter.app</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>App</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>11.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1 +0,0 @@
|
||||
#include "Generated.xcconfig"
|
||||
@@ -1 +0,0 @@
|
||||
#include "Generated.xcconfig"
|
||||
@@ -1,614 +0,0 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
|
||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
|
||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
|
||||
remoteInfo = Runner;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
|
||||
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
|
||||
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
97C146EB1CF9000F007C117D /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
9740EEB11CF90186004384FC /* Flutter */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */,
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
|
||||
9740EEB31CF90195004384FC /* Generated.xcconfig */,
|
||||
);
|
||||
name = Flutter;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
331C8082294A63A400263BE5 /* RunnerTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
331C807B294A618700263BE5 /* RunnerTests.swift */,
|
||||
);
|
||||
path = RunnerTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146E51CF9000F007C117D = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9740EEB11CF90186004384FC /* Flutter */,
|
||||
97C146F01CF9000F007C117D /* Runner */,
|
||||
97C146EF1CF9000F007C117D /* Products */,
|
||||
331C8082294A63A400263BE5 /* RunnerTests */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146EF1CF9000F007C117D /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
97C146EE1CF9000F007C117D /* Runner.app */,
|
||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146F01CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
97C146FA1CF9000F007C117D /* Main.storyboard */,
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */,
|
||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
|
||||
97C147021CF9000F007C117D /* Info.plist */,
|
||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
|
||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
|
||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
|
||||
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
|
||||
);
|
||||
path = Runner;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
331C8080294A63A400263BE5 /* RunnerTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
||||
buildPhases = (
|
||||
331C807D294A63A400263BE5 /* Sources */,
|
||||
331C807E294A63A400263BE5 /* Frameworks */,
|
||||
331C807F294A63A400263BE5 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
331C8086294A63A400263BE5 /* PBXTargetDependency */,
|
||||
);
|
||||
name = RunnerTests;
|
||||
productName = RunnerTests;
|
||||
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
97C146ED1CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||
buildPhases = (
|
||||
9740EEB61CF901F6004384FC /* Run Script */,
|
||||
97C146EA1CF9000F007C117D /* Sources */,
|
||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||
97C146EC1CF9000F007C117D /* Resources */,
|
||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Runner;
|
||||
productName = Runner;
|
||||
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
97C146E61CF9000F007C117D /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1430;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
331C8080294A63A400263BE5 = {
|
||||
CreatedOnToolsVersion = 14.0;
|
||||
TestTargetID = 97C146ED1CF9000F007C117D;
|
||||
};
|
||||
97C146ED1CF9000F007C117D = {
|
||||
CreatedOnToolsVersion = 7.3.1;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 97C146E51CF9000F007C117D;
|
||||
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
97C146ED1CF9000F007C117D /* Runner */,
|
||||
331C8080294A63A400263BE5 /* RunnerTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
331C807F294A63A400263BE5 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
97C146EC1CF9000F007C117D /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
|
||||
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
|
||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||
);
|
||||
name = "Thin Binary";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
|
||||
};
|
||||
9740EEB61CF901F6004384FC /* Run Script */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Run Script";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
331C807D294A63A400263BE5 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
97C146EA1CF9000F007C117D /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 97C146ED1CF9000F007C117D /* Runner */;
|
||||
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
97C146FB1CF9000F007C117D /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
97C147001CF9000F007C117D /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
249021D3217E4FDB00AE95B9 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
249021D4217E4FDB00AE95B9 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.tinyComputer;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
331C8088294A63A400263BE5 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.tinyComputer.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
331C8089294A63A400263BE5 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.tinyComputer.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
331C808A294A63A400263BE5 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.tinyComputer.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
97C147031CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
97C147041CF9000F007C117D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
97C147061CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.tinyComputer;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
97C147071CF9000F007C117D /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.tinyComputer;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
331C8088294A63A400263BE5 /* Debug */,
|
||||
331C8089294A63A400263BE5 /* Release */,
|
||||
331C808A294A63A400263BE5 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
97C147031CF9000F007C117D /* Debug */,
|
||||
97C147041CF9000F007C117D /* Release */,
|
||||
249021D3217E4FDB00AE95B9 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
97C147061CF9000F007C117D /* Debug */,
|
||||
97C147071CF9000F007C117D /* Release */,
|
||||
249021D4217E4FDB00AE95B9 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 97C146E61CF9000F007C117D /* Project object */;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreviewsEnabled</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,98 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1430"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO"
|
||||
parallelizable = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "331C8080294A63A400263BE5"
|
||||
BuildableName = "RunnerTests.xctest"
|
||||
BlueprintName = "RunnerTests"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Profile"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
7
ios/Runner.xcworkspace/contents.xcworkspacedata
generated
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Runner.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PreviewsEnabled</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,13 +0,0 @@
|
||||
import UIKit
|
||||
import Flutter
|
||||
|
||||
@UIApplicationMain
|
||||
@objc class AppDelegate: FlutterAppDelegate {
|
||||
override func application(
|
||||
_ application: UIApplication,
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||
) -> Bool {
|
||||
GeneratedPluginRegistrant.register(with: self)
|
||||
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
||||
}
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "83.5x83.5",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "1024x1024",
|
||||
"idiom" : "ios-marketing",
|
||||
"filename" : "Icon-App-1024x1024@1x.png",
|
||||
"scale" : "1x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 295 B |
|
Before Width: | Height: | Size: 406 B |
|
Before Width: | Height: | Size: 450 B |
|
Before Width: | Height: | Size: 282 B |
|
Before Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 704 B |
|
Before Width: | Height: | Size: 406 B |
|
Before Width: | Height: | Size: 586 B |
|
Before Width: | Height: | Size: 862 B |
|
Before Width: | Height: | Size: 862 B |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 762 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "LaunchImage@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 68 B |
|
Before Width: | Height: | Size: 68 B |
|
Before Width: | Height: | Size: 68 B |
@@ -1,5 +0,0 @@
|
||||
# Launch Screen Assets
|
||||
|
||||
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
|
||||
|
||||
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
|
||||
@@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
|
||||
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="53" y="375"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="LaunchImage" width="168" height="185"/>
|
||||
</resources>
|
||||
</document>
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Flutter View Controller-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
@@ -1,49 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Tiny Computer</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>tiny_computer</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1 +0,0 @@
|
||||
#import "GeneratedPluginRegistrant.h"
|
||||
@@ -1,12 +0,0 @@
|
||||
import Flutter
|
||||
import UIKit
|
||||
import XCTest
|
||||
|
||||
class RunnerTests: XCTestCase {
|
||||
|
||||
func testExample() {
|
||||
// If you add code to the Runner application, consider adding tests here.
|
||||
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
||||
}
|
||||
|
||||
}
|
||||