12
返回列表 发新帖
楼主: 山有扶苏 - 

[求助问答] 一个单机游戏怎样内置存档

[复制链接]

69

主题

1914

回帖

8109

积分

硕士生

Rank: 6Rank: 6

金币
2061
好评
22
信誉
105
发表于 2025-9-26 07:48:06 来自手机  | 显示全部楼层  来自 四川
本帖最后由 hw1020 于 2025-9-26 10:12 编辑
山有扶苏 发表于 2025-9-26 00:08
大佬,那我要怎么跟ai说
正常说啊,你的需求是什么就怎么说。要么你用我发的那个,那个安装包里的dex2就是可以存档注入什么的,
  1. Lcom/unity3d/player/UnityPlayerActivity;->onCreate(Landroid/os/Bundle;)V
复制代码

这个方法里加入下面的代码,register这个后面的数字可能需要加大,比如原来那个应该是4,这里我改为了5
特别注意
  1.     .registers 5
复制代码

然后下面的代码放入方法中的合适位置就行

  1.     invoke-virtual {p0}, Lcom/unity3d/player/UnityPlayerActivity;->getApplicationContext()Landroid/content/Context;
  2.   
  3.     move-result-object v0
  4.     #上面两行其实可以不需要直接用p0就行

  5.     const-string v1, "sx"
  6.     # sx为apk assets目录里的zip文件路径

  7.     const-string v2, ""
  8.     #这个是解压后在Android data package 目录的相对路径,为空字符串就是解压到Android data package根目录
  9.    
  10.     invoke-static {v0, v1, v2}, LZipReleaseUtils;->cad(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V

复制代码

  1. LZipReleaseUtils;->cad
复制代码

这个方法就是我写的将assets里的sx zip文件解压到Android data package下的根目录,上面v2为空就是根目录,不为空就是package加上v2的目录,ZipReleaseUtils类里的cadc就是会更新覆盖的的方法,原来的没有,新加的,里面还有类似的cao (释放到Android/obb/package目录下的资源文件)caoc(会更新覆盖的),还有cdd(复制到/data/data/package目录中) cddc(更新会覆盖),调用方法和上面的类似,只是方法名不一样。

寄存器可能在不同位置名称需要改变下,就是要注意不破坏原有的代码逻辑,简单来说就是反编译后的代码与插入代码前反编译的代码相差不大(增加了代码,但没有改变原有代码,比如原有代码xxx.xxx()变成了"".xxx(),或者多了什么奇奇怪怪的?,那就说明加的有问题)

比如这里原来的代码反编译后为
  1. protected void onCreate(Bundle bundle) {
  2.         requestWindowFeature(1);
  3.         super.onCreate(bundle);
  4.         getIntent().putExtra("unity", updateUnityCommandLineArguments(getIntent().getStringExtra("unity")));
  5.         this.mUnityPlayer = new UnityPlayer(this, this);
  6.         setContentView((View) this.mUnityPlayer);
  7.         this.mUnityPlayer.requestFocus();
  8.         if (Build.VERSION.SDK_INT >= 24) {
  9.             this.mUnityPlayer.setPointerIcon(PointerIcon.getSystemIcon(getBaseContext(), 0));
  10.         }
  11.         this.mUnityPlayer.setOnTouchListener(this);
  12.         this.mUnityPlayer.setOnGenericMotionListener(this);
  13.     }
复制代码

插入后为
  1. protected void onCreate(Bundle bundle) {
  2.         requestWindowFeature(1);
  3.         super.onCreate(bundle);
  4.         ZipReleaseUtils.cad(getApplicationContext(), "sx", "");
  5.         getIntent().putExtra("unity", updateUnityCommandLineArguments(getIntent().getStringExtra("unity")));
  6.         this.mUnityPlayer = new UnityPlayer(this, this);
  7.         setContentView((View) this.mUnityPlayer);
  8.         this.mUnityPlayer.requestFocus();
  9.         if (Build.VERSION.SDK_INT >= 24) {
  10.             this.mUnityPlayer.setPointerIcon(PointerIcon.getSystemIcon(getBaseContext(), 0));
  11.         }
  12.         this.mUnityPlayer.setOnTouchListener(this);
  13.         this.mUnityPlayer.setOnGenericMotionListener(this);
  14.     }
复制代码

相当于在super后面增加了一行下面的解压文件的代码
  1. ZipReleaseUtils.cad(getApplicationContext(), "sx", "");
复制代码


如果register 5不够,比如原来为4,就会出错,反编译后查看你就会发现插入的代码变成了
  1. protected void onCreate(Bundle bundle) {
  2.         requestWindowFeature(1);
  3.         super.onCreate(bundle);
  4.         ZipReleaseUtils.cad(getApplicationContext(), "sx", "");
  5.         "".getIntent().putExtra("unity", "".updateUnityCommandLineArguments("".getIntent().getStringExtra("unity")));
  6.         ((UnityPlayerActivity) "").mUnityPlayer = new UnityPlayer("", "");
  7.         "".setContentView(((UnityPlayerActivity) "").mUnityPlayer);
  8.         ((UnityPlayerActivity) "").mUnityPlayer.requestFocus();
  9.         if (Build.VERSION.SDK_INT >= 24) {
  10.             ((UnityPlayerActivity) "").mUnityPlayer.setPointerIcon(PointerIcon.getSystemIcon("".getBaseContext(), 0));
  11.         }
  12.         ((UnityPlayerActivity) "").mUnityPlayer.setOnTouchListener("");
  13.         ((UnityPlayerActivity) "").mUnityPlayer.setOnGenericMotionListener("");
  14.     }
复制代码

这里你就会发现里面有很多原来的代码变成了
  1. "".getIntent().putExtra("unity", "".updateUnityCommandLineArguments("".getIntent().getStringExtra("unity")));
复制代码

"".xxxx的。
这就是寄存器不够导致的问题(寄存器够如果意外覆盖了原来的值也可能会出现类似的问题),最后安装打开就会闪退。


我看了下bili的存档,貌似他们的直接用的一个参数的方法,按理说寄存器数量不会有问题,那多半就是你操作有问题,要么他们代码有问题(感觉可能性不大)
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-9-26 09:59:12 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-9-26 07:48
正常说啊,你的需求是什么就怎么说。要么你用我发的那个,那个安装包里的dex2就是可以存档注入什么的,

...

感谢大佬的详细讲解
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-9-27 00:59:12 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-9-26 07:48
正常说啊,你的需求是什么就怎么说。要么你用我发的那个,那个安装包里的dex2就是可以存档注入什么的,

...

就是直接提取你的那个dex2,然后在入口加入下面那些代码就可以是吧
回复

使用道具 举报

69

主题

1914

回帖

8109

积分

硕士生

Rank: 6Rank: 6

金币
2061
好评
22
信誉
105
发表于 2025-9-27 08:49:49 来自手机  | 显示全部楼层  来自 四川
山有扶苏 发表于 2025-9-27 00:59
就是直接提取你的那个dex2,然后在入口加入下面那些代码就可以是吧

是的
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-9-27 15:57:26 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-9-27 08:49
是的

大佬你的那个dex是加密了吗
回复

使用道具 举报

69

主题

1914

回帖

8109

积分

硕士生

Rank: 6Rank: 6

金币
2061
好评
22
信誉
105
发表于 2025-9-28 00:56:38 来自手机  | 显示全部楼层  来自 四川
山有扶苏 发表于 2025-9-27 15:57
大佬你的那个dex是加密了吗

是的
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-10-2 23:52:01 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-9-28 00:56
是的

今天在电脑用模拟器试了几个安卓系统进去没有加载存档,然后又用手机试了也没有。之前用虚拟大师用的安卓7就能加载出来
回复

使用道具 举报

69

主题

1914

回帖

8109

积分

硕士生

Rank: 6Rank: 6

金币
2061
好评
22
信誉
105
发表于 2025-10-3 04:50:01 来自手机  | 显示全部楼层  来自 四川
本帖最后由 hw1020 于 2025-10-3 04:51 编辑
山有扶苏 发表于 2025-10-2 23:52
今天在电脑用模拟器试了几个安卓系统进去没有加载存档,然后又用手机试了也没有。之前用虚拟大师用的安卓 ...
你说我发你那个还是你自己弄的什么?发个安装包什么的看看
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-10-3 08:57:44 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-10-3 04:50
你说我发你那个还是你自己弄的什么?发个安装包什么的看看

你发我的和我自己弄的都加载不出来,我在电脑用虚拟机试了几个安卓系统都不加载,之前用下面这个虚拟大师这个系统可以加载出来,
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-10-3 09:00:14 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-10-3 04:50
你说我发你那个还是你自己弄的什么?发个安装包什么的看看

虚拟大师上这个系统可以加载出来,但是我在电脑上用虚拟机用安卓7和安卓12都加载不出来

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

45

主题

2870

回帖

7409

积分

硕士生

Rank: 6Rank: 6

金币
2950
好评
1
信誉
100

MT论坛最佳新人MT论坛新人

发表于 2025-10-3 09:14:52 来自手机  | 显示全部楼层  来自 湖南
hw1020 发表于 2025-10-3 04:50
你说我发你那个还是你自己弄的什么?发个安装包什么的看看

这个是我按照你的方法改了之后的,用虚拟大师能加载出来
https://www.123684.com/s/OXUKVv-KpE43
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表