Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)

访客 150 0

调试方法

安卓调试与Google Play打包提交
通过Android Studio进行调试

生成文件

  1. 打包我们的项目,将他生成为APK包
  2. 这时我们项目路径下会生成\Intermediate目录
    打开Android Studio Launcher
    点击左上角的open,就可以打开UE为我们生成的安卓项目
    Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第1张图片-谷歌商店上架

C:\YourProjectName\Intermediate\Android\APK\Gradle(UE4的路径)
C:\YourProjectName\Intermediate\Android\arm64\Gradle(UE5的路径)

再进入run =》Edit Configurations,将调试类型改为Dual
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第2张图片-谷歌商店上架

请按照以下步骤进行操作:转到LLDB启动命令,选项卡,然后点击加号(+)输入以下信息:命令脚本导入。

"C:\PathToYourUE4EngineInstall\Engine\Extras/LLDBDataFormatters\UE4DataFormatters_2ByteChars.py"

当显示要选择的设备的时候,确定即可,之后选择run下的debug app即可开始调试
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第3张图片-谷歌商店上架

现在,打开项目的任意一个.cpp文件,并将断点添加到要调试的行,然后运行调试
配置完成之后就可以在代码中去打断点,下面代码就停到了这里
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第4张图片-谷歌商店上架

下方同时有很多工具可以方便我们去调试
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第5张图片-谷歌商店上架

总结:实际上,这是一种调试的方法。然而,我们通常会在Windows上进行项目调试,并在将其打包后放入安卓设备中查看效果。

遇到的问题:我们在生成调试的Android文件夹时,使用了3.5.3版本生成的,但是该版本对应的项目无法正常构建。 解决方法:只需将Android版本直接升级至最新版,即可成功构建项目。

Android设备直接启动(不需要打包)

前提条件

  1. 启动开发者模式
  2. 在开发者选项中启动USB调试
    设置好之后就可以直接在这里去启动
    Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第6张图片-谷歌商店上架
    Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第7张图片-谷歌商店上架

通过window工具生成日志

下载ADB工具包
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
测试手机是否连接(手机需要开启USB调试功能)
CMD进入下载的文件夹,输入adb devices查看连接的设备
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第8张图片-谷歌商店上架

调试指令

将日志记录到app.log文件中的命令是:adb logcat -b main -v time *:E > app.log

以下是所使用的命令解析: 以下是所涉及的命令解析:

  1. -b Android中的日志缓冲区 : system缓冲区 - 与系统相关的日志信息, radio缓冲区 - 广播电话相关的日志信息, events缓冲区 - 事件相关的日志信息, main缓冲区 - 默认的缓冲区;
  2. -v time 可以打印出时间
  3. *:E 这个为过滤选择,
    – V : Verbose (明细);
    – D : Debug (调试);
    – I : Info (信息);
    – W : Warn (警告);
    – E : Error (错误);
    – F : Fatal (严重错误);
    – S : Silent(Super all output) (最高的优先级, 可能不会记载东西);

最后为输出的路径是log.app,代表输入到当前文件。
注:可以通过adb logcat --help获取详细的信息。
C:\Users\Administrator\Desktop\adb>adb logcat --help
用法: logcat [选项] [过滤规则]
选项包括:
-s 将默认过滤器设置为静默模式。
类似于指定过滤规则'*😒'
-f 日志记录到文件。默认为标准输出
-r [] 每kbytes旋转日志。(如果未指定,默认为16)。需要-f选项
-n 设置最大旋转日志数,默认为4
-v 设置日志打印格式,其中是以下之一:

短暂过程 标签 线程 原始 时间 线程时间 长久

- Use the -c option to clear (flush) the entire log and exit. - Use the -d option to dump the log and then exit without blocking. - Use the -t option to print only the most recent lines, which implies using -d. - Use the -g option to get the size of the log's ring buffer and exit. - To request an alternate ring buffer, such as 'main', 'system', 'radio', or 'events', use the -b parameter. Multiple instances of this parameter are allowed, and their results will be interleaved. The default is '-b main -b system'. - Use the -B option to output binary logs. - Filterspecs can be specified as a series of [:priority].

当存在一个日志组件标签(或者 * 表示全部),优先级如下:
V 详细信息
D 调试信息
I 一般信息
W 警告信息
E 错误信息
F 致命错误信息
S 静默模式(禁止所有输出)

represents :d and on its own signifies :v

如果在命令行上没有指定,filterspec 将从 ANDROID_LOG_TAGS 设置。
如果找不到 filterspec,则 filter 默认为 ‘*:I’。

If the format is not specified with -v, it will be set from ANDROID_PRINTF_LOG or default to brief.

打开输出我们的文件即可
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第9张图片-谷歌商店上架

通过手机生成日志

例子:红米K30 pro
在我的设备 =》全部参数 =》处理器(连点5下)
手机系统就会生成一个5~10分钟的bug报告
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第10张图片-谷歌商店上架

阅读Android日志的方法 对Android日志进行等级划分:

  1. Log.v:这里的v代表Verbose啰嗦的意思,对应的log等级为VERVOSE。采用该等级的log,任何消息都会输出。
  2. Log.d:这里的d代表Debug调试的意思,对应的log等级为DEBUG。采用该等级的log,除了VERBOSE级别的log外,剩余的4个等级的log都会被输出。
  3. Log.i:这里的i代表information,为一般提示性的消息,对应的log等级为INFO。采用该等级的log,不会输出VERBOSE和DEBUG信息,只会输出剩余3个等级的信息。
  4. Log.w:w代表warning警告信息,一般用于系统提示开发者需要优化android代码等场景,对应的等级为WARN。该级别log,只会输出WARN和ERROR的信息。
  5. Log.e:e代表error错误信息,一般用于输出异常和报错信息。该级别的log,只会输出该级别信息。一般Android系统在输出crassh等致命信息的时候,都会采用该级别的log。
    个人理解:这样子划分有助于调试的时候筛选关键的信息,合理的筛选出需要的信息
    简单的将一条log分析一下
    Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第11张图片-谷歌商店上架

使用日志,可以精确地确定原因和位置。

Google play 打包提交

基本概念

在提交打包时,我们还需要掌握一些基本概念,以更好地帮助我们理解。

  1. obb文件:是一个数据包文件,他是谷歌平台发行软件时候的一种标准,不过从2021年开始,Google已经全面使用abb文件,obb文件已经退出了历史的舞台
  2. AAB文件:AAB文件是经过签名的二进制文件,通常用于发布的产品。优点是小
  3. SDK:则为软件开发工具包,这里使用的则为安卓SDK开发的工具包
  4. JDK:Java Development ToolKit(Java开发工具包)
  5. NDK:是安卓平台对针对C++库的一个支持,就是C++的一个开发工具包

UE设置生成AAB文件

在project=》platforms=》android=》app bundles可以选择分割包的类型
Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第12张图片-谷歌商店上架

注:上述解释了AAB文件相较于传统的APK包更小的原因,即将APK包分成多个部分,并根据手机类型动态加载。因此,下面提供了以下选项: 附注:以上已经说明了AAB文件比传统apk包要小的原因是它将apk包拆分成多个部分,并根据设备类型进行动态加载。所以以下选项可供选择:

  1. 是否生成AAB文件
  2. 是否生成支持全部类型的APK包
  3. 是否分割出二进制包
  4. 是否分割出语言包
  5. 是否分割出像素密度包
    其实这些还是比较难以理解,下面来看一下AAB文件的结构

AAB文件结构

Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第13张图片-谷歌商店上架

通过上图可以观察到App Bundles文件格式。它由Base Module和我们拆分的文件夹组成,每个模块都包含dex、manifest、res、resources.pb等文件,与APK的文件结构基本相同。base module和每个Dynamic Feature Module都有自己的代码和资源,它们共同构成了apk文件的内容。下面是更详细的列表,摘自官方文档。

  • base/、feature1/ 和 feature2/:其中每个顶级目录都表示一个不同的应用模块。应用的基本模块始终包含在 App Bundle 的 base 目录中。不过,为每个功能模块的目录提供的名称由模块清单中的 split 属性指定。如需了解详情,请参阅功能模块清单。
  • asset_pack_1/ 和 asset_pack_2/:对于需要大量图形处理的大型应用或游戏,您可以将资产模块化处理为资源包。资源包因体积上限较高而成为游戏的理想之选。您可以按照三种分发模式(即,安装时分发、快速跟进式分发和按需分发)自定义如何以及何时将各个资源包下载到设备上。所有资源包都在 Google Play 上托管并从 Google Play 提供。如需详细了解如何将资源包添加到您的 app bundle,请参阅 Play Asset Delivery 概览。
  • BUNDLE-METADATA/:此目录包含元数据文件,其中包含对工具或应用商店有用的信息。此类元数据文件可能包含 ProGuard 映射和应用的 DEX 文件的完整列表。此目录中的文件未打包到您应用的 APK 中。
  • 模块协议缓冲区 (*.pb) 文件:这些文件提供了一些元数据,有助于向各个应用商店(如 Google Play)说明每个应用模块的内容。例如,BundleConfig.pb 提供了有关 bundle 本身的信息(如用于构建 app bundle 的构建工具版本),native.pb 和 resources.pb 说明了每个模块中的代码和资源,这在 Google Play 针对不同的设备配置优化 APK 时非常有用。
  • manifest/:与 APK 不同,app bundle 将每个模块的 AndroidManifest.xml 文件存储在这个单独的目录中。
  • dex/:与 APK 不同,app bundle 将每个模块的 DEX 文件存储在这个单独的目录中。
  • res/、lib/ 和 assets/:这些目录与典型 APK 中的目录完全相同。当您上传 App Bundle 时,Google Play 会检查这些目录并且仅打包满足目标设备配置需求的文件,同时保留文件路径。
  • root/:此目录存储的文件之后会重新定位到包含此目录所在模块的任意 APK 的根目录。例如,app bundle 的
    base/root/ 目录可能包含您的应用使用
    Class.getResource() 加载的基于 Java 的资源。这些文件之后会重新定位到您应用的基本 APK 和 Google Play 生成的每个多 APK 的根目录。此目录中的路径也会保留下来。也就是说,目录(及其子目录)也会重新定位到 APK 的根目录。
    Google play就是基于对AAB文件的处理,将文件拆分为多个维度的包,之后在用户安装的时候,Google paly 会获取用户手机的信息,然后根据拆分的包,为你组装出一个更小的包,其他的都会被剔除掉。

Google play的上传

由于注册需要25美元,暂时使用官方工具进行模拟。请点击此链接查看教程:https://www.jianshu.com/p/d3abf5f514bf

通过Bundletool模拟googleplay的行为

您可以通过官方库安装Bundletool工具。同时,我们需要正确配置Java环境以便运行Bundletool工具。请确保已设置好JDK环境变量。有关Bundletool的更多信息,请参考以下链接:https://developer.android.com/studio/command-line/bundletool

使用Bundletool将AAB文件转为可以处理的.apks文件

请使用以下命令行来构建APKS文件:java -jar bundletool-all-0.10.3.jar build-apks --bundle=app.aab --output=my_app.apks

请看下图,展示了对apks文件进行解析的过程。

Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第14张图片-谷歌商店上架Android调试和Google Play打包提交(chrome 安卓调试)(android调试技巧)-第15张图片-谷歌商店上架

他被分为两个目录,一个是splits,另一个是standalones。

  1. split目录,可以看出来它是对各个moudle在资源维度,ABI维度(应用二进制接口),还有语言维度的拆分,当我们将AAB文件交给Google play去处理的时候,他就会根据我们手机的语言,API,分辨率等生成一个最小的包安装到手机中
  2. standalones目录,还有一些手机是不支持多apk模式安装的,所以对于这些手机只能生成一个apk,这些满足了他们的需求
    通过install-apks命令将 APK 部署到连接的设备
    这一步就会将上述的包进行动态的组合,根据手机的设备信息来安装对应的apk
    java -jar bundletool-all-0.10.3.jar install-apks --apks=my_app.apks

根据aab文件生成一个全量apk
它支持所有的设备,不会去动态加载(这个包相对会大,在上面UE的选项中也可以选择去生成)
java -jar bundletool-all-0.10.3.jar build-apks --bundle=app.aab --output=all.apks --mode=universal

bundletool可以根据JSON文件中指定的设备配置生成一组APK。如果您想先为已连接的设备生成JSON文件,请执行以下命令:bundletool get-device-spec --output=/tmp/device-spec.json

心得体会

  1. 一个接口怎么去使用,还是应该多去找示例代码,之后通过模仿就可以很快的用起来
  2. 问题的解决,应当多去搜索主要的关键字,并且附带上解决问题的主要特性,如UE,UPL,第三方库等
  3. 遇到问题卡住之后应当理性的分析,理清思路,确定真正需要的是什么,之后再对症下药的搜索

标签: 谷歌商店上架 文件 图片

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~