0%

在 Android Studio 项目中有时会遇到依赖冲突的情况,可以用 Gradle 来查看项目中的依赖情况,用来解决这类问题。

列出项目中的依赖项

使用 ./gradlew dependencies 命令,可以列出工程所有 configuration 下的依赖表。也可以用 --configuration 来指定某个配置下的依赖。

1
2
3
4
5
6
# 列出 root project所有依赖项
./gradlew dependencies
# 列出 sub_project 的所有依赖项
./gradlew sub_project:dependencies
# 列出 debug 编译时的依赖项
./gradlew dependencies --configuration debugCompileClasspath
阅读全文 »

因为 Android 的 apk 很容易被下载,再被人反编译修改并重新打包,不过由于证书的签名是唯一的,并且只有自己才能知晓,所以我们可以在游戏启动时检查签名,以此来确认 apk 是否被修改过。

如何获取签名证书的指纹,通常有几种方法。

阅读全文 »

平时在开发过程中,像 client id、API keys 之类的字符串经常会直接写在客户端的 Java 代码中,这样别人在逆向 apk 过程中,这些字符串就会很容易地暴露在逆向者的眼中。本文介绍了使用 Android NDK 将字符串存放在 so 文件里,这样虽然不能完全防止被逆向,但是也能用混淆来制造些障碍。

阅读全文 »

公司有的项目是用的 Unity 2020,之前一直用的是 2018 版导出 Android Studio,切换到 2020 后发现与之前的版本改动较大,于是踩到了不少的坑。

环境版本

  • NDK 版本:Unity 2018 用的是 r18b 版本,Unity 2020 用的是 r19 版本。
  • Gradle 版本:Unity 2018 最低版本是 5.1.1,Unity 2020 最低版本是 5.6.4。

导出工程报错,提示 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
2
3
4
5
6
EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle; // 使用 Gradle
EditorUserBuildSettings.exportAsGoogleAndroidProject = true; // 导出Android Studio工程

BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.options = BuildOptions.None | BuildOptions.Development; // BuildOptions.AcceptExternalModificationsToPlayer; // 导出选项
BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions);
阅读全文 »

Google 要求从2021年下半年开始提交的新应用必须使用 Android App Bundle 来打包才能上 Google Play。超过 150MB 还必须使用 Play Asset Delivery (PAD) 的方式来代替之前的扩展文件 (*.obb) 方式。

Google 已经提供了针对 Unity 构建的方法,但是由于我们的项目打包比较特殊并且会生成 Android Studio 工程,所以采用了 针对原生代码或 Java 代码构建

资源包(Assets Pack)

在 PAD 文档中,需要将游戏中的资源分成资源包(Asset Pack)上传到 Google Play。资源包有多种分发模式:install-timefast-followon-demand 三种模式。

阅读全文 »