在 Android Studio 项目中有时会遇到依赖冲突的情况,可以用 Gradle 来查看项目中的依赖情况,用来解决这类问题。
列出项目中的依赖项
使用 ./gradlew dependencies
命令,可以列出工程所有 configuration
下的依赖表。也可以用 --configuration
来指定某个配置下的依赖。
1 | 列出 root project所有依赖项 |
在 Android Studio 项目中有时会遇到依赖冲突的情况,可以用 Gradle 来查看项目中的依赖情况,用来解决这类问题。
使用 ./gradlew dependencies
命令,可以列出工程所有 configuration
下的依赖表。也可以用 --configuration
来指定某个配置下的依赖。
1 | # 列出 root project所有依赖项 |
因为 Android 的 apk 很容易被下载,再被人反编译修改并重新打包,不过由于证书的签名是唯一的,并且只有自己才能知晓,所以我们可以在游戏启动时检查签名,以此来确认 apk 是否被修改过。
如何获取签名证书的指纹,通常有几种方法。
平时在开发过程中,像 client id、API keys 之类的字符串经常会直接写在客户端的 Java 代码中,这样别人在逆向 apk 过程中,这些字符串就会很容易地暴露在逆向者的眼中。本文介绍了使用 Android NDK 将字符串存放在 so 文件里,这样虽然不能完全防止被逆向,但是也能用混淆来制造些障碍。
公司有的项目是用的 Unity 2020,之前一直用的是 2018 版导出 Android Studio,切换到 2020 后发现与之前的版本改动较大,于是踩到了不少的坑。
r18b
版本,Unity 2020 用的是 r19
版本。build cannot be appended
或者 the build target does not support build appending
。原因是 Unity 从 2019.4.14f1
版本开始修改了 Android Studio 导出的选项,如果使用 Gradle
来编译,首先需要设置 EditorUserBuildSettings.exportAsGoogleAndroidProject = true
,才能导出 Android Studio。其次将 BuildPlayerOptions
中移除 BuildOptions.AcceptExternalModificationsToPlayer
这个选项。
例如:
1 | EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle; // 使用 Gradle |
Google 要求从2021年下半年开始提交的新应用必须使用 Android App Bundle 来打包才能上 Google Play。超过 150MB 还必须使用 Play Asset Delivery (PAD) 的方式来代替之前的扩展文件 (*.obb) 方式。
Google 已经提供了针对 Unity 构建的方法,但是由于我们的项目打包比较特殊并且会生成 Android Studio 工程,所以采用了 针对原生代码或 Java 代码构建。
在 PAD 文档中,需要将游戏中的资源分成资源包(Asset Pack)上传到 Google Play。资源包有多种分发模式:install-time
,fast-follow
,on-demand
三种模式。