Unity —— Android 應用構建與發布?

文章目錄

  • 1 ?Gradle模板??:了解Gradle模板的作用及使用方法,以增強對構建流程的控制。
  • ?2 ?Gradle模板變量??:參考文檔——自定義Gradle模板文件中可用的變量列表。
    • 2.1 修改Unity應用的Gradle工程文件
      • 2.1.1 通過Gradle模板文件
      • 2.1.2 導出到 Android Studio
      • 2.1.3 Android項目配置管理器
    • 2.2 修改Unity應用的Gradle工程文件——通過Gradle模板文件
    • 2.3 修改Unity應用的Gradle工程文件——通過Android項目配置管理器
    • 2.4 修改Unity應用的Gradle工程文件——在Android Studio中改
  • ??3 Android構建設置參考??:完整的Android構建設置參數說明文檔。
    • 3.1 構建配置
    • 3.2 發布格式
    • 3.3 構建應用
    • 3.4 應用簽名
  • 4 ?導出Android項目??:將Unity項目導出為Android Studio可用的Gradle項目
  • 5 ?優化分發大小??:減小應用安裝包體積的實用技巧和方法。
    • 5.1 按目標架構拆分 APK 文件??
    • 5.2 拆分應用二進制文件(Split Application Binary)
    • 5.3 資源壓縮(Compression)
    • 5.4 代碼裁剪優化(Minification)??
  • ?6 Android數字分發服務??:滿足各分發平臺(如Google Play)特定要求的操作指南。

通過 Unity 官方文檔來學習~ https://docs.unity3d.com/6000.1/Documentation/Manual/android-building-and-delivering.html

這一部分章節的主要內容是:在Android平臺上構建并發布您的Unity應用程序。通過配置構建設置和修改Gradle項目文件,優化應用程序安裝包大小,并滿足Google Play的發布要求。
下面按文檔的順序依次進行閱讀,關鍵內容如下。


1 ?Gradle模板??:了解Gradle模板的作用及使用方法,以增強對構建流程的控制。

Unity構建Android,為了讓大家可以按自己實際需求去修改工程配置文件,是提供了兩個方案。

  1. Gradle模板文件

    Gradle模板文件跟最終的Android Studio工程中的文件是對應的。所以如果你熟悉Android Studio工程的文件目錄結構,直接看官方的圖就會非常清楚
    在這里插入圖片描述

  2. 在C#中直接修改

    Unity提供了一個類IPostGenerateGradleAndroidProject及其方法OnPostGenerateGradleAndroidProject,只要重載該方法就可以獲取到Android Studio工程unityLibrary模塊的路徑,進而得到整個工程的路徑,從而修改相關的文件內容。

    using UnityEditor;
    using UnityEditor.Android;
    using UnityEngine;class MyCustomBuildProcessor : IPostGenerateGradleAndroidProject
    {public int callbackOrder { get { return 0; } }// path:指向 ??Unity 庫 Gradle 項目根目錄??的路徑public void OnPostGenerateGradleAndroidProject(string path){Debug.Log("MyCustomBuildProcessor.OnPostGenerateGradleAndroidProject at path " + path);}
    }
    

?2 ?Gradle模板變量??:參考文檔——自定義Gradle模板文件中可用的變量列表。

這一部分沒有什么特別要看的。主要就是Unity預設的變量,在Gradle模板中使用這些變量,實際的值是取決于你工程內的配置。比如APIVERSION,這個最終就會根據你Android Player Settings配置的Target API Level來確定,比如35。

?# ?修改Gradle項目文件??:在構建Android應用過程中調整Gradle項目文件的方法。

2.1 修改Unity應用的Gradle工程文件

2.1.1 通過Gradle模板文件

Unity 通過模板生成最終的 Gradle 項目文件。開發者可通過覆寫模板控制文件生成邏輯。Gradle 在構建過程中會:

  1. ??合并清單文件??:自動整合 Android 庫中的 Manifest 配置,確保最終主清單(AndroidManifest.xml)配置正確性。
    ?2. ?版本兼容問題:使用自定義模板文件時,若升級 Unity 版本(其默認模板可能變更),必須重新適配自定義模板,否則可能導致構建失敗

2.1.2 導出到 Android Studio

?1. ?Unity 導出 Android 項目時,會生成 Gradle 項目文件并輸出到指定目錄,可以驗證通過模板或配置管理器的修改是否生效。另外也可在 Android Studio 中直接編輯這些文件。
??2. ???優先在 Unity 內修改??:通過 Gradle 模板或 Android Project Configuration Manager 調整配置,避免每次導出后重復修改

2.1.3 Android項目配置管理器

?1. 提供 C# 類庫接口,用于設置和修改??自定義模塊??的 Gradle 文件。開發者可通過代碼動態干預構建流程。
?2. ?關鍵限制??:
- ??不可修改默認模塊??:無法直接編輯 unityLibrary 和 launcher 模塊的原始 Gradle 文件
- ?支持自定義模塊??:可在默認模塊內創建子模塊并配置其 Gradle 腳本
?3. ?執行時機??:配置在??構建后處理階段??(OnModifyAndroidProjectFiles 接口)生效,允許開發者覆蓋 Unity 的默認值

2.2 修改Unity應用的Gradle工程文件——通過Gradle模板文件

具體步驟直接看官網文檔的步驟即可

1. Go to Edit > Project Settings to open the Project Settings window.
2. Select the Player tab, then open Android Player Settings
3. In the Publishing Settings section, enable the checkbox that corresponds to the Gradle project file type you want to create a custom template for. This creates a Gradle project template file and displays the path to the file.
4. Modify the template file to control the final format and contents of the final Gradle project file.

這里簡單總結幾點內容

  1. 如果你用模板文件,寫入你自己需要的內容,放到Unity工程/Plugins/Android目錄下,就會生效。
  2. 如果你用的模板文件的內容,跟Unity工程中Android Player settings的不一致,請注意優先級更高的是Unity工程中Android Player settings。
  3. 為了確保你用模板文件的內容是實際生效了,Unity是建議是導出個Android Studio工程,實際看看效果。

2.3 修改Unity應用的Gradle工程文件——通過Android項目配置管理器

為什么要單獨有這個東西呢?為什么不能就直接用OnPostGenerateGradleAndroidProject即可,為什么不允許編輯 unityLibrary 和 launcher 模塊的 Gradle 文件。
在這個文檔中有介紹:https://docs.unity3d.com/6000.1/Documentation/Manual/how-unity-builds-android-applications.html

2.4 修改Unity應用的Gradle工程文件——在Android Studio中改

這個對熟悉安卓開發的人就比較方便了,不需要多講了。

??3 Android構建設置參考??:完整的Android構建設置參數說明文檔。

比較常規的?Android構建設置,需要的時候查閱文檔即可。

?# 構建?Android應用程序??:將Unity項目編譯為Android應用的操作流程。

3.1 構建配置

分為下面兩部分,先不展開~

  • Player settings: Configure runtime and build settings for the application.
  • Build settings: Configure build system settings.

3.2 發布格式

  • APK
  • AAB

構建AAB的操作流程??:

  1. 打開 Unity Editor,依次選擇:文件(File) > 構建配置文件(Build Profiles)。
    ?2. ?選擇 Android 平臺??
    ?3. ?勾選 ??Build App Bundle (Google Play)??。此選項僅在?導出項目(Export Project)??禁用時可見。若需導出到 Android Studio 構建:啟用 ??導出項目(Export Project)??,并勾選 ??為應用程序包導出(Export for App Bundle)

3.3 構建應用

就是在Unity Editor里面依次點點點,然后開始構建。先不展開~

3.4 應用簽名

先不展開~

4 ?導出Android項目??:將Unity項目導出為Android Studio可用的Gradle項目

選擇安卓平臺然后勾選Export Project再構建就可以。先不展開~

5 ?優化分發大小??:減小應用安裝包體積的實用技巧和方法。

5.1 按目標架構拆分 APK 文件??

我們構建APK時,開啟 ??Player Settings (構建設置)?? 中的 ??Split APKs by target architecture (按目標架構拆分 APK)?? 選項可以優化應用程序的下載和安裝大小。Unity 不會生成一個包含 ??Target Architectures (目標架構)?? Player Setting 中所選的所有目標 CPU 架構二進制文件的單個 APK,而是??為每個 CPU 架構創建一個單獨的 APK 文件??。

?注意:Google Play 現在要求新應用必須使用 AAB(Android App Bundle)格式上傳,而不是 APK。??當上傳 AAB 時,Google Play 會自動針對每種設備配置生成并分發優化過的 APK 文件。

5.2 拆分應用二進制文件(Split Application Binary)

通過拆分應用程序,可減小初始安裝包體積。設備可先安裝輕量版應用,再單獨下載資源資產。
??若輸出為APK格式??:Unity會將應用程序拆分為??主APK??和??擴展文件(OBB)??。
在Publishing Settings中勾選Split Application Binary即可。

5.3 資源壓縮(Compression)

可修改 Unity 為應用程序資源文件選擇的壓縮方式。

  1. ?優勢??:減少應用程序包體體積;
  2. ?潛在影響??:若壓縮算法導致數據解壓耗時增加,可能延長加載時

5.4 代碼裁剪優化(Minification)??

通過 ??ProGuard 代碼裁剪優化??可顯著減小應用程序體積并提升運行時性能。
在Unity的Publishing Settings中?找到 ??Minify(壓縮)?? 下拉菜單按需勾選:

  • Release:對發布版本啟用壓縮
  • Debug:對調試版本啟用壓縮
  • Both:同時啟用

?這東西主要是通過移除未使用的代碼來??縮減體積??,精簡字節碼結構,加速執行效率來優化性能。因此 ProGuard 可能??錯誤移除應用依賴的關鍵代碼??(如反射調用的類或 JNI 接口),還是存在??代碼誤刪風險??的,所以千萬在開啟代碼裁剪優化后要注意充分測試。??
若需規避特定代碼被移除,可以??通過proguard-user.txt自定義混淆規則??.

?6 Android數字分發服務??:滿足各分發平臺(如Google Play)特定要求的操作指南。

目前主要就是講Google Play的一些要求。這里不展開~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917433.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917433.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917433.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【iOS】strong和copy工作流程探尋、OC屬性關鍵字復習

文章目錄前言strong和copy的區別為什么要用copy?什么時候用什么修飾?strong(ARC自動管理)strong修飾變量的底層流程圖底層代碼核心實現小結copy底層流程圖對比與strong的關鍵不同之處內部調用關系(偽代碼)小…

程序代碼篇---多循環串口程序切換

上位機版(Python)要實現根據串口接收結果高效切換四個 while 循環函數,我們可以采用狀態機模式,配合非阻塞串口讀取來設計程序結構。這種方式可以實現快速切換,避免不必要的資源消耗。下面是一個高效的實現方案&#x…

rk3568上,實現ota,計算hash,驗證簽名,判斷激活分區,并通過dd命令,寫入對應AB分區

通過自定義升級程序&#xff0c;更直觀的理解ota升級原理。 一、模擬計算hash&#xff0c;驗證簽名&#xff0c;判斷激活分區&#xff0c;并通過dd命令&#xff0c;寫入對應分區 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

數據分析—numpy庫

numpy庫NumPy 庫全面指南NumPy (Numerical Python) 是 Python 科學計算的基礎庫&#xff0c;提供了高性能的多維數組對象和工具。以下是 NumPy 的核心功能和使用方法。一、安裝與基礎1. 安裝 NumPypip install numpy2. 導入 NumPyimport numpy as np # 標準導入方式二、數組創建…

Vue3 setup、ref和reactive函數

一、setup函數1.理解&#xff1a;Vue3.0中一個新的配置項&#xff0c;值為一個函數。2.setup是所有Composition API(組合API)的“表演舞臺”。3.組件中用到的&#xff1a;數據、方法等等&#xff0c;均要配置在setup中。4.setup函數的兩種返回值&#xff1a;(1).若返回一個對象…

python中appium 的NoSuchElementException錯誤 原因以及解決辦法

錯誤收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus從入門到入土(四):持久層接口之BaseMapper和選裝件

大家好&#xff0c;今天繼續更新MybatisPlus從入門到入土系列&#xff0c;上一次的持久層接口還沒講完&#xff0c;只講了IService接口&#xff0c;今天我們繼續來講一下。 BaseMapper BaseMapper中的方法也比較簡單&#xff0c;都是增刪改查的基礎API&#xff0c;不知道大家還…

數組和指針的關系

在 C 語言中&#xff0c;?指針和數組有著非常緊密的聯系&#xff0c;但它們本質上是 ?不同的概念。理解它們的關系是掌握 C 語言內存操作的關鍵。下面我會從多個角度幫你梳理 ?指針和數組的直接聯系&#xff0c;并解釋它們的異同點。1. 數組和指針的本質區別?概念本質存儲方…

AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之github網站在線搜索

系列篇章?? No. 文章 1 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎的構建與初步實踐 2 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之GLM-4大模型技術的實踐探索 3 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之知乎網站數據獲取(初步實踐) 4 AI大模型探索之路…

從0到1學PHP(十二):PHP 框架入門與項目實戰

目錄一、主流 PHP 框架介紹1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的優勢二、框架基本使用&#xff08;以 Laravel 為例&#xff09;2.1 框架的安裝與配置2.2 路由定義、控制器創建、視圖渲染2.3 數據庫操作&#xff08;ORM 的使用&#xff09;三、小型項目實戰3.1 項目需求分…

MPLS LSP

一、概述上一章我們已經介紹過,LSP是MPLS報文在MPLS網絡中轉發時經過的路徑,可以看作是由報文傳輸方向節點為對應FEC分配的MPLS入標簽組成的,因為每臺設備上為每個FEC分配的入標簽是唯一 的&#xff0c;并與由下游節點為本地節點上該FEC分配的出標簽建立映射關系&#xff0c; 所…

圖像、視頻、音頻多模態大模型中長上下文token壓縮方法綜述

多模態大模型MLLMs 能夠處理高分辨率圖像、長視頻序列和冗長音頻輸入等復雜上下文&#xff0c;但自注意力機制的二次復雜度使得大量輸入 token 帶來了巨大的計算和內存需求。 如下圖&#xff0c;上&#xff1a;圖像、視頻和音頻數據類型可以在其表示維度上進行擴展&#xff0c;…

Spring MVC 九大組件源碼深度剖析(一):MultipartResolver - 文件上傳的幕后指揮官

文章目錄一、為什么從 MultipartResolver 開始&#xff1f;二、核心接口&#xff1a;定義文件上傳的契約三、實現解析&#xff1a;兩種策略的源碼較量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首選&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何實現電源控制的?

STM32的電源控制主要通過內置的電源管理模塊&#xff08;PWR&#xff09;實現&#xff0c;涵蓋電壓調節、功耗模式切換和電源監控等功能。以下是其核心機制及實現方式&#xff1a;??1. 電源架構與供電區域??STM32的電源系統分為多個供電區域&#xff0c;各司其職&#xff1…

《R for Data Science (2e)》免費中文翻譯 (第3章) --- Data transformation(1)

寫在前面 本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github&#xff0c;歡迎大家參與貢獻&#xff0c;詳細信息見&#xff1a; Books-zh-cn 項目介紹&#xff1a; Books-zh-cn&#xff1a;開源免費的中文書籍社區 r4ds-zh-cn …

rclone、rsync、scp使用總結

數據同步工具使用總結【rclone、rsync、scp】一、數據處理背景二、數據處理方法對比1、數據關系梳理2、不同工具處理方法3、經驗總結三、工具擴展知識1、rclone工具介紹&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安裝工具及配置本地文件遷移到云上服務…

用latex+vscode+ctex寫畢業論文

文章目錄前言一、安裝latex二、安裝ctex包三、更新ctex包四、使用ctex文檔類前言 用latexvscodectex寫畢業論文。&#xff08;英文論文不用安裝ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;為中文 LATEX 文檔提供了漢字輸出支持、標點壓縮、字…

深度學習·mmsegmentation基礎教程

mmsegmentation的使用教程 mmsegmentation微調方法總結 自定義自己的數據集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注冊&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定義訓練和測試的pipeline&#xff1a;mmsegme…

InfluxDB 與 Node.js 框架:Express 集成方案(二)

四、優化與注意事項 &#xff08;一&#xff09;性能優化技巧 連接池管理&#xff1a;使用連接池可以有效減少創建和銷毀數據庫連接的開銷。在 Node.js 中&#xff0c;可以借助influx模塊結合第三方連接池庫&#xff0c;如generic-pool來實現連接池的管理 。通過設置連接池的…

單位長度上的RC參數

1inch1000mil25.4mm2.54cm 使用SI9000計算導線上電容電感參數并使用Q2D進行仿真驗證。使用SI9000建立一個阻抗為50歐的微帶線模型&#xff0c;后對該模型進行1GHz頻域計算 通過計算得到結果&#xff0c;可知1GHz頻率下單位傳輸線上的RLGC參數使用SI9000計算好單位長度上的RLGC參…