Android發(fā)布流程
Unity2019及以上
發(fā)布Android準備工作
通過UnityHub安裝Android平臺相關工具
1.Android構(gòu)建支持
2.Android SDK(安卓軟件開發(fā)工具包)、NDKTools(本地開發(fā)工具包)
3.OpenJDK(Java開發(fā)工具包)
注意:Unity支持Android 5.1及以上版本
Unity2019以下版本
1.Android構(gòu)建支持工具安裝(Unity提供下載,安裝時需要關閉Unity)
2.JDK(Java開發(fā)工具包)(網(wǎng)絡下載) JDK 必須是版本 8
https://www.oracle.com/java/technologies/downloads/#jdk18-windows
3.NDK (本地開發(fā)工具包)(網(wǎng)絡下載)NDK 版本必須是 Unity2018——r16b, Unity2017——r13d
注意:NDK是可選的工具,如果之后要發(fā)il2cpp的應用程序,那么NDK是必須的,如果是Mono可以不使用它
https://blog.csdn.net/momo0853/article/details/73898066
https://developer.android.google.cn/ndk/downloads/#lts-downloads
4.Android SDK(安卓軟件開發(fā)工具包)(網(wǎng)絡下載或通過AndroidStudio下載)
建議通過AndroidStudio下載
https://developer.android.com/studio
安裝AndroidStudio后 通過它來安裝AndroidSDK
5.Java環(huán)境變量配置
我的電腦——>系統(tǒng)屬性——>查找——>系統(tǒng)環(huán)境變量——>環(huán)境變量
5-1:JAVA_HOME: 變量值為JDK在你電腦上的安裝路徑
安裝好后可以利用%JAVA_HOME%作為JDK安裝目錄的統(tǒng)一引用路徑
5-2:Path: 編輯Path屬性,在原變量后追加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
5-3:CLASSPATH: 變量值為 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
發(fā)布前必修改的設置
在File —— Build Setting —— Player Setting中修改
1.公司名
2.游戲項目名
3.版本號
4.默認圖標
5.Other Settings —— Package Name(必須修改設置)
6.Other Settings —— Minimum APILevel
Unity發(fā)布參數(shù)
Build Settings 參數(shù)
Texture Compression
紋理壓縮
設置發(fā)布后的紋理壓縮格式
**Use Player Settings: 使用在播放器設置中設置的紋理壓縮格式
ETC:使用ETC格式
ETC2:使用ETC2格式
ASTC:使用ASTC格式
DXT:使用DXT格式
PVRTC:使用PVRTC格式
了解格式詳細信息:https://docs.unity.cn/cn/2021.3/Manual/class-TextureImporterOverride.html#android
注意:對于安卓ETC2是常用的壓縮格式,支持透明通道。但是對于老設備不支持ETC2,可以使用ETC。
我們可以統(tǒng)一設置為ETC2,在下方的ETC2 fallback中設置,如果不支持ETC2,使用哪種壓縮方式**
ETC2 fallback
ETC2回退
當Unity用于不支持ETC2的安卓設備時的RGBA紋理格式
32-bit:32位
以全分辨率存儲RGBA紋理,使用32位存儲每個像素,質(zhì)量最高,內(nèi)存占用最多
16-bit:16位
以全分辨率存儲RGBA紋理,使用16位存儲每個像素,質(zhì)量較低,紋理可能會丟失有價值的顏色信息,內(nèi)存占用相對較少
32-bit, half resolution:32位,半分辨率
以半分辨率存儲RGBA紋理,使用32位存儲每個像素,由于是半分辨率,紋理會變得模糊,內(nèi)存占用較小
注意:如果使用的不是ETC2壓縮,大多數(shù)壓縮格式,使用32-bit備用
取決于GPU支持什么
Export Project
導出項目
勾選后,不會發(fā)布成apk,而是會將Unity項目導出為可以導入Android Studio的Gradle項目
Symlink Sources
符號鏈接源
當勾選Exprot Project時,才能勾選此選項。
決定是否在Unity和導出的Gradle項目之間共享Java和Kotlin源文件
啟用后,對于測試和迭代Java和Kotlin代碼很有用,如果你重新導出Unity項目,你在導出的項目對之前的Java和Kotlin源文件的任何更改都會保留
如果你想導出后進行二次開發(fā),建議勾選此選項
Build App Bundle (Google Play)
構(gòu)建應用捆綁包
是否將應用程序作為Android應用捆綁包(AAB)
啟用,發(fā)布出去是一個AAB(可以配合安卓進行二次開發(fā))
禁用,發(fā)布出去是一個APK(直接就是一個可安裝的應用程序)
Create symbols.zip
創(chuàng)建 符號壓縮文件
符號文件可以幫助我們調(diào)試應用程序
Unity會生成一個包含本機Unity庫的符號文件的包
它包含一個表,將活動內(nèi)存地址轉(zhuǎn)換為我們可以使用的信息,比如方法名,我們可以利用符號包來檢測調(diào)試應用程序的信息**
Disabled:不生成
Public:Unity生成一個公共符號為程序打包
公共符號文件包含將函數(shù)地址解析為人類可讀字符串的信息,包小于調(diào)試符號的包
Debugging:Unity生成一個調(diào)試符號為程序打包
包含完整的調(diào)試信息和符號表,可以用來解析堆棧、將本機調(diào)試器附加到應用程序調(diào)試代碼
Run Device
運行的設備
指定在哪個附加設備上測試生成
如果你連接了新設備或在列表中沒有看到連接的設備
點擊刷新Refresh
Build to Device
構(gòu)建到設備
不創(chuàng)建完整的構(gòu)建,而是將發(fā)生修改的單個文件直接部署到設備上
相對來說更加快速,方便調(diào)試
Development Build
開發(fā)模式構(gòu)建
是否包含腳本調(diào)試符號和性能分析器到你的項目中,如果你想要調(diào)試應用程序,請選擇該選項
Autoconnect Profiler
自動連接分析器
是否自動將分析器連接到生成的應用程序
Deep Profiling
深度剖析
是否啟用深度剖析在分析器中,可以讓分析器能夠檢測應用程序中每個函數(shù)調(diào)用,從而返回更加詳細的分析數(shù)據(jù)
注意:該選項會降低腳本的執(zhí)行速度
Script Debugging
是否允許調(diào)試應用程序的腳本文件
Wait For Managed Debugger
是否等待托管調(diào)試器
程序在運行腳本代碼之前是否等待調(diào)試器連接
Compression Method
壓縮方法
Unity在構(gòu)建時壓縮項目中數(shù)據(jù)的方式
Default:默認使用ZIP,壓縮效果略好于LZ4和LZ4HC,但是數(shù)據(jù)解壓速度較慢
LZ4:使用LZ4,這時一種快速壓縮格式,相對ZIP可以顯著提高Unity應用程序的加載時間
LZ4HC:LZ4的高壓縮版本,構(gòu)建速度較慢,但是對于發(fā)布版本會產(chǎn)生更好的結(jié)果,相對ZIP可以顯著提高應用程序加載時間
Max Texture Size
最大的紋理大小
用于本地開發(fā)時導入紋理的最大尺寸
減小最大紋理大小可以加快資源導入和平臺切換
Texture Compression
紋理壓縮
選擇下面兩個選項,可以加快資源導入和平臺切換
No Override:使用默認設置
Force Fast Compressor:強制快速壓縮
Force Uncompressed:強制解壓縮
Player Settings相關
Player 基礎設置
Icon 圖標設置
設置在設備上顯示的應用圖標
Adaptive:運行在Android8.0及以上版本上的設備顯示的應用圖標
Round:運行在Android7.1及以上版本上的設備顯示的應用圖標
Legacy icons:運行在Android7.1以下版本上的設備顯示的應用圖標
Resolution and Presentation 分辨率和演示設置
Fullscreen Mode
全屏模式
Fullscreen Window:
全屏窗口(導航欄始終處于隱藏狀態(tài))
會縮放應用程序內(nèi)容,為了匹配縱橫比,可能會有黑邊
Windowed:
窗口模式,窗口大小取決于應用程序分辨率
Resizable Window
課調(diào)整大小的窗口
設置用戶是否可以調(diào)整應用程序窗口的大小
此設置可以安卓和平板電腦上的應用程序中啟用多窗口功能
詳情:https://developer.android.com/guide/topics/ui/multi-window#java
Hide Navigation Bar
是否隱藏頂部顯示的導航欄
Render outside safe area
是否應使用所有可用的屏幕控件進行渲染
包括留海區(qū)域
Optimized frame Pacing
是否應均勻分布幀以減小幀速率的方差,啟用后體驗更流程
Resolution Scaling分辨率縮放
Resolution Scaling Mode
分辨率縮放模式
Disabled:禁用
不應用分辨率縮放,應用程序呈現(xiàn)為設備的本機屏幕分辨率
Fixed DPI:使用API應用分辨率縮放,使用此選項可優(yōu)化性能和電池壽命
Target DPI:如果設備的本機屏幕DPI高于設置的值,Unity將降低應用程序的分辨率以匹配此設置
計算方式:
Min(Target DPI * Factor / Screen DPI,1)
其中Factor是在Quality質(zhì)量設置中設置的 Resolution Scaling Fixed DPI Factor參數(shù)
Reset resolution on window resize:
當本機窗口大小更改時,是否將屏幕分辨率設置為新的本機窗口大小
如果分辨率縮放模式是Fixed DPI,則將重新計算分辨率
Blit Type:
光高類型
是否使用Blit將最終圖像呈現(xiàn)在屏幕上
Always:總是讓Unity渲染到屏幕外的緩沖區(qū),然后使用Blit將緩沖區(qū)的內(nèi)容復制到設備的幀緩沖區(qū)(這和大部分設備兼容,但比不用Blit慢)
Nerver:Unity將渲染到設備操作系統(tǒng)提供的幀緩沖區(qū),如果失敗,會有警告信息打印到日志當中。通常比使用Blit塊,但是不兼容所有設備
Auto:Unity會渲染到設備操作系統(tǒng)提供的幀緩沖區(qū),如果失敗,會打印到日志中,并使用Blit將最終圖像呈現(xiàn)到屏幕上
Supported Aspect Ratio:支持的縱橫比
Orientation:屏幕取向
Aspect Ratio Mode:
指定應用程序支持的最大縱橫比。
如果設備的縱橫比大于此縱橫比,Unity會將此縱橫比用于應用程序,并添加黑條,使應用程序不會拉伸
Legacy Wide Screen(1.86):支持android的傳統(tǒng)寬屏寬高比
Native Aspect Ratio:支持Android本機寬高比的寬高比
Custom:自定義縱橫比
選擇自定義縱橫比時可以自己設置
Default Orientation:
默認取向
指定應用程序使用的屏幕方向(橫屏、豎屏設置)
Portrait:豎屏(應用程序窗口底部和屏幕底部對齊)
Portrait Upside Down:豎屏倒置(應用程序窗口底部和屏幕頂部對齊)
Landscape Right:右橫屏(應用程序窗口右側(cè)和屏幕底部對齊)
Landscape Left:左橫屏(應用程序窗口左側(cè)和屏幕底部對齊)
Auto Rotation:自動旋轉(zhuǎn),可以旋轉(zhuǎn)到你允許的任意方向,在下方勾選即可
Use 32-bit Display Buffer:
顯示緩沖區(qū)是否保存32位顏色值而不是16位顏色值。
如果你在后期處理效果中看到了條帶效果或者需要Alpha值,請啟用此設置,某些后期處理效果需要開其它,因為他們以顯示緩沖區(qū)相同的格式創(chuàng)建渲染紋理
Disable Depth and Stencil:
是否禁用深度和模板緩沖區(qū)
Render Over Native UI:
在本機UI上呈現(xiàn)
設置是否在Android或者IOS的本機UI上進行渲染
如果要該設置生效,需要把相機的清楚標志設置為使用Alpha值低于1的純色
Show Loading Indicator:
顯示加載指示器
指定加載指示器是否顯示以及如何顯示
Don’t Show:不顯示加載指示條
Large:顯示大的加載指示條
Inversed Large:顯示大的加載指示條,并帶有翻轉(zhuǎn)顏色
Small:顯示小的加載指示條
Inversed Small:顯示小的加載指示條,并帶有翻轉(zhuǎn)顏色
Splash Image:
啟動圖像設置
Virtual Reality Splash Image:
虛擬現(xiàn)實的初始屏幕設置
Show Splash Screen:
是否顯示啟動圖像(收費版本才能修改,免費版本不能改)
Preview:
預覽
Splash Style:
啟動風格
Dark on Light: 暗到亮
Light on Dark: 亮到暗
Animation:
啟動圖像動畫效果
Static:靜態(tài)不動的
Dolly:由小變大
Custom:自定義
Draw Mode:繪制模式
Unity Logo Below:Unity Logo顯示在前
All Sequential:所有按順序
Logos:可以自己添加Logo圖片按順序顯示
BackGround:背景相關
Overlay Opacity:
覆蓋不透明度
Background Color:
背景顏色
Blur Background Image:
模糊背景圖像
Background Image:
背景圖像
Alternate Portrait Image:
備選圖像
Static Splash Image:
靜態(tài)啟動圖像
Scaling:
縮放比例
Center:
居中(僅縮小):除非圖像太大,否則以原始大小繪制圖像,Unity會縮小圖像
Scale to fit:
縮放以適應(填充),縮放圖像,使較長尺寸完全適合屏幕大小,以黑色填充兩側(cè)空白區(qū)域
Scale to fit:
縮放以適應(裁剪),縮放圖像,使較短的尺寸完全適合屏幕大小,將圖像裁剪為較長的維度
OtherSetting相關
Rendering渲染設置
Unity程序員必了解的圖形程序接口
OpenGL(Open Graphics Library)
中文翻譯過來是開放圖形庫,它定義了一個跨平臺、跨語言的編程接口規(guī)格的專業(yè)圖形程序接口,可以用于3D、2D圖形渲染,是一個功能強大、調(diào)用方便的底層圖形庫。由于它跨平臺、跨語言、出現(xiàn)時間早,因此它的應用極其廣泛!
OpenGL ES(OpenGL for Embedded Systems)
中文翻譯過來是用于嵌入式系統(tǒng)的開放圖形庫,它是OpenGL的子級,主要針對手機、游戲主機等嵌入式設備而設計,免授權費、跨平臺、功能完善。
GLES2.0、GLES3.0 指的就是OpenGL ES這套標準,他們也是Android和IOS手機上常用的圖形處理標準。
Unity在移動平臺進行圖形渲染處理時,就包含了OpenGL ES方案
Vulkan
“下一代”開放的圖形顯示API,是與DX12能夠匹敵的GPU API標準。它有一套最新的圖形加速API接口,目標是提供更靈活和豐富的底層操作接口,以替代OpenGL 和 OpenGL ES接口,可****以把Vulkan看做是OpenGL的升級版,目前新版本的Unity支持使用Vulkan方案。
Directx(Direct eXtension)
中文翻譯過來是直接拓展,簡稱DX。它是由微軟公司創(chuàng)建的多媒體編程接口。它不跨平臺,只針對微軟的相關產(chǎn)品,被廣泛使用于Windows操作系統(tǒng)、xBox游戲主機的圖形應用程序開發(fā)中。
其中的D3D算是DX一部分,是對標OpenGL的圖形程序接口
WebGL(Web Graphics Library)
中文翻譯過來是網(wǎng)頁圖形庫,它是針對Web端(*網(wǎng)頁*)的3D繪圖協(xié)議,這個標準允許把JavaScript和OpenGL ES 2.0結(jié)合在一起,網(wǎng)頁開發(fā)人員可以借助系統(tǒng)顯卡在瀏覽器里流暢的展示3D場景和模型,可以在網(wǎng)頁里進行3D圖形開發(fā)。
Metal
中文翻譯過來是金屬,它是蘋果公司為游戲開發(fā)者提供的圖形技術,該技術能夠為3D圖像提高10倍渲染性能,但是它不支持跨平臺,主要針對IOS、macOS蘋果自家的操作系統(tǒng),只有蘋果手機、電腦能夠使用。
Windows電腦:DX、OpenGL、Vulkan
蘋果電腦:Metal、OpenGL、Vulkan
安卓手機:OpenGL ES、Vulkan
蘋果手機:OpenGL ES、Vulkan、Metal
網(wǎng)站網(wǎng)頁:Web GL
如果不通過游戲引擎,我們想要在這些平臺上開發(fā)游戲,那么就必須要針對不同平臺學習對應的圖形程序接口相關的知識。你會發(fā)現(xiàn)OpenGL的身影在各主流平臺中都占有一席之地,由于它出現(xiàn)早、跨平臺、跨語言,所以也是為什么在學習計算機圖形學時,OpenGL是必學的內(nèi)容。
我們現(xiàn)在使用游戲引擎開發(fā)游戲,在絕大多數(shù)情況下,不需要直接和圖形程序接口打交道,但是我們在Unity當中發(fā)布應用程序時,經(jīng)常會看到和他們相關的一些設置,必須要了解了他們的基本概念,才能清楚我們在設置什么。
這些圖形程序接口還有不同的版本,比如DX10、DX11、DX12,比如OpenGL ES 2.0、OpenGL ES 3.0。不同的設備、不同的操作系統(tǒng)他們支持的版本也是不同的。比如我們進行手機游戲開發(fā)時,我們**可以去查詢主流移動設備支持的圖形程序接口的版本,來決定在發(fā)布時,對于圖形程序接口版本的兼容選擇****。這樣才能保證我們發(fā)布的應用程序能夠支持更多的移動設備。
Color Space:色彩空間
可以在此切換Unity中用于渲染的色彩空間
Gamman(伽馬)和 Linear(線性)
區(qū)別:
紋理傾向于保存在伽馬顏色空間中,而著色器期望使用線性顏色空間
因此,在著色器中對紋理進行采樣時,基于伽馬的值會導致不準確的結(jié)果
我們可以選擇線性色彩空間,然后通過紋理中的 sRGB選項決定是用伽馬還是線性,勾選sRGB是伽馬,取消勾選是線性
如何選擇:
線性渲染的效果相對較好一些
但并不是所有平臺都支持線性渲染
支持的平臺為:
Android、IOS、WebGL、Windows、Mac OS X 、Linux
當設備不支持線性渲染時,不會退回到伽馬控件,而是自動退出
在 Android 上,線性渲染至少需要 OpenGL ES 3.0 圖形 API 和 Android 4.3
在 iOS 上,線性渲染需要 Metal 圖形 API
在 WebGL 上,線性渲染至少需要 WebGL 2.0 圖形 API
確定你的應用程序運行的主流設備是否支持,如果支持則選擇線性,不支持選擇伽馬
https://docs.unity.cn/cn/2021.3/Manual/LinearLighting.html
什么是Vulkan?
是一個跨平臺的2D和3D繪圖應用程序接口
在2015年游戲開發(fā)者大會(GDC)上發(fā)表
是OpenGL的下一代版本,旨在提供更低的CPU開銷與更直接的GPU控制
Auto Graphics API:自動圖形接口(建議選擇自動)
勾選:Unity會自動嘗試使用對應圖形API接口進行圖形處理
默認使用Vulkan,如果設備不支持Vulkan,Unity會退到GLES3.2、GLES3.1或GLES3.0
不勾選:可以列表中自己對使用的圖形API接口進行排序,設置使用優(yōu)先級
下方的副選項ES3.1、ES3.1+AEP、ES3.2是三個額外的用于配置最低OpenGL ES 3.X次要版本的
注意:只有當GLES2不在列表中是,Unity才會講額外的三個選項要求添加到Android應用清單中,在這種情況下,如果你的應用發(fā)布到GooglePlay應用商店,它將不會顯示在不受支持的設備上
Color Gamut: 色域
可以添加或刪除 Android 平臺用于渲染的色域
色域定義了可用于給定設備(如監(jiān)視器或屏幕)的可能顏色范圍。sRGB 色域是默認(也是必需的)色域。當定位具有寬色域顯示的設備時,請使用 DisplayP3 來利用完整的顯示功能。
一般的手機使用sRGB即可,如果是PC主機游戲,可以考慮添加DisplayP3
Multithreaded Rendering:多線程渲染
啟用此選項可將圖形 API 調(diào)用從 Unity 的主線程移動到單獨的工作線程。這有助于提高主線程上 CPU 使用率較高的應用程序的性能。
Static Batching:靜態(tài)批處理
會將靜態(tài)物體合并處理DC,提升性能
Dynamic Batching:動態(tài)批處理
可以動態(tài)的合并DC,提高性能
當可編程渲染管線(SPR)處于活動狀態(tài)時,也就是啟用了URP或者HDRP時,動態(tài)批處理不起作用
在使用FairyGUI時,就需要開啟它,F(xiàn)airyGUI的DC將得到優(yōu)化
Compute Skinning:計算蒙皮
啟用此選項可啟用 DX11/ES3 GPU 計算蒙皮,從而釋放 CPU 資源
圖形接口的版本要求較高,PC上DX11、移動設備ES3
Graphics Jobs(Experimental):圖形作業(yè)
啟用后,Unity將渲染循環(huán)的圖形任務移到其它CPU內(nèi)核上運行的工作線程,可以減少在主線程上花費的時間
Texture compression format:紋理壓縮格式
可以在ASTC、ETC2、ETC之間進行選擇
Normal Map Encoding:法線地圖編碼
選擇 XYZ 或 DXT5nm 樣式以設置法線映射編碼。這會影響用于法線貼圖的編碼方案和壓縮格式。DXT5nm 樣式的法線貼圖質(zhì)量更高,但在著色器中解碼成本更高
Lightmap Encoding:光照貼圖編碼
選擇“正常質(zhì)量”或“高質(zhì)量”以設置光照貼圖編碼。此設置會影響光照貼圖的編碼方案和壓縮格式
Lightmap Streaming:光照貼圖流
是否對光照貼圖使用 Mipmap 流式處理
Frame Timing Stats:幀時序統(tǒng)計
啟用此屬性可收集 CPU 和 GPU 幀時間統(tǒng)計信息
需要和攝像機上的動態(tài)分辨率設置結(jié)合使用(Camera組件下的Allow Dynamic Resolution選項),以確定應用程序是受 CPU 還是 GPU 限制。
OpenGL:
Profiler GPU Recorders:是否啟用OpenGL的探查GPU記錄器
在OpenGL上,探查GPU記錄器 會 禁用GPU探查器
Virtual Texturing:虛擬紋理
可在場景中具有很多高分辨率紋理時減少 GPU 內(nèi)存使用量和紋理加載時間。它將紋理拆分為瓦片,然后在需要時將這些瓦片逐步上傳到 GPU 內(nèi)存中。
注意:虛擬紋理和安卓設備不兼容
Shader Precision model:著色器精度模型
控制著色器中使用的采樣器的默認精度
360 Stereo Capture:360 度立體捕捉
Unity 是否可以捕獲立體 360 度全景圖像和視頻
注意:360 度立體捕捉與 Android 不兼容。
Vulkan Setting
身份證明設置
注意:安卓平臺時,不要修改這些選項
SRGB Write Mode: SRGB 寫入模式
允許呈現(xiàn)器在運行時切換 sRGB 寫入模式,如果要暫時關閉線性到 sRGB 寫入顏色轉(zhuǎn)換,可以啟用該選項
注意:建議不要為移動設備啟用該選項
它會增加移動設備GPU的負擔,產(chǎn)生負面影響
Number of swapchain buffers: 交換鏈緩沖區(qū)數(shù)量
設為2位雙緩沖,設為3為三重緩沖可以和Vulkan渲染器一起使用
該設置可以幫助解決移動平臺上的延遲問題
注意:一般情況下我們不要修改此選項,保持為3,不要在安卓設備上使用雙緩沖,會產(chǎn)生負面影響
Acquire swapchain image late as possible:盡可能晚的獲取交換鏈圖像
啟用后,Vulkan會延遲獲取后緩沖器,直到它將幀渲染為屏幕外圖像。Vulkan 使用暫存映像來實現(xiàn)此目的。啟用此設置會導致在顯示反向緩沖器時產(chǎn)生額外的光圈。此設置與雙緩沖相結(jié)合,可以提高性能。但是,它也可能導致性能問題,因為額外的 blit 會占用帶寬。
注意:安卓設備上我們不要修改該選項
Recycle command buffers:回收命令緩沖區(qū)
Unity 執(zhí)行命令緩沖區(qū)后是回收還是釋放命令緩沖區(qū)
Apply display rotation during rendering:
在渲染期間應用顯示旋轉(zhuǎn)啟用此選項可在顯示的本機方向上執(zhí)行所有渲染。這在許多設備上具有性能優(yōu)勢,雖然如此,但是使用它會帶來一些限制,所以還是建議大家不要修改此選項
Identification:身份證明
注意:首次發(fā)布時,一定要確保包名的正確性
Override Default Package Name:是否覆蓋默認包名稱
如果你的公司名和游戲名 不是英文,請勾選它自行設置包名
Package Name:軟件包名
相當于應用程序的ID,用于在設備和安卓應用商店中的唯一標識。
格式:com.公司名.產(chǎn)品名
只能包含字母數(shù)字和下劃線,每段都必須以字母開頭
Version:版本號
顯示給用戶看的
用于標識應用程序包的迭代
格式:數(shù)字.數(shù)字.數(shù)字。。。
比如:1.0、4.3.2、1.2.1等
Bundle Version Code:內(nèi)部版本號
確定一個版本是否比另一個版本新,數(shù)字越大表示版本越新,不會顯示給用戶看
該值為整數(shù),比如每次發(fā)布新版本時可以讓數(shù)字加一
Minimum API Level:最低API級別
決定應用程序運行需要的最低的API級別,如果用戶手機的SDK版本低于該設置,Android系統(tǒng)會組織用戶安裝該應用程序
Target API Level:目標API級別
用于指定應用的目標API級別
主要用于通知Android系統(tǒng),我們已經(jīng)針對目標版本進行了測試,并且系統(tǒng)不應該通過啟用任何兼容性行為,以保持你的應用與目標版本的向前兼容性。應用程序一樣可以在較低版本上運行(取決于Minimum API Level)
Configuration:配置
Scripting Backend:腳本后端
決定Unity如何在項目中編譯和執(zhí)行C#代碼
Mono:將C#編譯為.Net公共中間語言CIL,并使用公共語言運行時執(zhí)行中間語言
IL2CPP:將C#編譯為CIL,再將CIL轉(zhuǎn)換為C++,再將C++編譯為本機代碼,
Mono和IL2CPP的具體區(qū)別在 Unity進階之C#知識補充當中有講解
Api Compatibility Level:API兼容性級別
決定可以在項目中使用的.Net API。該設置會影響代碼和第三方庫的兼容性
.Net Standard 2.1:和.Net Standard 2.1兼容,生成較小的版本,具有完整的跨平臺支持
.Net Framework:和.Net Framework兼容(包含.Net Standard 2.1中的所有的內(nèi)容),包含更多的API支持,但是會生成更大的包。
如果在使用C#的一些高級功能時遇到報錯或無法使用,可以嘗試切換到.Net Framework以便支持這些高級功能的使用,如果有替代方案,建議使用替代方案,盡量使用.Net Standard 2.1可以讓包體更小
C++ Compiler Configuration:C++編譯器配置
只有將Scripting Backend設置為IL2CPP,才能使用該選項
Debug(調(diào)試模式): 將關閉所有優(yōu)化,讓代碼生成速度更快,但運行速度較慢,可以在這種模式下進行調(diào)試
Release(發(fā)布模式):會對代碼進行優(yōu)化,編譯后的代碼運行會更快,二進制文件大小更小,但編譯時間更長
Master(大師模式):可實現(xiàn)所有可能的優(yōu)化,從而壓縮每一點可能的優(yōu)化,發(fā)布時間比發(fā)布模式還要長,如果接受較長的發(fā)布時間,建議在發(fā)布最終版本時使用Master模式
Use incremental GC:使用增量GC
啟用后可以使用增量垃圾回收器,它會將GC分散到多個幀上執(zhí)行,可以降低在一幀中進行GC造成的卡頓。
Assembly Version Validation:程序集版本驗證
Mono是否驗證強名稱程序集中的類型
強名稱程序集,是對程序集進行強命名,為程序集創(chuàng)建唯一標識,可以防止程序集沖突
Mute Other Audio Sources:將其它音頻源靜音
如果希望在運行Unity應用程序時停止在后臺運行的應用程序中的音頻,可以啟用該選項,否則后臺音頻將和Unity中的音頻一起播放
Target Architectures:目標體系結(jié)構(gòu)
允許應用程序運行的CPU
64位環(huán)境中運行安卓應用具有性能優(yōu)勢
64位應用可以處理超過4GB的內(nèi)存空間
Mono模式只能選擇ARMv7
IL2CPP模式可以選擇更多的模式
ARM就是一種微處理器硬件
Chrome OS是一款Google開發(fā)的基于PC的操作系統(tǒng)
ARMv7 32位的ARM
ARM64 64位的ARM
x86(Chrome OS) 32位
x86-64(Chrome OS) 64位
Split APKs by target architecture:按目標架構(gòu)拆分APK(實驗性功能)
啟用后,可以為目標體系結(jié)構(gòu)中選擇的每個CPU架構(gòu)創(chuàng)建單獨的APK,這樣在Google Play中為用戶提供下載時,它會根據(jù)設備的情況下載對應版本的APK,可以讓apk更小,用戶下載更小的包。
但是主要是針對Google Play,因此面向國內(nèi)的產(chǎn)品幾乎不會使用。
Target Devices:目標設備
執(zhí)行允許運行APK的目標設備
All Devices(所有設備):允許apk在所有Android和Chrome OS設備上運行
Phones,Tablets,and TV Devices Only(手機、平板、電視設備):允許apk在Android手機和平板電腦、電視上運行,但是不能在Chrome OS設備上運行
Chrome OS Devices Only(Chrome OS設備):允許apk在Chrome OS設備上運行,但是不能在Android手機、平板、電視上運行
Install Location:安裝位置
指定設備上的應用程序安裝位置
Automatic:自動讓操作系統(tǒng)決定,用戶可以自己移動安裝位置
Prefer External:首選外部安裝,如果可以,將應用程序安裝到外部存儲中(SD卡),如果不能,應用程序安裝到手機存儲空間中
Force Internal:強制內(nèi)部,強制將應用程序安裝到手機存儲空間中,用戶無法將應用程序移動到外部存儲中安裝
Internet Access:互聯(lián)網(wǎng)接入
選擇是否始終將網(wǎng)絡權限添加到Android清單(即使你沒有使用任何網(wǎng)路API)
Auto:僅當使用了網(wǎng)絡API時才會添加互聯(lián)網(wǎng)訪問權限
Require:使用添加互聯(lián)網(wǎng)訪問權限
Write Permission:寫入權限
是否啟用對外部存儲(SD卡)的寫入訪問權限,并向Android應用清單添加相應的權限
Internal(內(nèi)部):僅授予對內(nèi)部存儲的寫入權限
External(外置SD卡):啟用對外部存儲的寫入權限
Filter Touches When Obscured:遮擋時過濾觸摸
啟用后可以丟棄在另一個可見窗口覆蓋Unity應用程序時收到的觸摸(觸屏事件),可以放置竊聽劫持
Sustained Performance Mode:持續(xù)性能模式
啟用此選項可在較長的時間段內(nèi)設置可預測且一致的設備性能級別,而無需進行熱限制。啟用此設置時,整體性能可能會降低
Low Accuracy Location:低精度定位
啟用后可改為低精度值與Android位置API配合使用
Chrome OS Input Emulation:
Chrome OS 操作系統(tǒng)的默認行為是將鼠標和觸摸板輸入事件轉(zhuǎn)為觸屏輸入事件。
取消可禁用這個默認行為
Android TV Compatibility:安卓電視兼容性
啟用后應用程序標記為兼容Android TV
啟用后出現(xiàn)
Android Game:啟用后可將輸出的apk標記為游戲而不是常規(guī)應用
Android Gamepad Support Level:安卓游戲輸入板支持等級
可以選擇玩游戲時支持的輸入方式
Warn about App Bundle size:警告應用程序包的大小
只有在Build Settings中勾選了Build App Bundle(Google Play)才有用
當應用程序包大小超過這個閾值時會收到警告
Active Input Handling:活動輸入處理
選擇要如何處理來自用戶的輸入
Input Manager:老的輸入系統(tǒng),Input相關
Input System Package:新輸入系統(tǒng)
Both:同時使用
Script Compilation:腳本編譯
Scripting Define Symbols:腳本定義符號
可以在此設置自定義編譯標志。
再使用一些第三方內(nèi)容時有時會在此處添加腳本符號
比如:Lua熱更相關、FairyGUI相關
Unity有內(nèi)置的腳本符號
這些符號能夠幫助我們有選擇的在編譯中包含或排除部分代碼
這些腳本符號可以配合多路測試 #if 進行使用
#if 腳本符號
代碼邏輯
#elif 腳本符號
代碼邏輯
#else
代碼邏輯
#endif
平臺腳本符號
編輯器版本腳本符號
其它腳本符號
Additional Compiler Arguments:其它編譯器參數(shù)
向此列表添加條目以將其他參數(shù)傳遞給 Roslyn 編譯器。對每個附加參數(shù)使用一個新條目。
要創(chuàng)建新條目,請按“+”按鈕。要刪除條目,請按“-”按鈕。
添加完所有所需參數(shù)后,單擊“應用”按鈕以在將來的編譯中包括其他參數(shù)。“還原”按鈕將此列表重置為最近應用的狀態(tài)。
Suppress Common Warnings:禁止顯示常見警告
禁用此設置可顯示C#警告
CS0169:從不使用私有字段,聲明了私有變量,但是從沒有使用
CS0649:編譯器檢測到從未分配值的未初始化的私有或內(nèi)部字段聲明
Allow ‘unsafe’ Code:允許使用“不安全”代碼
啟用對在預定義程序集中編譯“unsafe”C# 代碼的支持
unsafe 關鍵詞的基本概念
默認情況下,C#是不支持 指針 的,unsafe 關鍵詞用于在C#表示不安全的上下文,如果想要在C#中進行任何和指針相關的操作,就必須配合unsafe關鍵詞使用。
在公共語言運行時(CLR)中,不安全代碼是指無法驗證的代碼。
C# 中的不安全代碼不一定是危險的,只是 CLR 無法驗證該代碼的安全性。因此,CLR 將僅執(zhí)行完全信任的程序集中的不安全代碼。
如果你使用不安全代碼,你****應該負責確保代碼不會引發(fā)安全風險或指針錯誤
unsafe 關鍵詞的基本使用
如果想要在Unity中正常使用C#中的unsafe關鍵詞進行程序編寫,我們必須在Unity的 Player Settings 中的 Other Settings 中將 Allow unsafe Code 選項勾選上
勾選該選項后,我們就可以在Unity中使用unsafe關鍵詞了。
注意:unsafe 的使用雖然能讓我們在C#中使用指針,但是會存在安全風險和穩(wěn)定性風險,如果沒有特殊需求,請盡量避免在C#中使用 unsafe。
Use Deterministic Compilation:使用確定性編譯
啟用此設置后,編譯的程序集在每次編譯時都是完全相同的。
禁用此設置可防止使用 -確定性 C# 標志進行編譯
確定性編譯可用于確定二進制文件是否從受信任的源編譯
Enable Roslyn Analyzers:啟用羅斯林分析器
禁用此設置可編譯用戶編寫的腳本,而無需項目中可能存在的 Roslyn 分析器 DLL( Roslyn 就是微軟的.Net開源編譯器,編譯器支持 C# 編譯,并提供豐富的代碼分析 API。)
Optimization:優(yōu)化
Prebake Collision Meshes:預烘焙碰撞到網(wǎng)格
啟用該選項可以在構(gòu)建時將碰撞數(shù)據(jù)添加到網(wǎng)格
Keep Loaded Shaders Alive:保持加載的著色器的活動狀態(tài)
啟動后,不能卸載著色器
著色器加載時會造成性能開銷,可能會出現(xiàn)卡頓現(xiàn)象,不允許卸載著色器可以避免卸載后重復加載
Preloaded Assets:預裝資源
設置啟動時加載的資源數(shù)組
將想要預加載的內(nèi)容拖入框中
Strip Engine Code:剝離引擎代碼
選擇IL2CPP模式才會出現(xiàn)的字段
如果你希望在IL2CPP模式,能夠刪除Unity引擎功能中沒有使用的代碼,可以啟用該選項,可以有效的減小包體大小
Managed Stripping Level:管理剝離水平
選擇Unity如何剝離未使用的C#代碼
在發(fā)布應用程序時,Unity會自動去除掉沒有使用的代碼,剝離代碼可以使生成的執(zhí)行文件減小,但是有可能會意外刪除需要使用的代碼
在Unity進階之C#知識補充中講解IL2CPP相關內(nèi)容時講解過
Disabled:不剝離,只有在Mono模式下才能選擇
Minimal:最小剝離,Unity只會搜索Unity引擎未使用的.Net類庫,不會刪除任何用戶編寫的代碼,該設置基本不會出現(xiàn)意外剝離,在使用IL2CPP模式后,該模式是默認模式
Low:低級剝離,處理Unity相關,玩家自己編寫的代碼也會被剝離,會盡量減小意外剝離發(fā)生
Medium:中級剝離,比起Low更多一些剝離
High:高級剝離,優(yōu)先考慮打包大小,會最大限度剝離代碼??梢圆膳浜蟣ink.xml來手動拒絕剝離,或使用[Preserve]特性(在不希望被剝離的函數(shù)前加該特性)
Enable Internal Profiler:啟用內(nèi)部探查器,已經(jīng)棄用的功能
用此選項以從Android SDK的設備中獲取profiler數(shù)據(jù)adblogcat測試項目時輸出。這僅在開發(fā)版本中可用。
Vertex Compression:頂點壓縮
選擇要設置的通道,以便在頂點壓縮方法下壓縮網(wǎng)格
通常,頂點壓縮用于減少內(nèi)存中網(wǎng)格數(shù)據(jù)的大小,減小文件大小,提高CPU性能。
Optimize Mesh Data:優(yōu)化網(wǎng)格數(shù)據(jù)
啟用后,構(gòu)建時會從使用的網(wǎng)格中剝離未使用的頂點屬性
它可以減少網(wǎng)格中的數(shù)量,也可以減小包體大小,可以減小加載時間和運行時的內(nèi)存使用
但是,如果啟用了該設置,運行時就不要更改材質(zhì)或著色器相關設置
也就是說,如果你游戲會在運行時轉(zhuǎn)換一些對象的著色器,就不能開啟該選項。
比如游戲中某一個對象,如果網(wǎng)格使用簡單漫射著色器,那么 Unity 將刪除 切線矢量,因為并不需要它們。如果您想要在運行時切換到網(wǎng)格上的凹凸貼圖著色器 ,那么您將不會得到正確的切線數(shù)據(jù),因為此數(shù)據(jù)已被刪除
Texture MipMap Stripping:貼圖紋理剝離
啟用后會啟用紋理貼圖剝離,在構(gòu)建時會從紋理中剝離沒有使用的紋理貼圖。
會根據(jù)你發(fā)布平臺的質(zhì)量設置進行比較來確定哪些貼圖用不到。
mipmap生成的多分辨率圖也會被剝離
Stack Trace:堆棧跟蹤
選擇在特定的上下文中允許的日志記錄類型
可以選擇日志記錄的方式
None:不記錄
ScriptOnly:只在運行腳本時記錄信息
Full:一直記錄
Error:錯誤信息
Assert:斷言(用于檢測非法情況的)信息
Warning:警告信息
Log:打印日志信息
Exception:異常信息
Legacy:以前的內(nèi)容
Clamp BlendShapes(Deprecated):啟用 骨骼蒙皮動畫中鉗制混合形狀權重的范圍
Publishing Settings
前言
Android 中的簽名是什么?
Android要求所有已安裝的應用程序都使用數(shù)字證書做數(shù)字簽名,數(shù)字證書的私鑰由應用開發(fā)者持有,
Android使用證書作為標示應用程序作者的一種方式,并在應用程序之間建立信任的關系。 證書并不用來控制用戶能否安裝哪個應用。證書不需要由證書認證中心簽名;完全可以使用自制簽名證書。
沒有正確簽名的應用,Android系統(tǒng)不會安裝或運行。此規(guī)則適用于在任何地方運行的Android系統(tǒng),不管是在模擬器還是真實設備上。因為這個原因。在真機或模擬器上運行或者調(diào)試應用前,必須為其設置好簽名。
為什么要使用簽名?
上圖是我們在Unity中發(fā)布Android應用程序時,設置的包名
開發(fā)Android的人這么多,完全有可能把包名命名成同樣的名字,這個時候該如何區(qū)分?
這時就需要簽名來區(qū)分了,由于開發(fā)商可能通過使用相同的Package Name(包名)來混淆替換已經(jīng)安裝的程序,簽名可以保證相同名字,但是簽名不同的包不被替換。
舉例:
比如應用程序A 和 應用程序B 的包名是相同的,如果沒有簽名的存在,在同一Android設備上重復安裝A和B,就會導致他們之間的彼此覆蓋,不能同時擁有,為了避免這種情況出現(xiàn),就有了簽名機制。
安卓密鑰庫和密鑰,就是用來進行Android簽名的。
Android 應用程序清單是什么?
Android應用程序工程中,有一個叫做 AndroidManifest.xml 的xml文件,該文件在之后的開發(fā)中我們會經(jīng)常使用和編輯,該配置文件主要用于聲明應用程序的組件,并且還有以下的一些重要作用:
-
確定應用程序要求的用戶權限,比如:網(wǎng)絡訪問、通訊錄訪問、信息讀取等權限
-
聲明應用程序要求的最低API Level
-
聲明應用程序?qū)⒁褂玫幕蛞蟮挠布蛙浖匦?,比如:攝像頭訪問、藍牙服務、多點觸碰等
-
等等
也就是說,如果我們想要在安卓游戲當中使用一些系統(tǒng)功能或硬件訪問權限,都需要在該文件當中進行設置。
Unity中如果引入Android第三方SDK,或者需要和Android進行交互,經(jīng)常會對該文件進行編輯。如果我們沒有這些需求,可以忽略它。
Gradle 是什么?
Gradle 是一個自動化構(gòu)建開源工具,主要面向Java應用為主,也支持其它語言,比如C++、Kotlin、Swift,未來還會支持更多的語言。
它是一個基于JVM(Java虛擬機)的構(gòu)建工具,是一款通用靈活的構(gòu)建工具,也可以用于Android 項目的構(gòu)建工作,它可以讓安卓項目變得更加簡潔。
在Unity中簡單理解Gradle,它就是用于幫助我們打包出安卓應用程序 .apk 的一個工具,在Android Studio中也使用Gradle進行應用程序打包。
ProGuard 和 R8 是什么?
代碼混淆
代碼混淆(Obfuscated code),是將計算機程序的代碼,轉(zhuǎn)換成一種功能上等價,但是難于閱讀和理解的形式的行為。代碼混淆主要用于程序源代碼,也可以用于程序編譯而成的中間代碼。執(zhí)行代碼混淆的程序被稱作代碼混淆器。已經(jīng)存在許多種功能各異的代碼混淆器。
將代碼中的各種元素,如變量,函數(shù),類的名字改寫成無意義的名字。比如改寫成單個字母,或是簡短的無意義字母組合,甚至改寫成“__”這樣的符號,使得閱讀的人無法根據(jù)名字猜測其用途。重寫代碼中的部分邏輯,將其變成功能上等價,但是更難理解的形式。比如將for循環(huán)改寫成while循環(huán),將循環(huán)改寫成遞歸,精簡中間變量,等等。打亂代碼的格式。比如刪除空格,將多行代碼擠到一行中,或者將一行代碼斷成多行等等。
代碼混淆的主要目的是提升源代碼的安全性,別人反編譯你的應用程序代碼后,增加他們閱讀分析邏輯的難度。
ProGuard 和 R8 就是兩種不同的代碼混淆器。
ProGuard
ProGuard是一個壓縮、優(yōu)化和混淆Java字節(jié)碼(Java源代碼通常被編譯為字節(jié)碼)文件的免費的工具,它可以刪除無用的類、字段、方法和屬性??梢詣h除沒用的注釋,最大限度地優(yōu)化字節(jié)碼文件。它還可以使用簡短的無意義的名稱來重命名已經(jīng)存在的類、字段、方法和屬性。常常在Android開發(fā)用于混淆最終的項目,增加項目被反編譯的難度。
Unity發(fā)布安卓應用程序時,默認使用的就是ProGuard來進行處理最終的代碼。
R8
R8是相對ProGuard較新的Android混淆編譯器,它可以盡可能的減小應用的大小,早期的Android Studio版本中,混淆編譯器使用的是ProGuard執(zhí)行編譯時的代碼優(yōu)化,如果我們使用Android Gradle 3.4.0或更高版本構(gòu)建項目時,不再使用ProGuard進行代碼優(yōu)化,而是采用R8編譯器協(xié)同工作。
Android Sutdio 3.3版本開始,就使用R8作為代碼壓縮器來對代碼進行混淆、壓縮、優(yōu)化了。
R8 相對 ProGuard來說,它可以更快地縮減代碼,同時改善輸出的大小。
Unity發(fā)布安卓應用程序時,我們可以選擇使用R8混淆編譯器進行發(fā)布處理。
大概了解了這些基本概念后,才能知道我們是在設置什么內(nèi)容。
Keystore Manager:密鑰管理器
可以通過密鑰管理器創(chuàng)建、配置和加載密鑰和密鑰庫
我們可以在Keystore Manager窗口
或
Publishing Settings 發(fā)布設置中
加載現(xiàn)有密鑰庫和密鑰
Create New:創(chuàng)建新的密鑰庫
Anywhere:任何地方,會打開項目文件夾根目錄下的文件資源管理器,這是Unity存儲密鑰庫的默認位置
In Dedicated Location:專用位置,將密鑰庫文件保存到計算機中的另一個目錄中
注意:為了協(xié)同開發(fā)方便,建議大家就把密鑰庫保存在項目文件夾下,避免其它同事無法訪問密鑰庫
Select Existing:選擇現(xiàn)有密鑰庫
可以指定加載現(xiàn)有密鑰庫
Password:密鑰庫的密碼
Confirm password:創(chuàng)建密鑰庫時 需要重復一次密碼
Existing Keys:現(xiàn)有密鑰
界面的這一部分包含當前密鑰庫包含的密鑰的只讀列表
Project Keystore:項目密鑰庫
用于保存簽名密鑰來實現(xiàn)應用程序安全性的容器
如果想要加載和使用現(xiàn)有密鑰庫,我們需要:
- 啟動 Custom Keystore
- 在 Select 下拉列表中選擇Browse,從文件系統(tǒng)中選擇密鑰庫
- 輸入密鑰庫密碼
Custom Keystore:啟用后,可以指定加載和使用現(xiàn)有密鑰庫
Select:啟用Custom Keystore后,該按鈕可以用來選擇要使用的密鑰庫
Path:你選擇的密鑰庫所在路徑
Password:輸入密鑰庫密碼以加載所選的密鑰庫
Project Key:項目密鑰
加載密鑰庫后,Unity會加載該密鑰庫中的所有密鑰
我們可以在項目密鑰Project Key中設置從該密鑰庫中選擇哪一個密鑰用來作為該項目的活動密鑰
Alias:選擇用于打開的項目的密鑰
Password:密鑰密碼
Build:構(gòu)建相關
默認情況下,Unity使用Unity安裝提供的清單文件、Gradle模板和文件構(gòu)建應用程序
如果想要自定義這些內(nèi)容,你需要:
- 啟用Build下方的這些復選框,文件會出現(xiàn)到復選框的下方
- 打開新文件進行更改
- 保存修改的文件,Unity下次構(gòu)建應用程序時會自動使用的文件
Custom Main Manifest:自定義主清單文件
該清單文件是一個xml文件
我們可以在此決定一些權限設置(比如:網(wǎng)絡、定位、拍照等權限配置),還可以設置是否啟用一些安卓功能等等
Custom Launcher Manifest:自定義啟動器清單
該清單文件是一個xml文件
我們可以在此決定一些應用程序啟動之前的外觀和行為。(比如:圖標、名稱、安裝位置等等)
Custom Main Gradle Template:自定義主Gradle構(gòu)建模板
Gradle 是一個構(gòu)建系統(tǒng),可自動執(zhí)行許多構(gòu)建過程并防止許多常見的構(gòu)建錯誤。Unity將Gradle用于所有Android版本。您可以在Unity中構(gòu)建輸出包(.apk,.aab),也可以從Unity導出Gradle項目,然后使用Android Studio等外部工具構(gòu)建它
是一個gradle文件,包含有關如何將Android應用程序構(gòu)建為庫的信息
Custom Launcher Gradle Template:自定義啟動器Gradle構(gòu)建模板
是一個gradle文件,包含有關如何構(gòu)建Android應用程序的說明
Custom Base Gradle Template:自定義基礎Gradle構(gòu)建模板
是一個gradle文件,包含在所有其它模板和Gradle項目之間的共享配置
Custom Gradle Properties Template:自定義屬性Gradle構(gòu)建模板
屬性文件,包含Gradle生成環(huán)境的配置設置
比如
JVM(Java虛擬機)內(nèi)存配置
允許Gradle使用多個JVM構(gòu)建的屬性
用于選擇進行縮小的工具的屬性
構(gòu)建應用程序包時不壓縮本機庫的屬性等等
Custom Proguard File:自定義Proguard文件
是一個txt文件,包含縮小過程的配置設置
如果縮小刪除了一些應該保留的Java代碼,你可以添加一條規(guī)則來將這些代碼保留在此文件中
Minify:代碼混淆和縮小相關
是一種縮減、混淆和優(yōu)化應用程序代碼的過程
它可以減小代碼大小并使代碼更難以反編譯
使用 Minify 設置可定義 Unity 應何時以及如何將縮小應用于構(gòu)建
使用該功能會加長發(fā)布時間,并且還會讓調(diào)試變得復雜,所以一般在最終發(fā)布時才會使用,平時發(fā)布測試應用時不需要開啟。
Use R8:默認情況下,Unity 使用 Proguard 進行縮小。啟用此復選框可改為使用 R8。
Release:如果希望 Unity 在發(fā)布構(gòu)建中縮小應用程序的代碼,請啟用此復選框。
Debug:如果希望 Unity 在調(diào)試構(gòu)建中縮小應用程序的代碼,請啟用此復選框。
Split Application Binary:拆分應用程序二進制文件
啟用 Split Application Binary 選項可將輸出包拆分為主包 (APK) 和擴展包 (OBB) 包。如果要發(fā)布大于 100 MB 的應用程序,則 Google Play 應用商店需要此功能。
Unity打包Android
Unity導出APk
沒什么可說的直接導出就行了
Unity導出Android Studio能夠打開的工程
1.設置導出基本信息:公司名、游戲名、圖標、包名等關鍵信息
2.在File——>Build Settings中,勾選 Export Project 選項
3.點擊Export 導出按鈕
在Android Studio中打開Unity導出的工程
1.打開Android Studio
2.新選擇 打開工程
3.選擇 之前導出的對應文件夾
4.彈出提示時,使用Android Studio中的 Android SDK,可以避免打包失敗
5.等待工程加載結(jié)束
6.更新Gradle版本,保證之后打包成功
使用Android Studio生成應用程序apk
1.在 工具欄——>Build——>Build Bundle…——>Build APK
構(gòu)建一次工程,保證構(gòu)建成功,根據(jù)報錯解決問題
常見問題:
1.The option ‘a(chǎn)ndroid.enableR8’ is deprecated 由于新版本Gradle默認使用R8混淆
所以不需要這個選項設置了
在Project選項中 找到 gradle.properties 刪除 android.enableR8
2.SDK Tools 版本不匹配
更新SDK使用的路徑,使用Android Studio自己的路徑,或者更新SDK
2.在 工具欄——>Build——>Build Bundle…——>Generate Signed Bundle
發(fā)布APK,可以設置密鑰庫相關內(nèi)容后進行打包即可
3.測試生成的apk文件
Android調(diào)試相關
Unity進行安卓真機調(diào)試
調(diào)試指的是什么?
安卓手機的真機調(diào)試
由于運行環(huán)境的改變(開發(fā)時在 Windows 或 MacOS,使用時在Android或IOS)
我們很多時候需要在真機上進行項目的 性能分析 和 bug處理(斷點調(diào)試修復bug)
準備測試用安卓手機
1.安卓手機需要打開開發(fā)者模式可以根據(jù)自己的手機品牌自行搜索開啟方式
一般的操作方式:設置——>關于手機——>版本號(點擊n次版本號)便可開啟
2.完成第一步后,在手機的開發(fā)者選項中 開啟 USB調(diào)試功能一般開發(fā)者選項會在:設置——>系統(tǒng)——>開發(fā)者選項中找到USB調(diào)試功能 開啟它
3.將手機通過USB接入到你的電腦上,在手機上一般會彈出一個提示選擇允許進行USB調(diào)試
在Unity中進行調(diào)試相關設置
在 File ——> Build Settings 中進行調(diào)試相關的設置
- 完成知識點一相關內(nèi)容后,可以在 Run Device 的設備列表中看到你的安卓設備
如果Refresh刷新后也無法看到你的設備,證明你的連接有問題,或沒有開啟USB調(diào)試模式
- 調(diào)試相關設置
剖析器 性能問題排查相關(勾選了他們,我們才能在Unity的剖析器中獲取完整信息)
開啟 Development Build 開發(fā)模式構(gòu)建
開啟 Autoconnect Profiler 自動連接分析器
開啟 Deep Profiling 深度剖析
斷點 調(diào)試相關(勾選了他們,我們才能進行斷點調(diào)試)
開啟 Script Debuggins 腳本調(diào)試
開啟 Wait For Managed Debugger 等待托管調(diào)試器
- 項目基本的發(fā)布設置相關內(nèi)容一定要設置正確
比如:包名、項目名、公司名、密鑰庫等等
Unity連接安卓真機進行項目調(diào)試
點擊Build and Run
這時Unity會自動發(fā)布apk應用該程序,然后安裝到設備上自動啟動
這時我們就可以
-
利用Unity的 剖析器來分析應用程序
-
進行斷點調(diào)試,排查問題
注意:如果想要斷點調(diào)試,自動啟動應用程序后,彈出的提示窗口 不要點擊OK先在VS中 工具欄——>調(diào)試——>附加 Unity 調(diào)試程序——>選擇對應的設備再在運行的應用程序中點擊ok
Unity Remote
Remote是什么?
Remote翻譯過來是遠程的意思
Unity Remote是Unity提供給我們的一個可以安裝到移動平臺上的應用程序幫助我們進行調(diào)試的遠程工具
該應用程序可以安裝到 Android、IOS設備上,當我們在Unity編輯器運行項目時,移動設備上安裝的Unity Remote會和Unity連接,Unity編輯器中的游戲畫面會被發(fā)送到移動設備上,移動設備上的輸入操作會返回到Unity編輯器運行的項目中
它的主要作用就是可以讓我們省去發(fā)布安裝包、安裝到移動設備上的這一繁瑣流程
可以直接通過Unity Remote遠程連接來達到以下目的:
查看項目在設備上的視覺表現(xiàn)效果
測試移動設備輸入邏輯是否能正常使用
設備的以下輸入會被回傳到Unity引擎中用于測試
觸屏輸入相關
GPS
陀螺儀
指南針
加速度計
相機拍照信息
等等輸入信息
注意:
1.Unity引擎?zhèn)鬟f給移動設備的畫面較模糊,幀率較低,我們只能看看大致的表現(xiàn)效果
2.我們主要通過這種方式,來測試移動設備輸入相關的功能
比如:陀螺儀、GPS、觸屏功能等等
獲取和使用Unity Remote
1.下載Unity Remote應用程序,并安裝到移動設備上
2.將移動設備使用USB調(diào)試模式和電腦連接
3.在菜單欄Edit——>Project Setting——>Editor中設置Unity Remote的Device為任意設備
4.在移動設備運行Unity Remote
5.在Unity編輯器中啟動項目,便可以進行遠端調(diào)試
注意:
1.如果電腦插入多個Android設備,會自動選擇第一臺設備
2.Unity Remote存在的主要目的僅僅是為了快速的在設備上測試輸入相關功能以及基本表現(xiàn)效果 如果要完整的測試,還是需要發(fā)布安裝進行調(diào)試
Android Logcat
Android Logcat是什么?
Android Logcat是Unity提供的一個拓展包,引入該拓展包后,我們可以在Unity當中對Android應用程序進行調(diào)試
我們可以通過該工具獲取到:
1.安卓日志打印信息
2.安卓應用程序內(nèi)存統(tǒng)計
3.安卓屏幕截圖
4.安卓屏幕錄像
5.堆棧跟蹤
Unity2019.4及以上版本都可以引入Android Logcat來幫助我們進行調(diào)試
如何使用Android Logcat工具
1.在Unity工程中引入Android Logcat包
2.連接Android設備
3.將Android Logcat連接到Android設備上點的應用程序,便可以查看相關信息
Android Logcat窗口基礎知識
A:工具欄
Auto Run:自動運行
啟用后,當你構(gòu)建和運行應用程序時Android Logcat窗口會連接到應用程序,顯示對應的相關信息
No device:設備選擇器
當沒有Android設備連接電腦是,顯示No Device,有設備時可以在這選擇連接的Android設備
No Filter:過濾選擇器
可以指定Android設備上顯示消息的應用程序,此處顯示的是應用程序的包名
過濾輸入框
用于過濾搜索消息日志,可以輸入內(nèi)容搜索信息
消息正文過濾:在輸入框輸入內(nèi)容,則會自動篩選消息中存在輸入字符的內(nèi)容
優(yōu)先級過濾:在下方點擊Priority優(yōu)先級,選擇過濾的內(nèi)容
Verbose:冗長的,所有
Debug:調(diào)試信息
Info:信息
Warn:警告
Error:錯誤
Fatal:致命的
按標簽過濾:在下方點擊Tag標簽,選擇過濾的內(nèi)容
Filter Options:過濾器選項
決定如何使用選項過濾器輸入過濾消息日志中的消息
Use Regular Expressions:使用正則表達式
Match Case:區(qū)分大小寫
Reconnect:重新連接
重新連接到應用程序和設備,如果程序不再運行則重新連接到設備
Disconnect:斷開和設備的連接
Clear:清除消息列表中的消息日志
Tools:工具相關
Screen Capture:屏幕捕獲
從連接的Android設備上捕捉屏幕截圖和視頻
Open Terminal:開放終端
在Windows上打開命令調(diào)試符窗口,在macOS和Linux上打開終端
Stacktrace Utility:堆棧跟蹤應用程序
解析自定義堆棧跟蹤
Memory Window:內(nèi)存窗口
跟蹤為應用程序分配的內(nèi)存
B:消息日志
屏幕捕獲工具
屏幕捕獲工具主要可以幫助我們進行游戲內(nèi)截圖,錄屏
該工具可以幫助我們:
1.測試人員用來錄制bug表現(xiàn),反饋給程序人員進行解決
2.獲取截屏、錄屏信息,獲取宣傳資料
優(yōu)點:直接PC端遠程獲取,方便快捷,便于記錄bug表現(xiàn)效果
缺點:錄制的視頻不會捕獲聲音,錄屏功能可以部分設備不支持
堆棧跟蹤實用工具
目前我們使用Android Logcat連接真機進行測試時
打印、警告、報錯等等信息都會直接在主窗口中打印出來讓我們進行分析
相當于它幫助我們進行了自動的堆棧跟蹤解析
什么是自動堆棧跟蹤解析呢?
就是我們可以在打印窗口看到具體是哪個腳本的哪行代碼
出現(xiàn)了打印、警告、報錯等等信息
而Tools(工具)中的Stacktrace Utility(堆棧跟蹤實用工具)的作用是
允許我們復制粘貼自定義日志并解析堆棧跟蹤
主要用于沒有真機連接設備調(diào)試時
或者之后正式發(fā)布版本后
我們可以獲取應用程序日志信息
將這些日志信息復制到該工具中用于翻譯
(一般項目會在崩潰后,在本地存儲一份崩潰日志,我們可以獲取該日志)
因為這種情況下的日志信息中,不會明確指明是哪個腳本哪行代碼
往往是一堆看不懂的符號,我們可以使用該工具進行翻譯
比如:下面這個打印信息就是安卓的原始日志
E CRASH : #01 pc 01c65330 /data/app/com.CrashComp.Crash-J2Z_L0XSsSAZPkt9lab2rQ==/lib/arm/libunity.so
(DiagnosticsUtils_Bindings::ForceCrash(DiagnosticsUtils_Bindings::ForcedCrashCategory, ScriptingExceptionPtr*)+48)
這里面都是一堆特殊符號,并沒有明確告訴你哪個腳本哪行代碼
通過翻譯后堆棧跟蹤實用工具翻譯后,我們就能夠獲取到哪個腳本哪行代碼打印了輸出了該信息
總而言之它該工具就是用來翻譯發(fā)布后安卓應用程序的日志信息的
堆棧跟蹤實用工具的使用
使用堆棧跟蹤實用工具的作用是可以翻譯自己獲取到的安卓日志信息
使用流程是:
1.設置項目的 so 文件路徑
2.將日志信息復制到Original(初始)頁簽中
3.點擊Resolve Stacktraces(解析堆棧跟蹤)
4.在Resolved(已解析的日志)頁簽中查看翻譯結(jié)果
注意:我們在電腦連接安卓設備通過Android Logcat進行調(diào)試時一般不使用該功能,只有當非連接調(diào)試時,獲取了安卓崩潰日志后才會使用該功能
內(nèi)存窗口工具
首先了解 RAM(運行時內(nèi)存)對于我們的意義
如果應用程序出現(xiàn)閃退情況,往往都是因為應用程序運行時內(nèi)存的使用超出了設備允許的最大內(nèi)存量,而被手機系統(tǒng)強行關閉
注意:
不同品牌、型號的手機配置都是不同的,手機后臺運行的程序數(shù)量也是不同的,所以要根據(jù)實際情況進行測試獲取目標設備的內(nèi)存極限值,可以選取市面上的主流機型來進行測試
內(nèi)存窗口工具是用于跟蹤應用程序RAM(運行時內(nèi)存)的分配情況的
我們可以使用它來分析應用程序可能存在的內(nèi)存問題
我們可以使用它 定期自動的 或者 手動的 捕獲內(nèi)存快照
這里的內(nèi)存快照就是捕獲的這一瞬間應用程序的運行時內(nèi)存使用情況
根據(jù)內(nèi)存快照我們可以分析內(nèi)存問題
比如:
-
切換場景前和切換場景后的內(nèi)存快照比較,判斷是否存在內(nèi)存泄露
-
比如閃退前的內(nèi)存快照,來分析設備占用多少內(nèi)存時造成了閃退,確定內(nèi)存瓶頸
等等
Auto Capture:自動捕獲
Unity會定期捕獲應用程序的內(nèi)存快照
注意:自動捕獲,可能會影響性能表現(xiàn),可能會造成卡頓,如果嚴重影響測試,建議使用手動捕獲
Manual Capture:手動捕獲
通過點擊按鈕,自己手動捕獲內(nèi)存快照
Disabled:不啟用
Android Debug Brige
ADB是 Android Debug Brige(安卓調(diào)試橋)的簡稱
它是我們調(diào)試Android設備的一套指令集
它可以讓我們通過指令來進行一些操作,來獲取日志信息
比如:
1.關機、重啟
2.安裝、啟動、卸載應用程序
3.刪除、移動、復制文件
4.查看日志信息
我們最常使用的就是查看日志信息的功能
之前學習的Android Logcat工具其實就是利用了ADB來獲取的信息
由于Android Logcat工具只能在Unity 2019.4及其以上版本才能使用
所以對于老版本的Unity來說,我們一般使用ADB來幫助我們進行調(diào)試
注意:
使用ADB工具的前提是 電腦和安卓設備處于USB調(diào)試連接
如何使用ADB?
在Android SDK的路徑中
尋找platform-tools文件夾
在其中可以找到adb.exe文件
我們需要配合命令調(diào)試符窗口(Windows)使用adb指令集
方法一:
直接在Android Logcat窗口中使用Tools中的Open Terminal(打開終端)
Window系統(tǒng)會自動打開命令調(diào)試符窗口
MacOS系統(tǒng)會自動打開終端窗口
會直接來到SDK文件夾中的platform-tools(平臺工具)文件夾
在后面直接輸入指令即可
adb 指令
方法二:
自己打開命令調(diào)試符窗口
輸入adb.exe所在文件夾路徑
比如:
D:\Android\android-sdk\platform-tools\adb 指令
關鍵指令
常用指令
1.顯示日志信息
adb logcat
2.獲取Unity相關日志信息
adb logcat -s Unity
做了解的指令
1.查看abb相關信息,比如版本號、常用命令等
adb help
2.查看adb版本
adb version
3.安裝apk
adb install apk路徑
4.覆蓋安裝
adb install -r apk路徑
5.卸載應用程序
adb uninstall 應用程序包名
6.保留數(shù)據(jù)卸載應用程序
adb uninstall -k 應用程序包名
7.查看連接的主機設備
adb devices
8.從電腦上復制文件到手機
adb push 電腦上文件路徑 需要復制到的手機路徑
9.從手機上復制文件到電腦
adb pull 手機上文件路徑 需要復制到的電腦路徑
10.查看手機上安裝的所有應用程序包名
adb shell pm list packages
11.截圖
adb shell screencap 保存到的手機路徑
12.錄屏
adb shell screenrecord 保存到的手機路徑
等等
更多信息
https://developer.android.com/studio/command-line/adb.html
Android Studio中調(diào)試應用程序
回顧Unity導出Android Studio工程
Build Settings中進行設置
1.勾選Export Project
2.勾選Development Build
3.導出到指定目錄
4.使用Android Studio打開該工程
5.更新Gradle版本
6.刪除 android.enableR8
7.保證構(gòu)建成功
在Android Studio中調(diào)試應用程序
1.保證Android設備和電腦進行USB調(diào)試連接
2.菜單欄的Run頁簽中進行調(diào)試(若上部分Run置灰,可以重啟一次Android Studio)
3.在下方的Logcat日志窗口和Profiler性能分析器窗口調(diào)試應用程序,排查問題
更多關于Android Studio調(diào)試和性能分析內(nèi)容
調(diào)試:https://developer.android.google.cn/studio/debug
性能分析:https://developer.android.google.cn/studio/profile
總結(jié)
Android Studio中調(diào)試應用程序和Unity中使用 Android Logcat + Unity Profiler窗口類似
一般情況下,沒有特殊需求,我們都在Unity中進行Android應用程序調(diào)試文章來源:http://www.zghlxwxcb.cn/news/detail-413431.html
相對Android Studio中調(diào)試來說更適合我們Unity程序員文章來源地址http://www.zghlxwxcb.cn/news/detail-413431.html
到了這里,關于Unity移動平臺相關(一)Android打包設置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!