Commit on 2025/07/05 周六 14:52:46.52

This commit is contained in:
zhangsan 2025-07-05 14:52:46 +08:00
parent 2c71156c3c
commit d8f67d93e9
41 changed files with 225 additions and 135 deletions

View File

@ -0,0 +1,100 @@
# 安卓开发
## 导入功能模块心得
最近想在我的书城中增加一个阅读器的功能难度颇高因此在github上找到了一个封装了阅读器功能的项目仅需获得文件本地存储地址调用其提供的函数即可进行阅读。
**但是**github介绍的使用方法并不总是有效比如我就经常无法正确添加依赖
![image-20240503200121198](https://pic.bitday.top/i/2025/03/19/u7dq7u-2.png)
因此,我将其项目代码拷贝到本地,手动集成。
![image-20240503200221147](https://pic.bitday.top/i/2025/03/19/u7djxz-2.png)
依据项目结构可以发现app是主项目hwtxtreaderlib是功能模块根据是这张图
![image-20240503200343665](https://pic.bitday.top/i/2025/03/19/u7dxvc-2.png)
build.gradle(:app)中引入了hwtxtreaderlib的依赖而app只是个demo测试模块相当于演示了如果在自己的项目中引用hwtxtreaderlib。因此手动步骤如下
- 将hwtxtreaderlib复制到自己的项目文件夹中
![image-20240503200651488](https://pic.bitday.top/i/2025/03/19/u7eub5-2.png)
- 在app的build.gradle中添加依赖
```text
implementation project(':hwtxtreaderlib')
```
- 在settings.gradle中设置项目包括的模块
```
include ':app', ':hwtxtreaderlib'
```
- syn now 同步一下然后android studio中项目结构变成如下图
![image-20240503201012590](https://pic.bitday.top/i/2025/03/19/u7en9c-2.png)
- build没报错基本就稳了然后就运行试试
![image-20240503201211104](https://pic.bitday.top/i/2025/03/19/u7eesw-2.png)
这里可能AndroidManifest.xml报错需要查看原项目中app模块如何编写的做些适当的修改我这里卡了很久.
有时候github项目会将项目的详细信息写在wiki中
![image-20240503213919450](https://pic.bitday.top/i/2025/03/19/u7e586-2.png)
## 如何运行本项目?
用前须知:
1. 本项目需联网使用数据存储在后端云Bmob中目前续费日期到7.22日结束,之后可能会出现无法运行情况。
2. 内置的阅读小助手调用了chatgpt但是通过国内网站镜像因此无须连接vpn且密钥写在项目中了无须额外配置直接使用即可额度有限超额小助手会无法响应但基本不会超额
3. 可以注册用户也可以直接使用账号6462 密码123 登录
4. 如有问题联系我的qq3061033470
### 法一(推荐):
本项目已经打包成签名的发布版APK可以直接在apk文件夹下找到app-release.apk发送到安卓手机上下载安装需要在设置上启用安装未知来源的应用打开app登录即可使用。效果如下
<img src="https://pic.bitday.top/i/2025/07/05/nq2rv5-0.jpg" style="zoom: 33%;" />
**注意**:可能部分手机打开会出现颜色显示问题,目前未解决该问题
### 法二
**JianShu为项目文件需要存放在无中文的路径中**
1. 下载2022版本的android studio(老旧版本可能出现bug)
<img src="https://pic.bitday.top/i/2025/07/05/nql4a1-0.png"/>
2. android studio内置各种安卓模拟机需要首先打开Device Manager下载建议下载Pixel 5 API30下载模拟机可能耗时几分钟
<img src="https://pic.bitday.top/i/2025/07/05/nql12j-0.png"/>
<img src="https://pic.bitday.top/i/2025/07/05/nql2g4-0.png"/>
<img src="D:\folder\study\whut\企业级WEB应用开发\Jianshu大作业报告\pic\屏幕截图 2024-05-22 164348.png"/>
3. 导入本项目,点击根目录
<img src="https://pic.bitday.top/i/2025/07/05/nql2p7-0.png"/>
4. Gradle会自动导入依赖下载本项目所依赖的文件若android studio右下角停止加载则说明项目导入成功第一次加载时间可能比较长
<img src="https://pic.bitday.top/i/2025/07/05/nql39i-0.png"/>
如果意外中断了可以在Android Studio中点击`File > Sync Project with Gradle Files`
5. 运行项目第一次运行会在模拟机上安卓该app
<img src="https://pic.bitday.top/i/2025/07/05/nql5t5-0.png"/>
6. 出现登录界面则成功
![屏幕截图 2024-05-22 165419](https://pic.bitday.top/i/2025/07/05/nr6814-0.png)

View File

@ -0,0 +1,44 @@
# 技巧
## 修改git提交日期
用git bash here打开不要cmd终端。
1.先提交本地修改
2.git rebase -i --root =》然后将需要修改的pick改为edit
3.GIT_AUTHOR_DATE="2025-04-08T18:11:42" \
GIT_COMMITTER_DATE="2025-04-08T18:11:42" \
git commit --amend --no-edit --date "2025-04-08T18:11:42"
注意这两个时间都要设置,删掉--no-edit可以编辑commit信息。
4.git rebase --continue 继续编辑下一个提交记录
5.git push --force origin master 提交修改到远程。
git rebase --abort 如果中途不想修改了,可以退出操作
git log --pretty=fuller -1 查看AuthorDate和CommitDate是否一致。
编辑远程Gitea中的活动记录
docker exec -it gitea bash
sqlite3 /data/gitea/gitea.db
SELECT id, name, created_unix FROM repository WHERE name = '你的仓库名'; =>获得仓库的id
SELECT id, repo_id, created_unix FROM action where repo_id=19; =>获得该仓库的所有action

View File

@ -1,82 +0,0 @@
```c
int main(){
return 0;
}
```
# ![测试](https://pic.bitday.top/i/2025/03/19/u7da13-2.png)
# 一级标题:# xx
## 二级标题:## xx
无序列表:- xx
- 1
- 2
有序列表1. xx
1. first
2. second
任务列表:- [ ] xx
- [ ] xx
- [ ] xxx
斜体星号xx星号
*斜体*
加粗星号星号xx星号星号
**加粗**
删除波浪线波浪线xx波浪线波浪线
~~删除~~
---
分割线:---
$$
\frac{\partial f}{\partial x}=2\sqrt{a}x
$$
注释:<!--ww1w1-->
[百度](www.baidu.com "一个搜索引擎")
[谷歌][id]
[id]: google.com ""谷歌""
[请参考标题一](#一级标题:# xx )
![ww]()

View File

@ -1,52 +0,0 @@
# 安卓开发
## 导入功能模块心得
最近想在我的书城中开发一下阅读器的功能难度颇高因此在github上找到了一个封装了阅读器功能的项目仅需获得文件本地存储地址调用其提供的函数即可进行阅读。
**但是**github介绍的使用方法并不总是有效比如我就经常无法正确添加依赖
![image-20240503200121198](https://pic.bitday.top/i/2025/03/19/u7dq7u-2.png)
因此,我将其项目代码拷贝到本地,手动集成。
![image-20240503200221147](https://pic.bitday.top/i/2025/03/19/u7djxz-2.png)
依据项目结构可以发现app是主项目hwtxtreaderlib是功能模块根据是这张图
![image-20240503200343665](https://pic.bitday.top/i/2025/03/19/u7dxvc-2.png)
build.gradle(:app)中引入了hwtxtreaderlib的依赖而app只是个demo测试模块相当于演示了如果在自己的项目中引用hwtxtreaderlib。因此手动步骤如下
- 将hwtxtreaderlib复制到自己的项目文件夹中
![image-20240503200651488](https://pic.bitday.top/i/2025/03/19/u7eub5-2.png)
- 在app的build.gradle中添加依赖
```text
implementation project(':hwtxtreaderlib')
```
- 在settings.gradle中设置项目包括的模块
```
include ':app', ':hwtxtreaderlib'
```
- syn now 同步一下然后android studio中项目结构变成如下图
![image-20240503201012590](https://pic.bitday.top/i/2025/03/19/u7en9c-2.png)
- build没报错基本就稳了然后就运行试试
![image-20240503201211104](https://pic.bitday.top/i/2025/03/19/u7eesw-2.png)
这里可能AndroidManifest.xml报错需要查看原项目中app模块如何编写的做些适当的修改我这里卡了很久.
**非常重要!!!**有时候github项目会将项目的详细信息写在wiki中
![image-20240503213919450](https://pic.bitday.top/i/2025/03/19/u7e586-2.png)

View File

@ -877,7 +877,7 @@ public class MyFeature {
- 扫描带 `@DCCValue` 的字段; - 扫描带 `@DCCValue` 的字段;
- 拼出完整 Redis Key`dcc_prefix_key`),若不存在则写入默认值,否则读最新值; - 拼出完整 Redis Key`dcc_prefix_key`),若不存在则写入默认值,否则读最新值;
- 反射把值注入到该 Bean 的私有字段; - **反射把值注入到该 Bean 的私有字段**
- 将 `(redisKey → Bean 实例)` 记录到内存映射,用于后续热更新。 - 将 `(redisKey → Bean 实例)` 记录到内存映射,用于后续热更新。
```java ```java
@ -940,3 +940,83 @@ public Object postProcessAfterInitialization(Object bean, String name) {
### HTTP客戶端框架
**引入依赖**
```xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp-sse</artifactId>
</dependency>
```
**让Spring 管理 Http客户端**
- 写配置类
```java
@Configuration
public class OKHttpClientConfig {
@Bean
public OkHttpClient httpClient() {
return new OkHttpClient();
}
}
```
- 在需要使用的地方注入
```java
@Slf4j
@Service
@RequiredArgsConstructor
public class HttpService {
private final OkHttpClient okHttpClient;
/**
* 发送 JSON POST 请求并返回响应内容
*
* @param apiUrl 接口地址
* @param jsonPayload 请求体 JSON 字符串
*/
public String postJson(String apiUrl, String jsonPayload) throws IOException {
//1.构建参数
MediaType mediaType = MediaType.get("application/json; charset=utf-8");
RequestBody body = RequestBody.create(jsonPayload, mediaType);
Request request = new Request.Builder()
.url(apiUrl)
.post(body)
.addHeader("Content-Type", "application/json")
.build();
//2.调用接口
try (Response response = okHttpClient.newCall(request).execute()) {
if (!response.isSuccessful()) {
log.error("HTTP 请求失败URL{},状态码:{}", apiUrl, response.code());
throw new IOException("Unexpected HTTP code " + response.code());
}
ResponseBody responseBody = response.body();
return responseBody != null ? responseBody.string() : "";
} catch (IOException e) {
log.error("调用 HTTP 接口异常:{}", apiUrl, e);
throw e;
}
}
}
```
- 优点:
单例复用,性能更优
- Spring 默认将 Bean 作为单例管理,整个应用只创建一次 `OkHttpClient`
- 内部的连接池、线程池、缓存等资源可以被复用,**避免频繁创建、销毁**带来的开销。
统一配置,易于维护
- 超时、拦截器、连接池、SSL、日志等配置集中在一个地方改动一次全局生效。
- 避免在代码各处手动 `new OkHttpClient()`、重复配置。