GG修改器破解版下载地址:https://ghb2023zs.bj.bcebos.com/d/z/p/d/dbzs.apk?GGXGQ
大家好,今天小编为大家分享关于游戏修改器gg修改器_gg游戏 修改器的内容,赶快来一起来看看吧。
package utils;
import org.eclipse.jgit.api.*;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
import org.eclipse.jgit.diff.RenameDetector;
import org.eclipse.jgit.lib.*;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTree;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*@author Mr.Ye
*@ClassName GitUtils
*@Date 2022/3/21
*@describe http://wiki.eclipse.org/JGit/User_Guide (eclipse-JGIT社区)
*@describe https:///centic9/jgit-cookbook (开源api)
*@describe https://www.136.la/tech/show-875175.html (刚开始可以看这个,参考GitUtils.test()方法)
* @describe 使用工具类以后需要主动调用GIT.close()方法,关闭git
*/
public class GitUtils {
private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final Logger logger = LoggerFactory.getLogger(GitUtils.class);
private final static String REF_HEADS = "refs/heads/";
/** 本地远程仓库--用于文件比较 默认路径不对外展示*/
private static String localRemotePath = "/local-remote/";
/**
* 初始化url
* 默认远程仓库的项目名称为最后一个路径
*/
public static HashMap<String, String> initUrl(String remotePath,String localPath){
String path =remotePath.split("\.git")[0];
String[] split= path.split("/");
String ss = split[split.length-1];
//本地地址
localPath = localPath+ss;
//本地远程地址 用于比较
localRemotePath = localRemotePath+ss;
HashMap<String, String> map = new HashMap<>();
map.put("localPath",localPath);
map.put("remotePath",remotePath);
map.put("localRemotePath",localRemotePath);
return map;
}
/**
* 克隆远程仓库
* @param localPath 本地地址 -(本地地址不存在,使用这个方法)
* @param remotePath 远程仓库
* @param provider 秘钥
* @param masterBranch 分支
* @return
*/
public static Git cloneRepository(String localPath, String remotePath,
UsernamePasswordCredentialsProvider provider,
String masterBranch) throws GitAPIException {
Git git = Git.cloneRepository()
.setCredentialsProvider(provider)
.setURI(remotePath)
.setRemote(masterBranch)
.setDirectory(new File(localPath))
.call();
return git;
}
/**
* 本地地址存在(使用这个方法)
* @return
*/
public static Git initGit(String localPath) {
File file = new File(localPath);
logger.info("本地文件路径"+localPath);
Git git = null;
/*路径是否存在*/
if(file.exists()) {
try {
git = Git.open(new File(localPath));
} catch (IOException e) {
e.printStackTrace();
git.close();
}
}
return git;
}
/**
* 初始化 将本地代码关联远程仓库,并推送数据至远程仓库(每个仓库只需要使用一次)
* @return
*/
public static Git onlyOnceGitInit(String localPath,String remotePath,
UsernamePasswordCredentialsProvider provider,String banceName)
throws GitAPIException, URISyntaxException {
/*初始化*/
Git git = Git.init().setDirectory(new File(localPath)).call();
/*关联远程仓库*/
git.remoteAdd().setName(banceName).setUri(new URIish(remotePath)).call();
/*本地暂存*/
git.add().addFilepattern(".").call();
/*本地提交*/
mit().setAll(true).setMessage("mit").call();
/*拉取最新代码*/
git.pull().setRemote(banceName).call();
/*推送到远程仓库*/
git.push().setRemote(banceName).setCredentialsProvider(provider).call();
return git;
}
/**
* 全部推送,返回提交的id
* --url 为空则默认全部推送
* --不为空则可以选择地址推送
* @throws GitAPIException
* @param git git
* @param message 提交信息
*/
public static String push(Git git,String message,List<String> url,UsernamePasswordCredentialsProvider provider,String banceName)
throws GitAPIException{
/*路径为空则暂存所有文件*/
AddCommand addCmd = git.add();
if (url==null ||url.size()<=0){
addCmd.addFilepattern(".");
}else {
for (String s : url) {
addCmd.addFilepattern(s);
}
}
addCmd.call();
/*提交到本地仓库*/
RevCommit revCommit = mit().setAll(true).setMessage(message).call();
/*推送到远程仓库*/
git.push().setRemote(banceName).setCredentialsProvider(provider).call();
logger.info("------ succeed ---------");
return revCommit.getName();
}
/**
* 拉取最新的代码
* @param git
* @return
*/
public static boolean pullNew(Git git,UsernamePasswordCredentialsProvider provider,String branchname){
try {
git.pull().setRemote(branchname).setCredentialsProvider(provider).call();
} catch (GitAPIException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 放弃本地更改,
* --只重置工作区work以及暂存index中的文件,Respository中的数据不会被重置,未被git跟踪的数据也不会被提交
* @param git
* @return
*/
public static boolean reset(Git git,UsernamePasswordCredentialsProvider provider){
try {
/*先暂存所有文件 --这段代码会让未被跟踪的文件也加入到提交队列,当执行丢弃操作时,当前所有更改都会被丢弃*/
git.add().addFilepattern(".").call();
git.reset().setMode(ResetCommand.ResetType.HARD).call();
} catch (GitAPIException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* git 认证对象
* @param username
* @param password
* @return
*/
public static UsernamePasswordCredentialsProvider provider(String username,String password){
return new UsernamePasswordCredentialsProvider(username,password);
}
/**
* 根据branch 获取ref信息
* @param branchName
* @return
*/
public static Ref getBranchRef(Git git,String branchName) {
Ref result = null;
try {
result = git.getRepository().exactRef(REF_HEADS + branchName);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 获取指定分支的指定文件内容
* @param branchName 分支名称
* @param javaPath 文件路径
* @return java类
* @throws IOException
*/
public static String getBranchSpecificFileContent(Git git,String branchName, String javaPath) throws IOException {
Ref branch = git.getRepository().exactRef( REF_HEADS + branchName);
ObjectId objId = branch.getObjectId();
RevWalk walk = new RevWalk( git.getRepository());
RevTree tree = walk.parseTree(objId);
return getFileContent(git,javaPath,tree,walk);
}
/**
* 获取指定分支指定的指定文件内容
* @param javaPath 件路径
* @param tree git RevTree
* @param walk git RevWalk
* @return java类
* @throws IOException
*/
private static String getFileContent(Git git, String javaPath, RevTree tree, RevWalk walk) throws IOException {
TreeWalk treeWalk = TreeWalk.forPath(git.getRepository(), javaPath, tree);
ObjectId blobId = treeWalk.getObjectId(0);
ObjectLoader loader = git.getRepository().open(blobId);
byte[] bytes = loader.getBytes();
walk.dispose();
return new String(bytes);
}
/**
* 通过CommitId获取分支树结构信息
* 此方法是为了兼容
* 被比较的分支(一般为master分支)的commitId已知的情况下,无需在获取Ref直接通过commitId获取分支树结构
* @mitId
* @return
* @throws IOException
*/
public static AbstractTreeIterator prepareTreeParser(Git git, mitId) throws IOException {
RevWalk walk = new RevWalk(git.getRepository());
RevCommit revCommit = walk.parseCommit(git.getRepository().mitId));
RevTree tree = walk.parseTree(revCommit.getTree().getId());
CanonicalTreeParser treeParser = new CanonicalTreeParser();
ObjectReader reader = git.getRepository().newObjectReader();
treeParser.reset(reader, tree.getId());
walk.dispose();
return treeParser;
}
/**
* 删除本地仓库还未提交的文件
*/
public static void deleteFile(Git git, List<String> urls) throws Exception {
RmCommand addCommand = git.rm();
if (urls==null || urls.size()<=0){
addCommand.addFilepattern(".");
}else {
for (String s:urls){
addCommand.addFilepattern(s);
}
}
addCommand.call();
}
/**
* 切换分支
* @param branchName 分支名称
* @throws GitAPIException GitAPIException
*/
public static void checkOut(Git git,String branchName) throws GitAPIException {
// 切换分支
git.checkout().setCreateBranch(false).setName(branchName).call();
}
/**
* 更新分支代码
* @param branchName 分支名称
* @throws GitAPIException GitAPIException
*/
public static Ref checkOutAndPull(Git git,String branchName,UsernamePasswordCredentialsProvider provider) throws GitAPIException {
// 1. 获取此分支的Ref信息
Ref branchRef = getBranchRef(git,branchName);
boolean isCreateBranch = branchRef == null;
/* TODO 这里可以增加判断 是否最新数据,如果是最新数据则后续两步操作可以省略*/
// 2. 切换分支
git.checkout().setCreateBranch(isCreateBranch).setName(branchName)
.setStartPoint( "origin/"+branchName)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.SET_UPSTREAM)
.call();
// 3. 拉取最新代码
git.pull().setCredentialsProvider(provider).call();
branchRef = getBranchRef(git,branchName);
return branchRef;
}
/**
* 判断本地是否最新代码
*
* @return boolean
* @throws GitAPIException GitAPIException
*/
public static boolean checkBranchNewVersion(Git remoteGit, Git git, UsernamePasswordCredentialsProvider provider,String branceName) throws GitAPIException {
boolean flag = false;
try {
String remote = LogRemote(remoteGit,provider,branceName);
String log = Log(git);
if (remote.equals(log)){
flag = true;
}
logger.info("比较版本信息,本地:{},远程:{},是否一致:{}",log,remote,flag);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 获取提交记录
* @return
* @throws IOException
* @throws GitAPIException
* @param masterBranch 分支名称
*/
public static List<CommitMessage> getCommitMessages(Git git,Integer num,String masterBranch) throws IOException, GitAPIException {
List<CommitMessage> commitMessages = new ArrayList<>();
mitMessage =null;
/** 获取最新的10条提交记录来展示*/
Iterable<RevCommit> commits ;
if (StringUtils.isEmpty(masterBranch)){
/** 查所有分支记录*/
commits = git.log().setMaxCount(num).call();
}else {
/** 查指定分支数据记录*/
commits = git.log().add(git.getRepository().resolve(masterBranch)).setMaxCount(num).call();
}
for(mits) {
commitMessage = new CommitMessage();
commitMessage.mit.getName());
commitMessage.mit.getAuthorIdent().getName());
commitMessage.mit.getFullMessage());
commitMessage.setCommitDate(df.format(new mit.getCommitTime()*1000L)));
if (commit.getParents().length!=0){
commitMessage.mit.getParent(0).getName());
commitMessage.mit.getParent(0).getName());
}
commitMessage.mit.getAuthorIdent().getEmailAddress());
commitMessages.mitMessage);
}
mitMessages;
}
/**
* LogRemote 获取Git远程仓库版本号
* @param git
* @param git
* @return
* @throws IOException
* @throws GitAPIException
*/
public static String LogRemote(Git git,UsernamePasswordCredentialsProvider provider,String branceName)
throws GitAPIException {
String versionID = "";
pullNew(git,provider,branceName);
Iterable<RevCommit> iterable = git.log().setMaxCount(1).call();
for (RevCommit u : iterable) {
String ID = String.valueOf(u.getId());
//正则表达式 截取需要的部分
versionID = getMatcher("commit\s(\w+)\s?", ID);
break;
}
return versionID;
}
/**
* getMatcher 正则表达式方法
* @param regex
* @param source
* @return
*/
public static String getMatcher(String regex, String source) {
String str = "";
Pattern pattern = pile(regex);
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
// 只取第一组
str = matcher.group(1);
}
return str;
}
/**
* 获取Git本地仓库版本号
*
* @return versionID 版本号
* @throws IOException
* @throws GitAPIException
*/
public static String Log(Git git) throws GitAPIException {
String versionID = "";
Iterable<RevCommit> iterable = git.log().setMaxCount(1).call();
for (RevCommit u : iterable) {
//版本id
String ID = String.valueOf(u.getId());
versionID = getMatcher("commit\s(\w+)\s?", ID);
break;
}
git.close();
return versionID;
}
private final static String GIT = ".git";
/**
* 指定文件提交到git仓库中
* @param git git
* @param files 需要提交的文件列表(文件名)
* @return 返回本次提交的版本号
* @throws IOException
*/
public static mitToGitRepository(Git git, List<String> files,String message,String banceName,
UsernamePasswordCredentialsProvider provider) throws Exception {
//判断是否有被修改过的文件
List<DiffEntry>diffEntries = git.diff()
.setDestinationPrefix("HEAD")
.setPathFilter(PathFilterGroup.createFromStrings(files))
.call();
if (diffEntries == null || diffEntries.size() == 0) {
throw new Exception("提交的文件内容都没有被修改,不能提交");
}
//被修改过的文件
List<String> updateFiles=new ArrayList<String>();
DiffEntry.ChangeType changeType;
for(DiffEntry entry : diffEntries){
changeType = entry.getChangeType();
switch (changeType) {
case ADD:
case COPY:
case RENAME:
updateFiles.add(entry.getNewPath());
break;
case DELETE:
case MODIFY:
updateFiles.add(entry.getOldPath());
break;
}
}
//将文件提交到git仓库中,并返回本次提交的版本号
AddCommand addCmd = git.add();
for (String file : updateFiles) {
/*保存到 暂存区*/
addCmd.addFilepattern(file);
}
/*执行*/
addCmd.call();
mitCmd = mit();
for (String file : updateFiles) {
commitCmd.setOnly(file);
}
RevCommit revCommit = commitCmd.setMessage(message).call();
//提交到远程分支
git.push().setRemote(banceName).setCredentialsProvider(provider).call();
return revCommit.getName();
}
/**
* 将git仓库内容回滚到指定版本的上一个版本
* @param git git
* @param revision 指定的版本号
* @return true,回滚成功,否则flase
* @throws IOException
*/
public static boolean rollBackPreRevision(Git git, String revision) throws IOException, GitAPIException {
Repository repository = git.getRepository();
RevWalk walk = new RevWalk(repository);
ObjectId objId = repository.resolve(revision);
RevCommit revCommit = walk.parseCommit(objId);
String preVision = revCommit.getParent(0).getName();
git.reset().setMode(ResetCommand.ResetType.HARD).setRef(preVision).call();
repository.close();
return true;
}
/**
* 查询本次提交的日志
* @param git git
* @param revision 版本号
* @return
* @throws Exception
*/
public static List<DiffEntry> getLog(Git git , String revision) throws Exception {
Repository repository = git.getRepository();
ObjectId objId = repository.resolve(revision);
Iterable<RevCommit> allCommitsLater = git.log().add(objId).call();
Iterator<RevCommit> iter = allCommitsLater.iterator();
mit = iter.next();
TreeWalk tw = new TreeWalk(repository);
tw.mit.getTree());
commit = iter.next();
if (commit != null){
tw.mit.getTree());
} else{
return null;
}
tw.setRecursive(true);
RenameDetector rd = new RenameDetector(repository);
rd.addAll(DiffEntry.scan(tw));
return pute();
}
/**
* 获取暂存区,以及工作区所有文件,部门文件无法获取差异内容,该方法暂不使用
*/
public static List<ComparativeGit> status(Git git) throws Exception {
/*TODO 问题1:新增文件,git没办法捕捉到文件索引,所以数据无法展示,会出现异常,这里解决方法是:
先将所有文件add添加索引,然后重置索引
如果比较暂存区域的数据,需要先将所有文件提交至暂存区域 建立索引*/
git.add().addFilepattern(".").call();
/*重置索引*/
git.reset().call();
List<ComparativeGit> comparativeGit= new ArrayList<>();
Status status = git.status().call();
// //git add命令后会看到变化 (暂存区文件)
// status.getAdded().forEach(it->{
// logger.info("1");
// compareInfo(git,parativeGit);
// });
// //(暂存区文件)
// status.getChanged().forEach(it->{
// logger.info("2");
// compareInfo(git,parativeGit);
// });
//git rm命令会看到变化,从暂存区删除的文件列表
status.getRemoved().forEach(it ->{
logger.info("6");
compareInfo(git,parativeGit);
});
//修改的文件列表
status.getModified().forEach(it -> {
logger.info("7");
compareInfo(git,parativeGit);
});
//工作区新增的文件列表
status.getUntracked().forEach(it -> {
logger.info("8");
compareInfo(git,parativeGit);
});
//冲突的文件列表
status.getConflicting().forEach(it -> {
logger.info("9");
compareInfo(git,parativeGit);
});
//工作区删除的文件列表
status.getMissing().forEach(it -> {
logger.info("10");
compareInfo(git,parativeGit);
});
System.out.parativeGit);
parativeGit;
}
public static pareInfo(Git git,String url,List<ComparativeGit> comparativeGit){
/*获取指定文件内容,必须是版本库中已经存在的版本,新增文件不会打印文件内容*/
List<DiffEntry> diffEntries = null;
parative = new ComparativeGit();
try {
/** 获取差异文件,
* git diff head 工作区域 local history比较
* git diff --cached 暂存区域与local history比较*/
/** 目前使用 git diff --cached 来比较工作区与local Res比较 */
// diffEntries = git.diff().setCached(true)
// .setPathFilter(PathFilterGroup.createFromStrings(url)).call();
/** 目前使用 git diff head 来比较工作区与local Res比较 */
diffEntries = git.diff()
.setDestinationPrefix("HEAD")
.setPathFilter(PathFilterGroup.createFromStrings(url))
.call();
System.out.println(diffEntries);
ByteArrayOutputStream out = new ByteArrayOutputStream();
DiffFormatter formatter = new DiffFormatter(out);
formatter.setRepository( git.getRepository() );
for( DiffEntry entry : diffEntries ) {
String newPath = entry.getNewPath();
comparative.setUrl(newPath);
comparative.setType(entry.getChangeType().name());
comparative.setTypeName(entry.getChangeType().toString());
formatter.format(entry);
String diffText = out.toString("UTF-8");
/*截取内容*/
if (diffText!=null){
String[] split = diffText.split("@@");
diffText = split[split.length-1];
}
System.out.println(diffText);
comparative.setDiffText(diffText);
out.reset();
comparativeGit.parative);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 测试api
* @param git
* @throws Exception
*/
public static void test(Git git) throws Exception {
Status status = git.status().call();
//git add命令后会看到变化
status.getAdded().forEach(it -> System.out.println("Add File :" + it));
//git rm命令会看到变化,从暂存区删除的文件列表
status.getRemoved().forEach(it -> System.out.println("Remove File :" + it));
//修改的文件列表
status.getModified().forEach(it -> System.out.println("Modified File :" + it));
//工作区新增的文件列表
status.getUntracked().forEach(it -> System.out.println("Untracked File :" + it));
//冲突的文件列表
status.getConflicting().forEach(it -> System.out.println("Conflicting File :" + it));
//工作区删除的文件列表
status.getMissing().forEach(it -> System.out.println("Missing File :" + it));
/*获取指定文件内容,必须是版本库中已经存在的版本,新增文件不会打印文件内容*/
List<DiffEntry> diffEntries = git.diff()
.setPathFilter(PathFilterGroup.createFromStrings(status.getModified())).call();
System.out.println(diffEntries);
ByteArrayOutputStream out = new ByteArrayOutputStream();
DiffFormatter formatter = new DiffFormatter( System.out );
formatter.setRepository( git.getRepository() );
for( DiffEntry entry : diffEntries ) {
System.out.println( "Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId() );
System.out.println(entry.getNewPath());
System.out.println(entry.getChangeType());
formatter.format(entry);
String diffText = out.toString("UTF-8");
System.out.println(diffText);
out.reset();
}
}
public static void main(String[] args) throws Exception {
GitUtils utils = new GitUtils();
// GitParser parser = new GitParser();
String local = "/local/test_03/";
// String remotePath ="xxxx.git";
String remotePath ="xxx.git";
// HashMap<String, String> map = initUrl(remotePath, local);
// String localPath1 = map.get("localPath");
// String localRemotePath = map.get("localRemotePath");
String localPath = local;
UsernamePasswordCredentialsProvider provider = provider("账号", "密码");
// Git localGit = utils.initUrl(localPath1);
// 初始化adapter
Git git = initGit(localPath);
if (git==null){
git= cloneRepository(localPath, remotePath, provider, "master");
}
pullNew(git,provider,"master");
// Git remoteGit = utils.cloneRepository(localRemotePath,remotePath,provider,"master");
// onlyOnceGitInit(localPath,remotePath,provider,"master");
status(git);
// List<String> list = new ArrayList<>();
// list.add("123.txt");
// utils.deleteFile(localGit,list);
// utils.reset(localGit,provider);
// utils.reset(localGit,provider);
// utils.pull(git);
// Git git1 = utils.initLocalRemoteGit();
// utils.gitDiff(git1,git);
// boolean b = utils.checkBranchNewVersion(git1, git);
// System.out.println(b);
// parser.gitParser(git);
// //远程的提交记录
// List<CommitMessage> messages = utils.getCommitMessages(remoteGit,10,null);
// System.out.println(messages);
// Ref ref = utils.getBranchRef(git, MASTER_BRANCH);
// System.out.println(ref);
List<String> list = new ArrayList<>();
list.add("测试一下差异/1/测试.txt");
try {
commitToGitRepository(git,list,"批量提交测试","master",provider);
} catch (Exception e) {
e.printStackTrace();
}
// utils.push(git,".","本地删除测试提交",provider);
}
}
以上就是关于游戏修改器gg修改器_gg游戏 修改器的全部内容,希望对大家有帮助。
怎么下载gg修改器和框架最新版,如何方便地下载并使用gg修改器和框架最新版? 大小:11.51MB3,867人安装 对于大多数游戏玩家来说,玩游戏本身已经非常有趣,但有时我们还想要一些额外的乐趣……
下载gg修改器中文破解版_gg修改器下载中文版下载破解游戏 大小:19.10MB4,748人安装 大家好,今天小编为大家分享关于gg修改器中文破解版_gg修改器下载中文版下载破解游……
下载gg修改器能不root权限_gg修改器无root权限 大小:5.79MB4,693人安装 大家好,今天小编为大家分享关于gg修改器能不root权限_gg修改器无root权限的内容,……
下载Gg修改器中文版,GG修改器gg 大小:8.30MB4,898人安装 平台中可以修改的数据是非常多的,用户们需要修改的基本上都是可以在平台上修改的;……
下载官方最新版gg修改器教程,官方最新版gg修改器教程让游戏飞升的利器 大小:5.52MB3,358人安装 随着时代的变迁,游戏世界也正在翻天覆地地变化。游戏玩家们对游戏的要求越来越高,……
下载gg修改器的root要怎么整_gg修改器怎么root步骤 大小:6.88MB4,719人安装 大家好,今天小编为大家分享关于gg修改器的root要怎么整_gg修改器怎么root步骤的内……
下载gg修改器最新94版本,GG修改器最新94版本:游戏改装神器 大小:12.84MB3,312人安装 GG修改器是一款常用于修改游戏内部数据以增加游戏趣味和挑战性的软件,而最新的94版……
下载gg修改器gg修改器中文版,gg修改器:让游戏更好玩的利器 大小:10.02MB3,494人安装 在游戏中遭遇到一些问题,比如道具不足、难度过高、游戏操作不顺畅等等,是让玩家感……
下载gg游戏修改器之恐龙有钱,神奇的gg游戏修改器之恐龙有钱 大小:5.93MB3,805人安装 作为一名游戏爱好者,我们都希望能够在游戏中获得更好的体验,比如让游戏中的角色拥……
下载gg游戏修改器免root版本,免Root的gg游戏修改器:为游戏爱好者带来不一样的体验 大小:18.74MB3,862人安装 当你在玩游戏时,是否曾经想过将自己的角色能力加强,或者拥有更多的游戏币。然而,……
下载