066-unidbg-boot-server零基础入门

3,320 阅读7分钟

这是坚持技术写作计划(含翻译)的第66篇,定个小目标999,每周最少2篇。


本文主要讲解 anjia0532/unidbg-boot-server 如何使用,以及一些群友反馈的常见问题的处理。


啥是unidbg

简单来说 zhkl0228/unidbg凯神 的基于unicorn-engine/unicorn 开发的一个可编程的Android和ios的模拟器。当然做好心理准备,unidbg并不是一个商业完备的模拟器,随着深入使用,几乎免不了的会遇到各种问题(比如内存管理,比如某些特性缺失啥的),但是,又不是不能用,要啥自行车

unidbg-boot-server和unidbg的关系

就像 zhkl0228/unidbg 之于unicorn-engine/unicornanjia0532/unidbg-boot-server 虽然最初定位是一个开箱机用的unidbg的高性能多线程的http server,但是只是这点的话,那格局就小了,目前unidbg-boot-server的定位是 基于unidbg的开箱机用,新手友好,集成最佳实践的unidbg脚手架,Javaer可以无门槛上手,pythoner等无java基础的也可以低成本上手。

环境准备

  1. Idea,以及一些简单的jetbrains家工具的使用经验(idea,goland,pycharm,webstorm等)
  2. Java8 mac或者linux也可以用openjdk,但是别自以为是的用java11+,除非你确定你能hold住。Windows建议参考我的 jdk绿色免安装 ,虽然麻烦点,但是可以避免一些坑。如果是linux或者mac,想用oracle的jdk,可以参考 044-wget免登陆下载jdk 8u291
  3. Maven3.5以上 ,如果电脑没有安装Maven,最简单办法是将下面的 mvn 命令替换成 mvnw(如果是linux/mac一类的,要替换成./mvnw,并且先执行chmod +x ./mvnw) ,会自动下载maven
  4. git 建议最新版
  5. idea Lombok插件
  6. 【可选】配置maven加速器 阿里云加速器,博客园相关文章 aliyun阿里云Maven仓库地址——加速你的maven构建
  7. 【可选】掌握科学上网或者加速访问github的方法,参考 提高国内访问 github 速度的 9 种方法!,稳定可靠的是使用gitee转一层,长期可用。简单省事的是使用反代服务器,比如 hub.fastgit.org/,一般是将github.com 替换成 hub.fastgit.org,但是随着用的人多,会被拦截,提示被滥用。


下载unidbg-boot-server并运行

快速体验

使用命令行

# 也可以试试hub.fastgit.org 加速器,不保证长期可用
# git clone https://hub.fastgit.org/anjia0532/unidbg-boot-server.git
git clone https://github.com/anjia0532/unidbg-boot-server.git

# 体验jar版本,打成jar包,-T是10线程,加速构建,-DskipTests 是跳过单元测试
mvn package -T10 -DskipTests

# 没有maven就用 mvnw package -T10 -DskipTests (linux等需要用 chmod +x ./mvnw && ./mvnw package -T10 -DskipTests)

# 运行
java -jar target\unidbg-boot-server-0.0.1-SNAPSHOT.jar

使用idea

参考 在IDEA中配置及使用Maven的全过程 配置maven
image.png

运行

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.5)

2021-11-01 12:01:17.689  INFO 33648 --- [           main] c.a.u.UnidbgServerApplication            : Starting UnidbgServerApplication using Java 1.8.0_221 on AnJia with PID 33648 (D:\AnJia\Work\workspace\idea\unidbg-boot-server1\target\classes started by AnJia in D:\AnJia\Work\workspace\idea\unidbg-boot-server1)
2021-11-01 12:01:17.692  INFO 33648 --- [           main] c.a.u.UnidbgServerApplication            : The following profiles are active: dev
2021-11-01 12:01:19.224  INFO 33648 --- [           main] c.a.u.service.TTEncryptServiceWorker     : 线程池为:8
2021-11-01 12:01:19.225  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:19.594  WARN 33648 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2021-11-01 12:01:19.699  INFO 33648 --- [           main] c.a.u.UnidbgServerApplication            : Started UnidbgServerApplication in 2.755 seconds (JVM running for 4.456)
2021-11-01 12:01:19.710  INFO 33648 --- [           main] c.a.u.UnidbgServerApplication            : 
----------------------------------------------------------
	应用: 		unidbg-boot-server 已启动!
	地址: 		http://127.0.0.1:9999/
	演示访问: 	curl http://127.0.0.1:9999/api/tt-encrypt/encrypt (linux)
	演示访问: 	http://127.0.0.1:9999/api/tt-encrypt/encrypt (windows: 浏览器直接打开)
	常见问题: 	https://github.com/anjia0532/unidbg-boot-server/blob/main/QA.md
	配置文件: 	[application, application-dev]
----------------------------------------------------------
2021-11-01 12:01:19.710  INFO 33648 --- [           main] c.a.u.UnidbgServerApplication            : 
----------------------------------------------------------

2021-11-01 12:01:20.201  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:20.327  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:20.456  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:20.556  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:20.635  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:20.725  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false
2021-11-01 12:01:20.816  INFO 33648 --- [435772@424de326] c.a.u.service.TTEncryptServiceWorker     : 是否启用动态引擎:true,是否打印详细信息:false

关键是这里,防止刚接触spring boot的,找不到访问地址,(主要是被问烦了),直接打印出来(就这样还TM有眼瞎看不到的,也是醉了)

----------------------------------------------------------
	应用: 		unidbg-boot-server 已启动!
	地址: 		http://127.0.0.1:9999/
	演示访问: 	curl http://127.0.0.1:9999/api/tt-encrypt/encrypt (linux)
	演示访问: 	http://127.0.0.1:9999/api/tt-encrypt/encrypt (windows: 浏览器直接打开)
	常见问题: 	https://github.com/anjia0532/unidbg-boot-server/blob/main/QA.md
	配置文件: 	[application, application-dev]
----------------------------------------------------------

如何使用自己魔改的unidbg

总有一些大佬发现标版unidbg满足不了(或者有bug)自己,需要自行修改unidbg。

# git clone https://hub.fastgit.org/zhkl0228/unidbg.git
git clone https://github.com/zhkl0228/unidbg.git

# 自己导入idea,各种修改后,改下pom.xml中的版本号

# 安装到本地
mvn clean install -Dgpg.skip=true -T10

如何自己写逻辑

运行 src/test/java/com/anjia/unidbgserver/AutoGeneratorTest.java
image.png
把自己的业务逻辑移植/实现到 src/main/java/com/anjia/unidbgserver/service/*Service.java

修改参数入参,修改 src/main/java/com/anjia/unidbgserver/web/*Controller.java 关于这个类里的注解不会用的,自行百度,或者参考
Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestParam, @PathVariable

主要unidbg模拟逻辑在 com.anjia.unidbgserver.service.*Service
com.anjia.unidbgserver.web.*Controller 是暴露给外部http调用的
com.anjia.unidbgserver.service.*ServiceWorker 是用多线程包装了一层业务逻辑
com.anjia.unidbgserver.service.*ServiceTest 是单元测试

可不可以不要单元测试/单元测试如何写/如何用

完全可以,但是不建议。
个人认为单元测试是这个项目的灵魂。想象一下原来写unidbg时,是不是得创建一个个逻辑类,自己写N多个main来测试不同的情况,还得配合着横七竖八的注释,来屏蔽代码,让它不生效。

用单元测试多优雅啊,先用 src/test/java/com/anjia/unidbgserver/AutoGeneratorTest.java 生成框架,直接在Service里写逻辑,遇到新项目还是研究阶段的,写不同的单元测试方法就行了。不用改了重启访问url。直接调用方法不香吗?
image.png

其他一些常见问题

都整理到这里了 常见问题汇总 ,先看,先看,先看,别上来就问就问就问。

关于是否开源基于Jnitrace日志补环境代码说明

详见 关于是否开源基于Jnitrace日志补环境代码说明

招聘小广告


山东济南的小伙伴欢迎投简历啊 加入我们 , 一起搞事情。
长期招聘,Java程序员,大数据工程师,运维工程师,前端工程师。

参考资料