Compare commits

...

3 Commits

Author SHA1 Message Date
dichgrem
c883e002ad add:linux_android 2025-11-20 14:18:37 +08:00
dichgrem
a5a811608d update:lazyvim 2025-11-20 12:01:52 +08:00
dichgrem
ad5bc86ddf update:stm32 2025-11-20 11:57:24 +08:00
39 changed files with 1076 additions and 445 deletions

View File

@@ -274,13 +274,23 @@ return {
> 编辑器的基本素养
``文件操作``
- 创建文件/文件夹
- 打开/关闭/切换文件
- 复制/粘贴
- 写入/保存/退出
``外观``
- 面板
- 侧边栏
- Git符号
- 全局主题
- 文件类型主题
``编辑器``
- 显示行号
- 搜索替换
``Code``
- 高亮
- 格式化
- 自动补全
- 代码调试
``字符处理``
- LF/CRLF处理
- 零宽字符处理
@@ -289,12 +299,16 @@ return {
``终端``
- 打开终端/复用终端
``文件操作``
- 创建文件/文件夹
- 打开/关闭/切换文件
- 复制/粘贴
- 写入/保存/退出
``其他功能``
- LSP
- 代码调试
- 工作区切换
- Git支持
- 主题与显示效果
- gitui
- diff历史
## 一份优秀的 Vim 速查表

View File

@@ -6,15 +6,15 @@ date = 2025-07-20
tags = ["Linux"]
+++
前言 本文记录STM32命令行开发环境在Ubuntu上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件,但目前似乎没有Nixos上的打包。
前言 本文记录STM32命令行开发环境在Linux上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件但目前没有Nixos上的打包。
<!-- more -->
## 环境
## 依赖包
- **Ubuntu**
以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。
以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。
```shell
sudo apt update
sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
@@ -22,7 +22,7 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
- **Nixos**
虽然没有RT-Thread-studio这个包但是可以用flake.nix很方便的搭建一个开发环境
虽然Nixos上没有RT-Thread-studio这个包但是可以用flake.nix很方便的搭建一个开发环境
```nix
{
@@ -56,24 +56,44 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
## 源码
使用Git拉取项目源码
随后使用Git拉取项目源码
```shell
git clone https://github.com/RT-Thread/rt-thread.git
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
```
## ENV工具
使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。
```shell
# 克隆仓库
git clone https://github.com/RT-Thread/env.git ~/env
# 将 ~/env 添加到 PATH
export PATH="$PATH:$HOME/env"
# 显示 PATH
echo "$PATH"
# 查看 pkgs 命令是否存在
type pkgs
```
随后可以使用PKG初始化并安装两个必要的包
```shell
pkgs --update
pip install kconfiglib
pip install scons
```
## 连接
使用USB连接开发板和开发PC并使用lsusb查看是否连接成功
使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现
```shell
lsusb
Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
```
如果你和我一样使用 qemu 需要在libvirt中使用Add_hardware添加usb设备。
添加成功后可以使用这个命令来检测:
添加成功后可以使用这个命令来检测是否连接成功:
```shell
st-info --probe
@@ -86,20 +106,11 @@ Found 1 stlink programmers
dev-type: STM32F4x5_F4x7
```
## ENV工具
> 如果你和我一样将Ubuntu安装在QEMU虚拟机中 需要在libvirt中使用Add_hardware添加usb设备。
使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。我使用的是fish你也可以用其他的Shell命令有所不同。
```shell
git clone https://github.com/RT-Thread/env.git ~/env
set -x PATH $PATH ~/env
fish_add_path ~/env
echo $PATH
type pkgs
```
## 修改交叉工具链
## PKG工具
由于该项目大量使用Python所以需要PKG包支持。首先我们修改这个文件的交叉工具链部分
链接成功后进入项目目录,发现``rtconfig.py``没有Linux路径需要我们手动修改交叉工具链部分
```python
#修改 rtconfig.py
@@ -114,6 +125,7 @@ if CROSS_TOOL == 'gcc':
# Windows 平台
EXEC_PATH = r'C:\Users\XXYYZZ'
else:
# 修改这里
# Linux / macOS 平台
EXEC_PATH = '/usr/bin'
@@ -133,13 +145,7 @@ elif CROSS_TOOL == 'llvm-arm':
else:
EXEC_PATH = '/usr/bin'
```
随后可以使用PKG初始化并安装两个必要的包
```shell
pkgs --update
pip install kconfiglib
pip install scons
```
## 编译
在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令
@@ -171,7 +177,6 @@ st-flash write rtthread.bin 0x08000000
```shell
sudo apt install picocom
picocom -b 115200 /dev/ttyACM0
version
```
可以使用``ctrl + A 然后 ctrl + x``退出。
@@ -179,9 +184,9 @@ version
通过官方文档可以得知除了scons外还可以使用Cmake来编译.
首先找到编译器的路径并export
首先找到编译器的路径并export我这里是Nixos的路径如果你使用其他发行版注意修改
```shell
```bash
which arm-none-eabi-gcc
/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
export RTT_EXEC_PATH=/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
@@ -189,7 +194,7 @@ export RTT_CC=gcc
```
随后使用指令``scons --target=cmake``
```shell
```bash
scons --target=cmake
scons: Reading SConscript files ...
@@ -207,7 +212,7 @@ scons: done building targets.
```
可以看到生成CmakeLists.txt成功随后开始构建
```shell
```bash
cd ./build
cmake ..
CMake Warning (dev) at CMakeLists.txt:43:
@@ -236,7 +241,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
```
使用``make``命令编译:
```shell
```bash
make
[ 1%] Building C object CMakeFiles/rtthread.elf.dir/applications/main.c.obj
[ 2%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cctype.c.obj
@@ -254,7 +259,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
如果没有真实的开发版可以使用Renode来进行仿真模拟
```shell
```bash
# 启动renode
renode

View File

@@ -0,0 +1,182 @@
+++
title = "Linux-Android开发环境部署"
date = 2025-11-20
[taxonomies]
tags = ["Linux"]
+++
前言 本文记录Android命令行开发环境在Linux上的部署用以替代Android-studio。
<!-- more -->
## Ubuntu方案
- 首先安装依赖包:
```bash
sudo apt install openjdk-17-jdk nodejs
```
- 安装Command-tools
```bash
mkdir -p ~/Android/cmdline-tools/latest
## 下载链接https://developer.android.com/studio?hl=zh-cn#command-tools
cd ~/Android/cmdline-tools/latest
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip
unzip ./commandlinetools-linux-13114758_latest.zip
```
- 使用官方脚本安装Sdkman包管理器
```bash
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
```
- 随后使用Sdkman下载并安装gradle/kotlin
```bash
sdk install gradle
sdk install kotlin
```
- 设置环境变量:
```bash
export ANDROID_HOME=$HOME/Android
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/build-tools/34.0.0
source ~/.bashrc
```
- 继续下载一些SDK平台与构建工具
```bash
sdkmanager "platforms;android-34" "build-tools;34.0.0" "platform-tools"
sdkmanager "emulator" //虚拟机中调试
```
- 查看版本
```bash
(base) dich@uos:~$ sdk version
SDKMAN!
script: 5.20.0
native: 0.7.14 (linux x86_64)
(base) dich@uos:~$ gradle -v
------------------------------------------------------------
Gradle 8.10.2
------------------------------------------------------------
Build time: 2024-09-23 21:28:39 UTC
Revision: 415adb9e06a516c44b391edff552fd42139443f7
Kotlin: 1.9.24
Groovy: 3.0.22
Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023
Launcher JVM: 17.0.16 (Ubuntu 17.0.16+8-Ubuntu-0ubuntu124.04.1)
Daemon JVM: /usr/lib/jvm/java-17-openjdk-amd64 (no JDK specified, using current Java home)
OS: Linux 6.14.0-35-generic amd64
(base) dich@uos:~/Git/android-templates$ kotlin -version
Kotlin version 1.6.21-release-334 (JRE 21.0.8+9-Ubuntu-0ubuntu124.04.1)
(base) dich@uos:~/Git/android-templates/template-compose$ kscript -v
Copyright : 2022 Holger Brandl
License : MIT
Version : v4.0.3
Website : https://github.com/holgerbrandl/kscript
A new version (v4.2.0) of kscript is available.
Kotlin : 2.1.10-release-473
Java : JRE 17.0.16+8
```
## Key方案
构建Release包需要密钥签名验证可以使用传统的明文配置或者使用密钥管理器.
### 相同部分
- 生成密钥
```bash
keytool -genkey -v \
-keystore ~/.android/jetlagged-release.keystore \
-alias jetlagged \
-keyalg RSA \
-keysize 2048 \
-validity 10000
```
- 修改app/build.gradle.kts
```bash
signingConfigs {
create("release") {
storeFile = System.getenv("KEYSTORE_FILE")?.let { file(it) }
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEY_ALIAS")
keyPassword = System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release") // 添加这行
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
```
### 传统方法
- 创建配置文件
```bash
cat > ~/.android-signing-secrets << 'EOF'
export KEYSTORE_FILE="$HOME/.android/jetlagged-release.keystore"
export KEYSTORE_PASSWORD="你的keystore密码"
export KEY_ALIAS="jetlagged"
export KEY_PASSWORD="你的key密码"
EOF
# 设置权限
chmod 600 ~/.android-signing-secrets
# 添加到 gitignore (全局)
echo ".android-signing-secrets" >> ~/.gitignore_global
```
- flake配置
```bash
# Auto load Key
if [ -f "$HOME/.android-signing-secrets" ]; then
source "$HOME/.android-signing-secrets"
echo "KeyOK"
fi
```
### 现代方法
- 安装libsecret包
- keepassxc新建Android群组添加条目``android_key_password``和``android_keystore_password``
- 设置密码,和上面生成的相同;
- 在条目的高级-属性中添加``name/android_key_password``和``name/android_keystore_password``
- 打开设置-保密服务集成公开Android文件夹
- flake中写
```bash
# Release Key
export KEYSTORE_FILE="$HOME/.android/jetlagged-release.keystore"
export KEY_ALIAS="jetlagged"
export KEYSTORE_PASSWORD="$(secret-tool lookup name android_keystore_password)"
export KEY_PASSWORD="$(secret-tool lookup name android_key_password)"
```
---
**Done.**

View File

@@ -412,14 +412,26 @@
<blockquote>
<p>编辑器的基本素养</p>
</blockquote>
<p><code>文件操作</code></p>
<p><code>外观</code></p>
<ul>
<li>创建文件/文件夹</li>
<li>打开/关闭/切换文件</li>
<li>复制/粘贴</li>
<li>写入/保存/退出</li>
<li>面板</li>
<li>侧边栏</li>
<li>Git符号</li>
<li>全局主题</li>
<li>文件类型主题</li>
</ul>
<p><code>编辑器</code></p>
<ul>
<li>显示行号</li>
<li>搜索替换</li>
</ul>
<p><code>Code</code></p>
<ul>
<li>高亮</li>
<li>格式化</li>
<li>自动补全</li>
<li>代码调试</li>
</ul>
<p><code>字符处理</code></p>
<ul>
<li>LF/CRLF处理</li>
@@ -430,13 +442,18 @@
<ul>
<li>打开终端/复用终端</li>
</ul>
<p><code>文件操作</code></p>
<ul>
<li>创建文件/文件夹</li>
<li>打开/关闭/切换文件</li>
<li>复制/粘贴</li>
<li>写入/保存/退出</li>
</ul>
<p><code>其他功能</code></p>
<ul>
<li>LSP</li>
<li>代码调试</li>
<li>工作区切换</li>
<li>Git支持</li>
<li>主题与显示效果</li>
<li>gitui</li>
<li>diff历史</li>
</ul>
<h2 id="yi-fen-you-xiu-de-vim-su-cha-biao">一份优秀的 Vim 速查表</h2>
<blockquote>

View File

@@ -110,6 +110,16 @@
<ul><li class="post-list">
<a href="https://blog.dich.bid/linux-3-android-dev/">
<span class="post-date">2025-11-20</span>
:: <span class="post-list-title">Linux-Android开发环境部署</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.bid/linux-2-stm32/">
<span class="post-date">2025-07-20</span>
:: <span class="post-list-title">Linux-STM32开发环境部署</span></a>

View File

@@ -6,8 +6,27 @@
<link rel="self" type="application/atom+xml" href="https://blog.dich.bid/atom.xml"/>
<link rel="alternate" type="text/html" href="https://blog.dich.bid"/>
<generator uri="https://www.getzola.org/">Zola</generator>
<updated>2025-07-20T00:00:00+00:00</updated>
<updated>2025-11-20T00:00:00+00:00</updated>
<id>https://blog.dich.bid/atom.xml</id>
<entry xml:lang="en">
<title>Linux-Android开发环境部署</title>
<published>2025-11-20T00:00:00+00:00</published>
<updated>2025-11-20T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://blog.dich.bid/linux-3-android-dev/"/>
<id>https://blog.dich.bid/linux-3-android-dev/</id>
<summary type="html">&lt;p&gt;前言 本文记录Android命令行开发环境在Linux上的部署用以替代Android-studio。&lt;&#x2F;p&gt;</summary>
</entry>
<entry xml:lang="en">
<title>Linux-STM32开发环境部署</title>
<published>2025-07-20T00:00:00+00:00</published>
@@ -24,8 +43,8 @@
<link rel="alternate" type="text/html" href="https://blog.dich.bid/linux-2-stm32/"/>
<id>https://blog.dich.bid/linux-2-stm32/</id>
<summary type="html">&lt;p&gt;前言 本文记录STM32命令行开发环境在Ubuntu上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件,但目前似乎没有Nixos上的打包。&lt;&#x2F;p&gt;</summary>
<summary type="html">&lt;p&gt;前言 本文记录STM32命令行开发环境在Linux上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件但目前没有Nixos上的打包。&lt;&#x2F;p&gt;</summary>
</entry>
<entry xml:lang="en">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/linux-3-android-dev/">Linux-Android开发环境部署</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-11-20
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
<div class="post-content">
<p>前言 本文记录Android命令行开发环境在Linux上的部署用以替代Android-studio。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/linux-3-android-dev/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/linux-2-stm32/">Linux-STM32开发环境部署</a></h1>
<div class="post-meta-inline">
@@ -125,8 +158,8 @@
<div class="post-content">
<p>前言 本文记录STM32命令行开发环境在Ubuntu上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件,但目前似乎没有Nixos上的打包。</p>
<p>前言 本文记录STM32命令行开发环境在Linux上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件但目前没有Nixos上的打包。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
@@ -236,39 +269,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-baci/">乱七八糟:Baci实验笔记</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-04-23
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 BACI是一个简化的并发程序模拟器这里对其语法与运行环境进行说明。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-baci/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -122,20 +122,20 @@
<div class="post-content">
<p>前言 本文记录STM32命令行开发环境在Ubuntu上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件,但目前似乎没有Nixos上的打包。</p>
<span id="continue-reading"></span><h2 id="huan-jing">环境</h2>
<p>前言 本文记录STM32命令行开发环境在Linux上的部署用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
软件但目前没有Nixos上的打包。</p>
<span id="continue-reading"></span><h2 id="yi-lai-bao">依赖包</h2>
<ul>
<li><strong>Ubuntu</strong></li>
</ul>
<p>以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。</p>
<p>以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>sudo apt update
</span><span>sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
</span></code></pre>
<ul>
<li><strong>Nixos</strong></li>
</ul>
<p>虽然没有RT-Thread-studio这个包但是可以用flake.nix很方便的搭建一个开发环境</p>
<p>虽然Nixos上没有RT-Thread-studio这个包但是可以用flake.nix很方便的搭建一个开发环境</p>
<pre data-lang="nix" style="background-color:#151515;color:#e8e8d3;" class="language-nix "><code class="language-nix" data-lang="nix"><span>{
</span><span> </span><span style="color:#ffb964;">description </span><span>= </span><span style="color:#99ad6a;">&quot;STM32 &amp;&amp; RT-Thread development environment&quot;</span><span>;
</span><span> </span><span style="color:#ffb964;">inputs</span><span>.</span><span style="color:#ffb964;">nixpkgs</span><span>.</span><span style="color:#ffb964;">url </span><span>= </span><span style="color:#99ad6a;">&quot;github:NixOS/nixpkgs/nixpkgs-unstable&quot;</span><span>;
@@ -165,17 +165,31 @@
</span><span>}
</span></code></pre>
<h2 id="yuan-ma">源码</h2>
<p>使用Git拉取项目源码</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread/rt-thread.git
</span><span>git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
<p>随后使用Git拉取项目源码</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
</span></code></pre>
<h2 id="envgong-ju">ENV工具</h2>
<p>使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span># 克隆仓库
</span><span>git clone https://github.com/RT-Thread/env.git ~/env
</span><span># 将 ~/env 添加到 PATH
</span><span>export PATH=&quot;$PATH:$HOME/env&quot;
</span><span># 显示 PATH
</span><span>echo &quot;$PATH&quot;
</span><span># 查看 pkgs 命令是否存在
</span><span>type pkgs
</span></code></pre>
<p>随后可以使用PKG初始化并安装两个必要的包</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>pkgs --update
</span><span>pip install kconfiglib
</span><span>pip install scons
</span></code></pre>
<h2 id="lian-jie">连接</h2>
<p>使用USB连接开发板和开发PC并使用lsusb查看是否连接成功</p>
<p>使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>lsusb
</span><span>Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
</span></code></pre>
<p>如果你和我一样使用 qemu 需要在libvirt中使用Add_hardware添加usb设备。</p>
<p>添加成功后可以使用这个命令来检测:</p>
<p>添加成功后可以使用这个命令来检测是否连接成功:</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span> st-info --probe
</span><span>Found 1 stlink programmers
</span><span> version: V2J35S26
@@ -185,16 +199,11 @@
</span><span> chipid: 0x413
</span><span> dev-type: STM32F4x5_F4x7
</span></code></pre>
<h2 id="envgong-ju">ENV工具</h2>
<p>使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。我使用的是fish你也可以用其他的Shell命令有所不同</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread/env.git ~/env
</span><span>set -x PATH $PATH ~/env
</span><span>fish_add_path ~/env
</span><span>echo $PATH
</span><span>type pkgs
</span></code></pre>
<h2 id="pkggong-ju">PKG工具</h2>
<p>由于该项目大量使用Python所以需要PKG包支持。首先我们修改这个文件的交叉工具链部分</p>
<blockquote>
<p>如果你和我一样将Ubuntu安装在QEMU虚拟机中 需要在libvirt中使用Add_hardware添加usb设备</p>
</blockquote>
<h2 id="xiu-gai-jiao-cha-gong-ju-lian">修改交叉工具链</h2>
<p>链接成功后进入项目目录,发现<code>rtconfig.py</code>没有Linux路径需要我们手动修改交叉工具链部分</p>
<pre data-lang="python" style="background-color:#151515;color:#e8e8d3;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#888888;">#修改 rtconfig.py
</span><span>
</span><span style="color:#888888;"># cross_tool provides the cross compiler
@@ -207,6 +216,7 @@
</span><span> </span><span style="color:#888888;"># Windows 平台
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#8fbfdc;">r</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">C:\Users\XXYYZZ</span><span style="color:#556633;">&#39;
</span><span> </span><span style="color:#8fbfdc;">else</span><span>:
</span><span> </span><span style="color:#888888;"># 修改这里
</span><span> </span><span style="color:#888888;"># Linux / macOS 平台
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">/usr/bin</span><span style="color:#556633;">&#39;
</span><span>
@@ -226,11 +236,6 @@
</span><span> </span><span style="color:#8fbfdc;">else</span><span>:
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">/usr/bin</span><span style="color:#556633;">&#39;
</span></code></pre>
<p>随后可以使用PKG初始化并安装两个必要的包</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>pkgs --update
</span><span>pip install kconfiglib
</span><span>pip install scons
</span></code></pre>
<h2 id="bian-yi">编译</h2>
<p>在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>scons --menuconfig
@@ -250,92 +255,91 @@
<p>除了USB之外我们还可以使用串口连接</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>sudo apt install picocom
</span><span>picocom -b 115200 /dev/ttyACM0
</span><span>version
</span></code></pre>
<p>可以使用<code>ctrl + A 然后 ctrl + x</code>退出。</p>
<h2 id="shi-yong-cmake">使用Cmake</h2>
<p>通过官方文档可以得知除了scons外还可以使用Cmake来编译.</p>
<p>首先找到编译器的路径并export</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span> which arm-none-eabi-gcc
</span><span>/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
</span><span>export RTT_EXEC_PATH=/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
</span><span>export RTT_CC=gcc
<p>首先找到编译器的路径并export我这里是Nixos的路径如果你使用其他发行版注意修改</p>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> which arm-none-eabi-gcc
</span><span style="color:#ffb964;">/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">RTT_EXEC_PATH</span><span>=</span><span style="color:#99ad6a;">/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">RTT_CC</span><span>=</span><span style="color:#99ad6a;">gcc
</span></code></pre>
<p>随后使用指令<code>scons --target=cmake</code></p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span> scons --target=cmake
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> scons</span><span style="color:#ffb964;"> --target</span><span>=cmake
</span><span>
</span><span>scons: Reading SConscript files ...
</span><span>Newlib version:4.5.0
</span><span>Update setting files for CMakeLists.txt...
</span><span>Done!
</span><span>scons: done reading SConscript files.
</span><span>scons: Building targets ...
</span><span>scons: building associated VariantDir targets: build
</span><span>CC build/applications/main.o
</span><span>LINK rt-thread.elf
</span><span>arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
</span><span>arm-none-eabi-size rt-thread.elf
</span><span>scons: done building targets.
</span><span style="color:#ffb964;">scons:</span><span> Reading SConscript files ...
</span><span style="color:#ffb964;">Newlib</span><span> version:4.5.0
</span><span style="color:#ffb964;">Update</span><span> setting files for CMakeLists.txt...
</span><span style="color:#ffb964;">Done!
</span><span style="color:#ffb964;">scons:</span><span> done reading SConscript files.
</span><span style="color:#ffb964;">scons:</span><span> Building targets ...
</span><span style="color:#ffb964;">scons:</span><span> building associated VariantDir targets: build
</span><span style="color:#ffb964;">CC</span><span> build/applications/main.o
</span><span style="color:#ffb964;">LINK</span><span> rt-thread.elf
</span><span style="color:#ffb964;">arm-none-eabi-objcopy -O</span><span> binary rt-thread.elf rtthread.bin
</span><span style="color:#ffb964;">arm-none-eabi-size</span><span> rt-thread.elf
</span><span style="color:#ffb964;">scons:</span><span> done building targets.
</span></code></pre>
<p>可以看到生成CmakeLists.txt成功随后开始构建</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span> cd ./build
</span><span> cmake ..
</span><span>CMake Warning (dev) at CMakeLists.txt:43:
</span><span> Syntax Warning in cmake code at column 100
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> cd ./build
</span><span style="color:#ffb964;"></span><span> cmake ..
</span><span style="color:#ffb964;">CMake</span><span> Warning (dev) </span><span style="color:#ffb964;">at</span><span> CMakeLists.txt:43:
</span><span> </span><span style="color:#ffb964;">Syntax</span><span> Warning in cmake code at column 100
</span><span>
</span><span> Argument not separated from preceding token by whitespace.
</span><span>This warning is for project developers. Use -Wno-dev to suppress it.
</span><span> </span><span style="color:#ffb964;">Argument</span><span> not separated from preceding token by whitespace.
</span><span style="color:#ffb964;">This</span><span> warning is for project developers. Use</span><span style="color:#ffb964;"> -Wno-dev</span><span> to suppress it.
</span><span>
</span><span>-- The C compiler identification is GNU 14.3.1
</span><span>-- The CXX compiler identification is GNU 14.3.1
</span><span>-- The ASM compiler identification is GNU
</span><span>-- Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
</span><span>-- Detecting C compiler ABI info
</span><span>-- Detecting C compiler ABI info - done
</span><span>-- Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
</span><span>-- Detecting C compile features
</span><span>-- Detecting C compile features - done
</span><span>-- Detecting CXX compiler ABI info
</span><span>-- Detecting CXX compiler ABI info - done
</span><span>-- Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
</span><span>-- Detecting CXX compile features
</span><span>-- Detecting CXX compile features - done
</span><span>-- Configuring done (0.4s)
</span><span>-- Generating done (0.0s)
</span><span>-- Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
</span><span style="color:#ffb964;">--</span><span> The C compiler identification is GNU 14.3.1
</span><span style="color:#ffb964;">--</span><span> The CXX compiler identification is GNU 14.3.1
</span><span style="color:#ffb964;">--</span><span> The ASM compiler identification is GNU
</span><span style="color:#ffb964;">--</span><span> Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
</span><span style="color:#ffb964;">--</span><span> Detecting C compiler ABI info
</span><span style="color:#ffb964;">--</span><span> Detecting C compiler ABI info - done
</span><span style="color:#ffb964;">--</span><span> Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
</span><span style="color:#ffb964;">--</span><span> Detecting C compile features
</span><span style="color:#ffb964;">--</span><span> Detecting C compile features - done
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compiler ABI info
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compiler ABI info - done
</span><span style="color:#ffb964;">--</span><span> Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compile features
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compile features - done
</span><span style="color:#ffb964;">--</span><span> Configuring done (0.4s)
</span><span style="color:#ffb964;">--</span><span> Generating done (0.0s)
</span><span style="color:#ffb964;">--</span><span> Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
</span></code></pre>
<p>使用<code>make</code>命令编译:</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span> make
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> make
</span><span>[ 1%] Building C object CMakeFiles/rtthread.elf.dir/applications/main.c.obj
</span><span>[ 2%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cctype.c.obj
</span><span>[ 3%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cstdio.c.obj
</span><span>......
</span><span style="color:#ffb964;">......
</span><span>[ 97%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/libraries/STM32F4xx_HAL/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c.obj
</span><span>[ 98%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/libraries/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c.obj
</span><span>[100%] Linking C executable rtthread.elf
</span><span> text data bss dec hex filename
</span><span> 98516 1468 8400 108384 1a760 rtthread.elf
</span><span>[100%] Built target rtthread.elf
</span><span style="color:#ffb964;">[100%]</span><span> Linking C executable rtthread.elf
</span><span> </span><span style="color:#ffb964;">text</span><span> data bss dec hex filename
</span><span> </span><span style="color:#ffb964;">98516</span><span> 1468 8400 108384 1a760 rtthread.elf
</span><span style="color:#ffb964;">[100%]</span><span> Built target rtthread.elf
</span></code></pre>
<h2 id="shi-yong-renode">使用Renode</h2>
<p>如果没有真实的开发版可以使用Renode来进行仿真模拟</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span># 启动renode
</span><span>renode
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 启动renode
</span><span style="color:#ffb964;">renode
</span><span>
</span><span># 创建机器
</span><span>(monitor) mach create
</span><span style="color:#888888;"># 创建机器
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) mach create
</span><span>
</span><span># 加载STM32F407平台
</span><span>(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
</span><span style="color:#888888;"># 加载STM32F407平台
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
</span><span>
</span><span># 加载你的固件
</span><span>(monitor) sysbus LoadELF @/你的路径/rtthread.elf
</span><span style="color:#888888;"># 加载你的固件
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) sysbus LoadELF @/你的路径/rtthread.elf
</span><span>
</span><span># 打开串口窗口finsh会显示在这里
</span><span>(monitor) showAnalyzer sysbus.usart1
</span><span style="color:#888888;"># 打开串口窗口finsh会显示在这里
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) showAnalyzer sysbus.usart1
</span><span>
</span><span># 启动仿真
</span><span>(monitor) start
</span><span style="color:#888888;"># 启动仿真
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) start
</span></code></pre>
<blockquote>
<p>Renode 常用命令大全</p>
@@ -419,6 +423,13 @@
</a>
</span>
<span class="button next">
<a href="https://blog.dich.bid/linux-3-android-dev/">
<span class="button__text">Linux-Android开发环境部署</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>

View File

@@ -0,0 +1,326 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;s Blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noodp"/>
<!-- 字体预加载 - 减少布局偏移 CLS -->
<link rel="preload" href="https://blog.dich.bid/fonts/hack-regular.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://blog.dich.bid/fonts/hack-bold.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://blog.dich.bid/fonts/hack-italic.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://blog.dich.bid/fonts/hack-bolditalic.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.bid/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich's Blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.bid/linux-3-android-dev/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich's Blog">
<meta property="twitter:domain" content="blog.dich.bid">
<meta property="twitter:url" content="https://blog.dich.bid/linux-3-android-dev/">
<link rel="alternate" type="application/atom+xml" title="Dich&#x27;s Blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
<link rel="shortcut icon" type="image/webp" href="/dich.webp">
<!-- ✅ Added center alignment styles -->
<style>
.footer {
text-align: center;
padding: 1rem 0;
}
.footer__inner {
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
}
.copyright {
text-align: center;
}
</style>
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.bid" style="text-decoration: none;">
<div class="logo">
Dich&#x27;s Blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.bid">Blog</a></li>
<li><a href="https://blog.dich.bid/archive">Archive</a></li>
<li><a href="https://blog.dich.bid/weekly">Weekly</a></li>
<li><a href="https://blog.dich.bid/tags">Tags</a></li>
<li><a href="https://blog.dich.bid/search">Search</a></li>
<li><a href="https://blog.dich.bid/links">Links</a></li>
<li><a href="https://blog.dich.bid/atom.xml">Rss</a></li>
<li><a href="https://blog.dich.bid/about">About me</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">My github</a></li>
<li><a href="https://github.com/getzola/zola" target="_blank" rel="noopener noreferrer">Zola frame</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post" data-pagefind-body>
<h1 class="post-title"><a href="https://blog.dich.bid/linux-3-android-dev/">Linux-Android开发环境部署</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-11-20
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
<div class="post-content">
<p>前言 本文记录Android命令行开发环境在Linux上的部署用以替代Android-studio。</p>
<span id="continue-reading"></span><h2 id="ubuntufang-an">Ubuntu方案</h2>
<ul>
<li>首先安装依赖包:</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install openjdk-17-jdk nodejs
</span></code></pre>
<ul>
<li>安装Command-tools</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir -p ~</span><span>/Android/cmdline-tools/latest
</span><span style="color:#888888;">## 下载链接https://developer.android.com/studio?hl=zh-cn#command-tools
</span><span>cd </span><span style="color:#ffb964;">~</span><span>/Android/cmdline-tools/latest
</span><span style="color:#ffb964;">wget</span><span> https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip
</span><span style="color:#ffb964;">unzip</span><span> ./commandlinetools-linux-13114758_latest.zip
</span></code></pre>
<ul>
<li>使用官方脚本安装Sdkman包管理器</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -s </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">https://get.sdkman.io</span><span style="color:#556633;">&quot; </span><span>| </span><span style="color:#ffb964;">bash
</span><span>source </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.sdkman/bin/sdkman-init.sh</span><span style="color:#556633;">&quot;
</span></code></pre>
<ul>
<li>随后使用Sdkman下载并安装gradle/kotlin</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sdk</span><span> install gradle
</span><span style="color:#ffb964;">sdk</span><span> install kotlin
</span></code></pre>
<ul>
<li>设置环境变量:</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">ANDROID_HOME</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/Android
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/emulator
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/platform-tools
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/cmdline-tools/latest/bin
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/build-tools/34.0.0
</span><span>source </span><span style="color:#ffb964;">~</span><span>/.bashrc
</span></code></pre>
<ul>
<li>继续下载一些SDK平台与构建工具</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sdkmanager </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">platforms;android-34</span><span style="color:#556633;">&quot; &quot;</span><span style="color:#99ad6a;">build-tools;34.0.0</span><span style="color:#556633;">&quot; &quot;</span><span style="color:#99ad6a;">platform-tools</span><span style="color:#556633;">&quot;
</span><span style="color:#ffb964;">sdkmanager </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">emulator</span><span style="color:#556633;">&quot;</span><span> //虚拟机中调试
</span></code></pre>
<ul>
<li>查看版本</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>$ sdk version
</span><span>
</span><span style="color:#ffb964;">SDKMAN!
</span><span style="color:#ffb964;">script:</span><span> 5.20.0
</span><span style="color:#ffb964;">native:</span><span> 0.7.14 (linux x86_64)
</span><span>
</span><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>$ gradle</span><span style="color:#ffb964;"> -v
</span><span>
</span><span style="color:#ffb964;">------------------------------------------------------------
</span><span style="color:#ffb964;">Gradle</span><span> 8.10.2
</span><span style="color:#ffb964;">------------------------------------------------------------
</span><span>
</span><span style="color:#ffb964;">Build</span><span> time: 2024-09-23 21:28:39 UTC
</span><span style="color:#ffb964;">Revision:</span><span> 415adb9e06a516c44b391edff552fd42139443f7
</span><span>
</span><span style="color:#ffb964;">Kotlin:</span><span> 1.9.24
</span><span style="color:#ffb964;">Groovy:</span><span> 3.0.22
</span><span style="color:#ffb964;">Ant:</span><span> Apache Ant(TM) </span><span style="color:#ffb964;">version</span><span> 1.10.14 compiled on August 16 2023
</span><span style="color:#ffb964;">Launcher</span><span> JVM: 17.0.16 (Ubuntu 17.0.16+8-Ubuntu-0ubuntu124.04.1)
</span><span style="color:#ffb964;">Daemon</span><span> JVM: /usr/lib/jvm/java-17-openjdk-amd64 (no JDK specified, using current Java home)
</span><span style="color:#ffb964;">OS:</span><span> Linux 6.14.0-35-generic amd64
</span><span>
</span><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>/Git/android-templates$ kotlin</span><span style="color:#ffb964;"> -version
</span><span style="color:#ffb964;">Kotlin</span><span> version 1.6.21-release-334 (JRE 21.0.8+9-Ubuntu-0ubuntu124.04.1)
</span><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>/Git/android-templates/template-compose$ kscript</span><span style="color:#ffb964;"> -v
</span><span style="color:#ffb964;">Copyright</span><span> : 2022 Holger Brandl
</span><span style="color:#ffb964;">License</span><span> : MIT
</span><span style="color:#ffb964;">Version</span><span> : v4.0.3
</span><span style="color:#ffb964;">Website</span><span> : https://github.com/holgerbrandl/kscript
</span><span style="color:#ffb964;">A</span><span> new version (v4.2.0) </span><span style="color:#ffb964;">of</span><span> kscript is available.
</span><span style="color:#ffb964;">Kotlin</span><span> : 2.1.10-release-473
</span><span style="color:#ffb964;">Java</span><span> : JRE 17.0.16+8
</span></code></pre>
<h2 id="keyfang-an">Key方案</h2>
<p>构建Release包需要密钥签名验证可以使用传统的明文配置或者使用密钥管理器.</p>
<h3 id="xiang-tong-bu-fen">相同部分</h3>
<ul>
<li>生成密钥</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">keytool -genkey -v </span><span>\
</span><span style="color:#ffb964;"> -keystore ~</span><span>/.android/jetlagged-release.keystore \
</span><span style="color:#ffb964;"> -alias</span><span> jetlagged \
</span><span style="color:#ffb964;"> -keyalg</span><span> RSA \
</span><span style="color:#ffb964;"> -keysize</span><span> 2048 \
</span><span style="color:#ffb964;"> -validity</span><span> 10000
</span></code></pre>
<ul>
<li>修改app/build.gradle.kts</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span> </span><span style="color:#ffb964;">signingConfigs </span><span>{
</span><span> create(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">&quot;</span><span>) {
</span><span> storeFile = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEYSTORE_FILE</span><span style="color:#556633;">&quot;</span><span>)?.let { file(it) }
</span><span> storePassword = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEYSTORE_PASSWORD</span><span style="color:#556633;">&quot;</span><span>)
</span><span> keyAlias = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEY_ALIAS</span><span style="color:#556633;">&quot;</span><span>)
</span><span> keyPassword = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEY_PASSWORD</span><span style="color:#556633;">&quot;</span><span>)
</span><span> }
</span><span> }
</span><span>
</span><span> </span><span style="color:#ffb964;">buildTypes </span><span>{
</span><span> release {
</span><span> signingConfig = signingConfigs.getByName(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">&quot;</span><span>) // 添加这行
</span><span> isMinifyEnabled = true
</span><span> proguardFiles(
</span><span> getDefaultProguardFile(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">proguard-android-optimize.txt</span><span style="color:#556633;">&quot;</span><span>),
</span><span> </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">proguard-rules.pro</span><span style="color:#556633;">&quot;
</span><span> )
</span><span> }
</span><span> }
</span></code></pre>
<h3 id="chuan-tong-fang-fa">传统方法</h3>
<ul>
<li>创建配置文件</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">cat </span><span>&gt; </span><span style="color:#ffb964;">~</span><span>/.android-signing-secrets </span><span style="color:#99ad6a;">&lt;&lt; </span><span style="color:#556633;">&#39;</span><span style="color:#8fbfdc;">EOF</span><span style="color:#556633;">&#39;
</span><span style="color:#99ad6a;">export KEYSTORE_FILE=&quot;$HOME/.android/jetlagged-release.keystore&quot;
</span><span style="color:#99ad6a;">export KEYSTORE_PASSWORD=&quot;你的keystore密码&quot;
</span><span style="color:#99ad6a;">export KEY_ALIAS=&quot;jetlagged&quot;
</span><span style="color:#99ad6a;">export KEY_PASSWORD=&quot;你的key密码&quot;
</span><span style="color:#8fbfdc;">EOF
</span><span>
</span><span style="color:#888888;"># 设置权限
</span><span style="color:#ffb964;">chmod</span><span> 600 </span><span style="color:#ffb964;">~</span><span>/.android-signing-secrets
</span><span>
</span><span style="color:#888888;"># 添加到 gitignore (全局)
</span><span>echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">.android-signing-secrets</span><span style="color:#556633;">&quot; </span><span>&gt;&gt; </span><span style="color:#ffb964;">~</span><span>/.gitignore_global
</span></code></pre>
<ul>
<li>flake配置</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># Auto load Key
</span><span style="color:#8fbfdc;">if </span><span>[ </span><span style="color:#ffb964;">-f </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.android-signing-secrets</span><span style="color:#556633;">&quot; </span><span>]; </span><span style="color:#8fbfdc;">then
</span><span> source </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.android-signing-secrets</span><span style="color:#556633;">&quot;
</span><span> echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KeyOK</span><span style="color:#556633;">&quot;
</span><span style="color:#8fbfdc;">fi
</span></code></pre>
<h3 id="xian-dai-fang-fa">现代方法</h3>
<ul>
<li>安装libsecret包</li>
<li>keepassxc新建Android群组添加条目<code>android_key_password</code><code>android_keystore_password</code></li>
<li>设置密码,和上面生成的相同;</li>
<li>在条目的高级-属性中添加<code>name/android_key_password</code><code>name/android_keystore_password</code></li>
<li>打开设置-保密服务集成公开Android文件夹</li>
<li>flake中写</li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># Release Key
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEYSTORE_FILE</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.android/jetlagged-release.keystore</span><span style="color:#556633;">&quot;
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEY_ALIAS</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">jetlagged</span><span style="color:#556633;">&quot;
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEYSTORE_PASSWORD</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$(</span><span style="color:#ffb964;">secret-tool</span><span style="color:#99ad6a;"> lookup name android_keystore_password)</span><span style="color:#556633;">&quot;
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEY_PASSWORD</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$(</span><span style="color:#ffb964;">secret-tool</span><span style="color:#99ad6a;"> lookup name android_key_password)</span><span style="color:#556633;">&quot;
</span></code></pre>
<hr />
<p><strong>Done.</strong></p>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.bid/linux-2-stm32/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Linux-STM32开发环境部署</span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2025
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep"> :: CC BY-SA 4.0 :: A friend comes from distant lands</span>
</a>
</span>
</div>
</div>
</footer>
</div>
</body>
</html>

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/awesome-openwrt/">综合工程:OpenWrt路由部署与软件编译</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-12
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/zong-he-gong-cheng/">#综合工程</a></span>
<div class="post-content">
<p>前言 openwrt 是一个自由的、兼容性好的嵌入式 linux 发行版。作为软路由玩家必备的一款神器可以实现诸如去广告多拨和科学上网等多种功能。本文介绍openwrt在各种平台上的部署流程。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/awesome-openwrt/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/awesome-pve-mcsm/">综合工程:PVE安装与MC服务器搭建</a></h1>
<div class="post-meta-inline">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-baci/">乱七八糟:Baci实验笔记</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-04-23
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 BACI是一个简化的并发程序模拟器这里对其语法与运行环境进行说明。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-baci/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-lazyvim/">乱七八糟:lazyvim快速上手</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-markdown/">乱七八糟:Markdown使用快速教程</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-04-08
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 本文为 Markdown 教程,内容涵盖 Markdown 的历史、作用、基本语法和显示效果可以在github将本文的源码拷贝供大家参考和学习。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-markdown/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-markdown/">乱七八糟:Markdown使用快速教程</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-04-08
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 本文为 Markdown 教程,内容涵盖 Markdown 的历史、作用、基本语法和显示效果可以在github将本文的源码拷贝供大家参考和学习。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-markdown/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-gfs/">乱七八糟:GFS项目考量笔记</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/network-homenet-1/">家庭组网系列(1):方案与设备选购</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-01-21
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
<div class="post-content">
<p>前言 本文介绍一些家庭组网方案和家庭网络升级方案。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/network-homenet-1/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/network-homenet-1/">家庭组网系列(1):方案与设备选购</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-01-21
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
<div class="post-content">
<p>前言 本文介绍一些家庭组网方案和家庭网络升级方案。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/network-homenet-1/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-2024/">乱七八糟:2024年度总结</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-cslearning/">乱七八糟:计算机科学优质视频</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-05-31
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 CSdiy珠玉在前,为CS教育做出了极大贡献.这里分享一些优质的CS学习相关视频.</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-cslearning/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-cslearning/">乱七八糟:计算机科学优质视频</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-05-31
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 CSdiy珠玉在前,为CS教育做出了极大贡献.这里分享一些优质的CS学习相关视频.</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-cslearning/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/windows-5-py/">Windows系列(5):Python开发配置</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/windows-2-set/">Windows系列(2):常用操作与配置</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-05-25
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/windows/">#Windows</a></span>
<div class="post-content">
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一其用户界面的设计非常经典但存在许多不足之处本篇记录一些常用脚本。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/windows-2-set/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/windows-2-set/">Windows系列(2):常用操作与配置</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-05-25
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/windows/">#Windows</a></span>
<div class="post-content">
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一其用户界面的设计非常经典但存在许多不足之处本篇记录一些常用脚本。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/windows-2-set/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/windows-1-install/">Windows系列(1):系统安装与设置</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-opensource/">乱七八糟:开源软件与协议</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-03
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 本文旨在介绍开源以及开源许可证,这些许可证规定了使用、修改和分发开源软件的条件。通过了解不同类型的开源许可证及其特点,读者将能够更好地理解在开发和使用开源软件时的法律和道德责任。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-opensource/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-opensource/">乱七八糟:开源软件与协议</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-03
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 本文旨在介绍开源以及开源许可证,这些许可证规定了使用、修改和分发开源软件的条件。通过了解不同类型的开源许可证及其特点,读者将能够更好地理解在开发和使用开源软件时的法律和道德责任。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-opensource/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/network-how-email-works-2/">网络艺术:自建域名邮箱</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/network-isps/">网络艺术:国内&#x2F;国际骨干ISP线路整理</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-02-10
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
<div class="post-content">
<p>前言 本文主要探讨的是IPv4网络国际出口线路的质量分析以及各大ISP的介绍。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/network-isps/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/network-isps/">网络艺术:国内&#x2F;国际骨干ISP线路整理</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-02-10
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
<div class="post-content">
<p>前言 本文主要探讨的是IPv4网络国际出口线路的质量分析以及各大ISP的介绍。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/network-isps/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-git/">乱七八糟:Git使用简明手册</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-accurate-pronunciation/">乱七八糟:常见发音错误术语集合</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-25
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 中文和英语发音习惯不同,容易引起误解。本文旨在帮助您准确发音常见的科技术语,欢迎随时补充。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-accurate-pronunciation/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@@ -107,6 +107,39 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-accurate-pronunciation/">乱七八糟:常见发音错误术语集合</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-25
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
<div class="post-content">
<p>前言 中文和英语发音习惯不同,容易引起误解。本文旨在帮助您准确发音常见的科技术语,欢迎随时补充。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/about-accurate-pronunciation/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/about-calling-cards/">乱七八糟:流量卡购买与套路</a></h1>
<div class="post-meta-inline">
@@ -235,39 +268,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.bid/awesome-openwrt/">综合工程:OpenWrt路由部署与软件编译</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-12
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/zong-he-gong-cheng/">#综合工程</a></span>
<div class="post-content">
<p>前言 openwrt 是一个自由的、兼容性好的嵌入式 linux 发行版。作为软路由玩家必备的一款神器可以实现诸如去广告多拨和科学上网等多种功能。本文介绍openwrt在各种平台上的部署流程。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.bid/awesome-openwrt/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
{"version":"1.3.0","languages":{"en":{"hash":"en_15f5696b4f","wasm":"en","page_count":78}}}
{"version":"1.3.0","languages":{"en":{"hash":"en_b39f2e47c5","wasm":"en","page_count":79}}}

Binary file not shown.

View File

@@ -153,6 +153,10 @@
<loc>https://blog.dich.bid/linux-2-stm32/</loc>
<lastmod>2025-07-20</lastmod>
</url>
<url>
<loc>https://blog.dich.bid/linux-3-android-dev/</loc>
<lastmod>2025-11-20</lastmod>
</url>
<url>
<loc>https://blog.dich.bid/network-aria2/</loc>
<lastmod>2025-04-15</lastmod>

View File

@@ -113,7 +113,7 @@
<li class="tag-list">
<a href="https://blog.dich.bid/tags/linux/">
Linux (3 posts)
Linux (4 posts)
</a>
</li>

View File

@@ -110,7 +110,7 @@ Dich&#x27;s Blog</title>
<div class="post">
<h1 class="post-title">
tag: #Linux
(3 posts)
(4 posts)
</h1>
<a href="https://blog.dich.bid/tags">
@@ -119,6 +119,16 @@ Dich&#x27;s Blog</title>
<ul><li class="post-list">
<a href="https://blog.dich.bid/linux-3-android-dev/">
<span class="post-date">2025-11-20</span>
:: <span class="post-list-title">Linux-Android开发环境部署</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.bid/linux-2-stm32/">
<span class="post-date">2025-07-20</span>
:: <span class="post-list-title">Linux-STM32开发环境部署</span></a>