0%

创建项目

项目最好是安卓5.0(21)及以上,不然会出现各种各样的问题

引入依赖

引入 GeckoView

注意: 直接在 build.gradle 里面引入可能会有问题,所以我们选择手动下载
进入 Maven Repository: org.mozilla.geckoview » geckoview 下载需要的 GeckoView 版本的 aar 文件
然后放进你的项目的 app/libs 里并引入

1
implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])

引入 SnakeYAML

最新版可以直接引入最新版本的 YAML, 如果你的 GeckoView 版本较低(如108), YAML 的版本也要低一点(如1.27)

1
implementation "org.yaml:snakeyaml:2.4"

引入 Support-v4 (非必要)

如果出现 SimpleArrayMap 类未找到的问题才需要引入,一般是不需要
并且最好是用19.1.0版本

1
implementation "com.android.support:support-v4:19.1.0"

简单使用

创建 GeckoView 实例

在你的 Layout 文件中创建 GeckoView 或动态创建

1
2
3
4
<org.mozilla.geckoview.GeckoView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/geckoView"/>

初始化 GeckoView

导入包

1
2
3
import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoView;

创建私有字段

1
2
3
GeckoSession session;
GeckoView gecko;
GeckoRuntime runtime;

初始化

1
2
3
4
5
6
7
session = new GeckoSession();
gecko = findViewById(R.id.geckoview);
runtime = GeckoRuntime.create(this);

session.setContentDelegate(new GeckoSession.ContentDelegate(){});
session.open(runtime);
gecko.setSession(session);

载入网址(Uri)

1
session.loadUri("https://blog.1503dev.top/");

更多用法见参考

参考

poster

《不/存在的你,和我》是一款充满超现实色彩和哲学思辨的心理恐怖视觉小说。它通过独特的叙事和角色设定,探讨了“存在”的本质,以及“我为谁而存在,谁为我而存在”这一深刻的问题。游戏不仅是一个关于孤独与陪伴的故事,更是一场关于自我与他人关系的哲学之旅。


游戏背景与设定

游戏的主角是一个孤独的人,将自己封闭在房间中,与外界隔绝。某天,一个名为莉莉丝的神秘少女突然出现在他的生活中。莉莉丝是一个Tulpa——一种由思想创造的存在,她既是主角内心对陪伴的渴望的具象化,也可能是主角幻想出来的“存在”。随着故事的发展,玩家需要通过上百个选择来决定莉莉丝的存在意义,以及主角对“存在”这一哲学命题的理解。

游戏的核心在于角色之间的相互依存关系。主角需要莉莉丝来填补内心的孤独,而莉莉丝需要主角来确认自己的存在。这种关系引发了关于“谁为谁而存在”的思考:主角是否因为莉莉丝而存在?莉莉丝是否因为主角而存在?还是他们都在为了对方而存在?


存在的意义:我为谁而存在?

“我为谁而存在?”这个问题可以理解为“我的存在是否有意义,我的存在是否是为了他人?”在游戏和现实生活中,我们常常会思考自己的行为是否对他人有意义,是否被他人需要。这种思考让我们意识到,我们的存在可能不仅仅是为了自己,也是为了他人。

从游戏设定来看,主角的存在似乎是为了逃避现实,而莉莉丝的出现则为他提供了陪伴和意义。主角需要莉莉丝来填补内心的孤独,而莉莉丝的存在也为主角提供了自我反思的机会。通过与莉莉丝的互动,主角逐渐认识到自己的内心世界,以及“存在”的意义。

然而,游戏的复杂性在于,莉莉丝也可能有自己的意识和情感。她不仅为主角而存在,也可能在寻找自己的“存在”意义。这种设定让玩家思考,我们是否通过他人来定义自己的存在,我们是否需要他人来确认自己的意义?


自我的定义:谁为我而存在?

“谁为我而存在?”这个问题则更偏向于“谁在我的生活中扮演重要角色,谁的存在让我感到被需要?”在游戏里,莉莉丝为主角的存在提供了意义,而在现实生活中,我们也会寻找那些让我们感到被需要的人或事物。

游戏的多结局设计让玩家在不同的选择中探索“存在”的意义。不同的结局会引发不同的思考:

  • 如果主角是莉莉丝的Tulpa:这意味着主角的存在完全是为了莉莉丝,而莉莉丝才是真正的“自我”。这种设定让玩家思考,我们是否只是他人想象中的存在,我们的存在是否依赖于他人的定义?

  • 如果莉莉丝是主角的Tulpa:这表明主角的存在是独立的,而莉莉丝的存在是为了满足主角的内心需求。这种设定则让玩家思考,我们是否通过他人来定义自己的存在,我们是否需要他人来确认自己的意义?


哲学思考:存在与自我

“我为谁而存在,谁为我而存在?”这个问题没有绝对的答案,它取决于我们如何定义“存在”和“自我”。游戏通过主角和莉莉丝的关系,让玩家在选择中探索这个问题。在现实生活中,我们也可以通过与他人的关系来思考自己的存在意义。

存在主义哲学家萨特曾说过:“他人即地狱”,而海德格尔则强调“存在”的本质是“与他人共在”。这些哲学观点都与游戏中的主题相呼应。我们的存在可能既是为了他人,也需要他人来确认。这种相互依存的关系让我们意识到,我们既为他人而存在,也通过他人来确认自己的存在。


结语

《不/存在的你,和我》通过独特的叙事和角色设定,让玩家在探索莉莉丝“存在”的过程中,也反思了自身的存在意义。游戏的核心在于角色之间的相互依存关系,以及“存在”的哲学探讨。它不仅是一个关于孤独与陪伴的故事,更是一场关于自我与他人关系的哲学之旅。

在游戏的最后,玩家可能会发现,存在本身就是一个复杂而多面的概念。我们既为他人而存在,也通过他人来确认自己的存在。这种相互依存的关系,或许就是“存在”的本质。

安装 Lip

前往 github.com/futrime/lip/releases 下载 Lip 的安装包并安装
安装后逐行执行以下命令

1
2
lip config GoModuleProxyURL https://goproxy.cn
lip config GitHubMirrorURL https://github.bibk.top

安装 LeviLamina

进入你的服务器根目录
安装最新版

1
lip install github.com/LiteLDev/LeviLamina

自定义版本

1
lip install github.com/LiteLDev/LeviLamina@版本号

版本号不需要带 v,具体 LL 版本对应的游戏版本请在更新日志中查找

安装 LegacyScriptEngine

LegacyScriptEngine 是加载 JS, Lua 插件的关键
进入你的服务器根目录

1
lip install github.com/LiteLDev/LegacyScriptEngine

参考

id 能力 描述
0 build 建造
1 mine 挖掘
2 doorsandswitches 开门和使用开关
3 opencontainers 打开容器(箱子等)
4 attackplayers 攻击玩家
5 attackmobs 攻击生物
6 op 使用OP命令(未证实)
7 teleport 传送(使用tp命令)
8 invulnerable -
9 flying 飞行中
10 mayfly 可飞行
11 instabuild -
12 lightning -
13 flySpeed 飞行速度(0.05)
14 walkSpeed 移动速度(0.1)

代码

cloneall.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mkdir $1_repos
cd ./$1_repos/
echo $(date "+%H:%M:%S 获取$1的仓库列表到 $1_repos/clone_list.temp")
rm -f clone_list.temp
rm -f clone_list.txt
rm -f clone.sh
curl "https://api.github.com/users/$1/repos?per_page=100&&page=1" | grep -w clone_url >clone_list.temp
echo $(date "+%H:%M:%S 过滤链接到 $1_repos/clone_list.txt")
grep -o 'https://[^"]*' clone_list.temp > clone_list.txt
cat clone_list.txt
rm -f clone_list.temp
echo $(date "+%H:%M:%S 生成批处理文件到 $1_repos/clone.sh")
sed "s/^/echo \$(date \"+%H:%M:%S 正在拉取下一个仓库\")\ngit clone --depth=1 /" clone_list.txt > clone.sh
echo $(date "+%H:%M:%S 开始拉取到 $1_repos/")
bash clone.sh
rm -f clone.sh
cd ..
echo $(date "+%H:%M:%S 拉取完成,在 $1_repos/")

使用方法

执行 ./cloneall.sh 用户 就会把 用户 的100个仓库拉取到 用户_repos 文件夹里

例如 ./cloneall.sh TheChuan1503

参考

小米/红米手机前往申请解锁小米手机

注意

解BL锁之前必须在开发者选项打开OEM解锁和ADB调试
一定要记住手机登录的账号和密码,并且确定账号绑定的手机号可用,否则可能会开机卡账号锁
会开机卡账号锁!
会开机卡账号锁!!

一加

1
adb reboot bootloader

进入后可能会识别不到设备,参见一加全能工具箱安装adb和fastboot驱动教程 - 一加全能盒子 | 工具箱
然后

1
fastboot flashing unlock

手机迅速按照指示按下对应按键(一般是音量加)确定解锁

安卓开发

先获取电池管理器

Java
1
BatteryManager bm = (BatteryManager) getSystemService(BATTERY_SERVICE);

以下为 安卓5.0(SDK21) 及以上的Method

剩余容量(mAh) int

Java
1
bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);

平均电流(mA) int

Java
1
bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);

瞬时电流(mA) int

Java
1
bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW);

电量(百分数) int

Java
1
bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);

以下为 安卓8.0(SDK26) 及以上的Method

充电状态 int

Java
1
bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_STATUS);
  • BatteryManager.BATTERY_STATUS_UNKNOWN
    状态未知
  • BatteryManager.BATTERY_STATUS_CHARGING
    正在充电
  • BatteryManager.BATTERY_STATUS_DISCHARGING
    正在放电(耗电)
  • BatteryManager.BATTERY_STATUS_NOT_CHARGING
    没有充电
  • BatteryManager.BATTERY_STATUS_FULL
    已充满(在充电状态)

ADB

adb shell
1
dumpsys battery

返回示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Current Battery Service state:
AC powered: false - 交流电源未连接
USB powered: true - USB电源已连接
Wireless powered: false - 无线充电未激活
Max charging current: 500000 - 最大充电电流为500000微安
Max charging voltage: 5000000 - 最大充电电压为5000000微伏
Charge counter: 1400000 - 电池充电计数器,表示电池自上次充满电以来的总充电量
status: 2 - 电池状态为充电中
health: 2 - 电池健康状况良好
present: true - 电池存在
level: 28 - 电池电量百分数为28
scale: 100 - 电量百分比的最大值为100
voltage: 3872 - 当前电池电压为3872微伏
temperature: 348 - 电池温度为348/10度(一般温度值需要除以10)
technology: Li-poly - 电池类型为锂聚合物电池

参考

Godot 4.3

MD5

GDScript
1
2
3
4
5
6
7
8
var text = "待计算的字符串"

var ctx_md5 = HashingContext.new()
ctx_md5.start(HashingContext.HASH_MD5)
ctx_md5.update(text.to_ascii())
var hash_md5 = ctx_md5.finish().hex_encode()

# 得到hash_md5为最终结果字符串
C#
1
2
3
4
5
6
7
8
string text = "待计算的字符串";

HashingContext ctx_md5 = new HashingContext();
ctx_md5.Start(HashType.MD5);
ctx_md5.Update(text.ToAscii());
string hash_md5 = ctx_md5.Finish().HexEncode();

// 得到hash_md5为最终结果字符串

SHA-1

GDScript
1
2
3
4
5
6
7
8
var text = "待计算的字符串"

var ctx_sha1 = HashingContext.new()
ctx_sha1.start(HashingContext.HASH_SHA1)
ctx_sha1.update(text.to_ascii())
var hash_sha1 = ctx_sha1.finish().hex_encode()

# 得到hash_sha1为最终结果字符串
C#
1
2
3
4
5
6
7
8
string text = "待计算的字符串";

HashingContext ctx_sha1 = new HashingContext();
ctx_sha1.Start(HashType.SHA1);
ctx_sha1.Update(text.ToAscii());
string hash_sha1 = ctx_sha1.Finish().HexEncode();

// 得到hash_sha1为最终结果字符串

SHA-256

GDScript
1
2
3
4
5
6
7
8
var text = "待计算的字符串"

var ctx_sha256 = HashingContext.new()
ctx_sha256.start(HashingContext.HASH_SHA256)
ctx_sha256.update(text.to_ascii())
var hash_sha256 = ctx_sha256.finish().hex_encode()

# 得到hash_sha256为最终结果字符串
C#
1
2
3
4
5
6
7
8
string text = "待计算的字符串";

HashingContext ctx_sha256 = HashingContext.new();
ctx_sha256.start(HashingContext.HASH_SHA256);
ctx_sha256.update(text.to_ascii());
string hash_sha256 = ctx_sha256.finish().hex_encode();

// 得到hash_sha256为最终结果字符串

注意: C# 代码可用性未经证实

参考