Unity跨平臺構建快速回顧

知識點來源:人間自有韜哥在,豆包

目錄

  • 一、發布應用程序
    • 1. 修改發布必備設置
      • 1.1 打開設置面板
      • 1.2 修改公司名、游戲項目名、版本號和默認圖標
      • 1.3 修改 Package Name 和 Minimum API Level
    • 2. 發布應用程序
      • 2.1 配置 Build Settings
      • 2.2 選擇發布選項
      • 2.3 構建 APK 文件
    • 3. 測試發布的 APK 文件
      • 3.1 使用 Android 設備進行測試
      • 3.2 使用 Android 模擬器進行測試
  • 二、發布界面參數介紹
    • 1.1.BuildSettings生成設置
    • 2.PlayerSettings
    • 3.OtherSettings-渲染
    • 4.OtherSettings-Vulkan設置和身份證明
    • 5.OtherSettings-配置(Configuration)
    • 6.OtherSettings-ScriptCompilation
    • 7.OtherSettings-優化和堆棧跟蹤
    • 8.PublishingSettings-KeystoreManager
    • 9.PublishingSettings-其他
  • 三、交互項目創建
    • 1.Unity調用安卓
    • 2.安卓調用Unity
    • 3.Android開發的必備原理
    • 4.交互項目創建

一、發布應用程序

1. 修改發布必備設置

1.1 打開設置面板

在Unity編輯器中,依次點擊 File -> Build Settings,接著在彈出的窗口里點擊 Player Settings 按鈕,這將打開 Player Settings 面板。

1.2 修改公司名、游戲項目名、版本號和默認圖標

  • 公司名:在 Player Settings 面板的 Identification 部分,找到 Company Name 字段,把它修改為你公司的名稱。
  • 游戲項目名:同樣在 Identification 部分,將 Product Name 字段修改為你的游戲項目名稱。
  • 版本號:還是在 Identification 部分,修改 Version 字段,以反映游戲當前的版本號,版本號通常遵循 主版本號.次版本號.修訂號 的格式,例如 1.0.0
  • 默認圖標:在 Other Settings 下的 Icon 部分,點擊 + 按鈕,選擇你準備好的圖標文件(通常為 PNG 格式)。Unity 支持多種尺寸的圖標,你可以上傳不同尺寸的圖標以適配不同的設備。

1.3 修改 Package Name 和 Minimum API Level

  • Package Name:在 Other Settings 部分,找到 Package Name 字段,這個字段是應用在 Android 系統中的唯一標識符,一般采用反向域名的格式,例如 com.yourcompany.yourgame,必須對其進行修改設置。
  • Minimum API Level:同樣在 Other Settings 部分,找到 Minimum API Level 字段,根據你的游戲兼容性需求選擇合適的 Android API 級別。通常建議選擇一個較廣泛支持的 API 級別,但也要考慮到你使用的功能對 API 級別的要求。

2. 發布應用程序

2.1 配置 Build Settings

Build Settings 窗口中,選擇 Android 平臺,然后點擊 Switch Platform 按鈕,等待 Unity 完成平臺切換。

2.2 選擇發布選項

  • Build System:通常選擇 Gradle
  • Target SDK Version:根據你的需求選擇合適的 Android SDK 版本。
  • Scripting Backend:可以選擇 IL2CPP 以獲得更好的性能,或者選擇 Mono 以獲得更廣泛的兼容性。

2.3 構建 APK 文件

點擊 Build 按鈕,選擇一個保存 APK 文件的目錄,然后等待 Unity 完成構建過程。構建過程可能需要一些時間,具體取決于項目的大小和復雜度。

3. 測試發布的 APK 文件

3.1 使用 Android 設備進行測試

  • 開啟 USB 調試:在 Android 設備的 設置 -> 關于手機 中,多次點擊 版本號 開啟開發者選項,然后在開發者選項中開啟 USB 調試 功能。
  • 連接設備:使用 USB 數據線將 Android 設備連接到電腦。
  • 安裝 APK 文件:在電腦上找到之前構建好的 APK 文件,將其復制到 Android 設備上,然后在設備上找到該文件并點擊安裝。
  • 測試游戲:安裝完成后,在設備的應用列表中找到并打開游戲,進行全面的測試,確保游戲的各項功能正常運行。

3.2 使用 Android 模擬器進行測試

  • 安裝模擬器:可以使用 Android Studio 自帶的模擬器,或者第三方模擬器如 BlueStacks。
  • 啟動模擬器:啟動模擬器并等待其完全啟動。
  • 安裝 APK 文件:將 APK 文件拖放到模擬器窗口中,按照提示完成安裝。
  • 測試游戲:安裝完成后,在模擬器的應用列表中找到并打開游戲,進行測試。

二、發布界面參數介紹

1.1.BuildSettings生成設置

設置項描述可選值及說明
Texture Compression(紋理壓縮)設置發布后的紋理壓縮格式1. Use Player Settings:使用在播放器設置中設置的紋理壓縮格式
2. ETC:使用ETC格式
3. ETC2:使用ETC2格式,安卓常用,支持透明通道,老設備可能不支持
4. ASTC:使用ASTC格式
5. DXT:使用DXT格式
6. PVRTC:使用PVRTC格式
可統一設為ETC2,并在ETC2 fallback設置不支持時的替代方式
ETC2 fallback(ETC2回退)當Unity用于不支持ETC2的安卓設備時的RGBA紋理格式1. 32 - bit:32位,以全分辨率存儲RGBA紋理,質量最高,內存占用最多
2. 16 - bit:16位,以全分辨率存儲RGBA紋理,質量較低,內存占用相對較少
3. 32 - bit, half resolution:32位,半分辨率,紋理會模糊,內存占用較小
非ETC2壓縮,大多用32 - bit備用,取決于GPU支持
Export Project(導出項目)勾選后,將Unity項目導出為可導入Android Studio的Gradle項目-
Symlink Sources(符號鏈接源)當勾選Export Project時才能勾選,決定是否在Unity和導出的Gradle項目之間共享Java和Kotlin源文件啟用后利于測試和迭代Java和Kotlin代碼,重新導出時更改會保留,適合二次開發
Build App Bundle (Google Play)(生成應用程序資源包)是否將應用程序作為Android應用捆綁包(AAB)1. 啟用:發布AAB,可配合安卓二次開發
2. 禁用:發布APK,可直接安裝
Create symbols.zip(創建符號壓縮文件)符號文件可幫助調試應用程序1. Disabled:不生成
2. Public:生成公共符號包,包含解析函數地址信息,包小于調試符號包
3. Debugging:生成調試符號包,含完整調試信息和符號表,可解析堆棧、附加調試器
Run Device(運行設備)指定在哪個附加設備上測試生成連接新設備或列表無設備時,點擊Refresh刷新
Build to Device(構建到設備)不創建完整構建,將修改文件直接部署到設備速度快,方便調試
Development Build(開發構建)是否包含腳本調試符號和性能分析器到項目中勾選可調試應用程序
Autoconnect Profiler(自動連接分析器)是否自動將分析器連接到生成的應用程序-
Deep Profiling(深度分析)是否啟用深度剖析在分析器中啟用可返回詳細分析數據,但會降低腳本執行速度
Script Debugging(腳本調試)是否允許調試應用程序的腳本文件Wait For Managed Debugger:程序運行腳本代碼前是否等待調試器連接
Compression Method(壓縮方法)Unity在構建時壓縮項目中數據的方式1. Default:默認用ZIP,壓縮效果略好,解壓慢
2. LZ4:快速壓縮格式,提高加載時間
3. LZ4HC:LZ4高壓縮版本,構建慢,發布版本效果好,提高加載時間
Max Texture Size(最大的紋理大小)用于本地開發時導入紋理的最大尺寸減小可加快資源導入和平臺切換
Texture Compression(紋理壓縮相關選項)選擇可加快資源導入和平臺切換1. No Override:使用默認設置
2. Force Fast Compressor:強制快速壓縮
3. Force Uncompressed:強制解壓縮

2.PlayerSettings

設置項分類描述可選值及說明
icon(圖標設置)基礎設置設置在設備上顯示的應用圖標1. Adaptive:運行在 Android 8.0 及以上版本設備的應用圖標
2. Round:運行在 Android 7.1 及以上版本設備的應用圖標
3. Legacy icons:運行在 Android 7.1 以下版本設備的應用圖標
Resolution and Presentation(分辨率和演示設置)基礎設置--
Fullscreen Mode(全屏模式)分辨率和演示設置-1. Fullscreen Window:全屏窗口,導航欄始終隱藏,應用內容可能縮放,有黑邊
2. Windowed:窗口模式,大小取決于應用分辨率
Default Window Width分辨率和演示設置應用程序窗口的默認窗口寬度單位為像素
Default Window Height分辨率和演示設置應用程序窗口的默認窗口高度單位為像素
Minimum Window Width分辨率和演示設置應用程序窗口的最小寬度單位為像素
Minimum Window Height分辨率和演示設置應用程序窗口的最小高度單位為像素
Resizable Window(可調整大小的窗口)分辨率和演示設置設置用戶是否可調整應用窗口大小,可在 Android 和平板應用中啟用多窗口功能詳情見 Android Developers
Hide Navigation Bar分辨率和演示設置是否隱藏頂部顯示的導航欄-
Render outside safe area分辨率和演示設置是否使用所有可用屏幕控件渲染,包括劉海區域-
Optimized frame Pacing分辨率和演示設置是否均勻分布幀以減小幀率方差,啟用后體驗更流暢-
Resolution Scaling Mode(分辨率縮放模式)分辨率和演示設置-1. Disabled:禁用,應用以設備本機屏幕分辨率呈現
2. Fixed DPI:使用 API 應用分辨率縮放,優化性能和電池壽命
Target DPI分辨率和演示設置若設備本機屏幕 DPI 高于此值,Unity 降低應用分辨率匹配設置計算方式:Min(Target DPI * Factor / Screen DPI,1),Factor 是 Quality 質量設置中 Resolution Scaling Fixed DPI Factor 參數
Reset resolution on window resize分辨率和演示設置本機窗口大小更改時,是否將屏幕分辨率設為新的本機窗口大小,若為 Fixed DPI 則重新計算分辨率-
Blit Type(光高類型)分辨率和演示設置是否使用 Blit 將最終圖像呈現在屏幕上1. Always:Unity 渲染到屏幕外緩沖區,再用 Blit 復制到設備幀緩沖區
2. Never:Unity 渲染到設備操作系統提供的幀緩沖區,失敗有警告,通常更快但不兼容所有設備
3. Auto:先渲染到設備提供的幀緩沖區,失敗則用 Blit 呈現
Supported Aspect Ratio(支持的縱橫比)分辨率和演示設置--
Aspect Ratio Mode分辨率和演示設置指定應用支持的最大縱橫比,設備縱橫比大于此值時,Unity 用此縱橫比并添加黑條1. Legacy Wide Screen(1.86):支持 Android 傳統寬屏寬高比
2. Native Aspect Ratio:支持 Android 本機寬高比
3. Custom:自定義縱橫比
Up To分辨率和演示設置選擇自定義縱橫比時可自行設置-
Orientation(屏幕取向)分辨率和演示設置--
Default Orientation分辨率和演示設置指定應用使用的屏幕方向1. Portrait:豎屏,應用窗口底部和屏幕底部對齊
2. Portrait Upside Down:豎屏倒置,應用窗口底部和屏幕頂部對齊
3. Landscape Right:右橫屏,應用窗口右側和屏幕底部對齊
4. Landscape Left:左橫屏,應用窗口左側和屏幕底部對齊
5. Auto Rotation:自動旋轉,可勾選允許的方向
Use 32 - bit Display Buffer分辨率和演示設置顯示緩沖區是否保存 32 位顏色值而非 16 位,后期處理有條紋或需 Alpha 值時啟用某些后期處理效果需此設置,因以相同格式創建渲染紋理
Disable Depth and Stencil分辨率和演示設置是否禁用深度和模板緩沖區-
Render Over Native UI分辨率和演示設置是否在 Android 或 iOS 的本機 UI 上渲染,生效需相機清除標志設為使用 Alpha 值低于 1 的純色-
Show Loading Indicator(顯示加載指示器)分辨率和演示設置指定加載指示器是否顯示及顯示方式1. Don’t Show:不顯示加載指示條
2. Large:顯示大的加載指示條
3. Inversed Large:顯示大的加載指示條,顏色翻轉
4. Small:顯示小的加載指示條
5. Inversed Small:顯示小的加載指示條,顏色翻轉
Splash Image(啟動圖像設置)基礎設置--
Virtual Reality Splash Image啟動圖像設置虛擬現實的初始屏幕設置-
Show Splash Screen啟動圖像設置是否顯示啟動圖像,收費版本可修改,免費版本不能改-
Preview啟動圖像設置預覽啟動圖像-
Splash Style(啟動風格)啟動圖像設置-1. Dark on Light:暗到亮
2. Light on Dark:亮到暗
Animation(啟動圖像動畫效果)啟動圖像設置-1. Static:靜態不動
2. Dolly:由小變大
3. Custom:自定義
Draw Mode(繪制模式)啟動圖像設置-1. Unity Logo Below:Unity Logo 顯示在前
2. All Sequential:所有按順序
3. Logos:可添加 Logo 圖片按順序顯示
Overlay Opacity啟動圖像設置覆蓋不透明度-
Background Color啟動圖像設置背景顏色-
Blur Background Image啟動圖像設置是否模糊背景圖像-
Background Image啟動圖像設置背景圖像-
Alternate Portrait Image啟動圖像設置備選圖像-
Static Splash Image啟動圖像設置靜態啟動圖像-
Scaling(縮放比例)啟動圖像設置-1. Center:居中(僅縮小),圖像太大時縮小,否則以原始大小繪制
2. Scale to fit(填充):縮放圖像使較長尺寸適合屏幕,用黑色填充空白
3. Scale to fit(裁剪):縮放圖像使較短尺寸適合屏幕,裁剪較長維度

3.OtherSettings-渲染

設置項描述可選值及說明
Color Space(色彩空間)切換 Unity 中用于渲染的色彩空間1. Gamma(伽馬):紋理傾向于保存在此空間,但著色器采樣時基于伽馬值可能導致結果不準確
2. Linear(線性):效果相對較好,不是所有平臺都支持。支持平臺有 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。確定主流設備支持情況選擇,不支持自動退出
Vulkan一個跨平臺的 2D 和 3D 繪圖應用程序接口,是 OpenGL 的下一代版本,旨在提供更低的 CPU 開銷與更直接的 GPU 控制-
Auto Graphics API(自動圖形接口)控制圖形 API 接口的使用方式1. 勾選:Unity 自動嘗試使用對應圖形 API 接口,默認使用 Vulkan,不支持則退到 GLES3.2、GLES3.1 或 GLES3.0
2. 不勾選:可在列表中自行對使用的圖形 API 接口進行排序,設置使用優先級。下方副選項 ES3.1、ES3.1+AEP、ES3.2 用于配置最低 OpenGL ES 3.X 次要版本(Require ES3.1: 要求使用 ES3.1;Require ES3.1 + AEP: 要求使用 ES3.1 + AEP;Require ES3.2: 要求使用 ES3.2)。只有當 GLES2 不在列表中時,Unity 才會將額外的三個選項要求添加到 Android 應用清單中,若發布到 Google Play 應用商店,不受支持設備不會顯示該應用
Color Gamut(色域)添加或刪除 Android 平臺用于渲染的色域,色域定義設備可顯示的顏色范圍1. sRGB:默認且必需的色域,一般手機使用此色域即可
2. DisplayP3:當定位具有寬色域顯示的設備(如 PC 主機游戲)時,可利用完整顯示功能
Multithreaded Rendering(多線程渲染)將圖形 API 調用從 Unity 的主線程移動到單獨的工作線程,提升主線程 CPU 使用率較高的應用程序性能啟用此選項可實現;不啟用則不進行此操作
Static Batching(靜態批處理)將靜態物體合并處理 DC,提升性能啟用可實現合并處理;不啟用則不進行此操作
Dynamic Batching(動態批處理)動態合并 DC 提高性能,可編程渲染管線(SPR)處于活動狀態(啟用 URP 或 HDRP)時不起作用,使用 FairyGUI 時需開啟以優化 DC啟用可實現動態合并;不啟用則不進行此操作,且在特定情況(啟用 URP 或 HDRP)下無法使用
Compute Skinning(計算蒙皮)啟用 DX11/ES3 GPU 計算蒙皮,釋放 CPU 資源,對圖形接口版本要求較高(PC 上 DX11、移動設備 ES3)啟用可啟用計算蒙皮;不啟用則不進行此操作
Graphics Jobs (Experimental)(圖形作業)啟用后將渲染循環的圖形任務移到其它 CPU 內核上運行的工作線程,減少主線程時間啟用可實現任務轉移;不啟用則不進行此操作
Texture Compression Format(紋理壓縮格式)可在 ASTC、ETC2、ETC 之間選擇紋理壓縮格式可選擇 ASTC、ETC2、ETC 其中一種格式
Normal Map Encoding(法線地圖編碼)選擇 XYZ 或 DXT5nm 樣式設置法線映射編碼,影響法線貼圖的編碼方案和壓縮格式1. 選擇 XYZ 樣式
2. 選擇 DXT5nm 樣式:法線貼圖質量更高,但在著色器中解碼成本更高
Lightmap Encoding(光照貼圖編碼)選擇“正常質量”或“高質量”設置光照貼圖編碼,影響光照貼圖的編碼方案和壓縮格式1. 選擇“正常質量”
2. 選擇“高質量”
Lightmap Streaming(光照貼圖流)是否對光照貼圖使用 Mipmap 流式處理選擇啟用則使用;選擇不啟用則不使用
Streaming Priority(流優先級)設置 Mipmap 流式處理系統中所有光照貼圖的優先級,生成光照貼圖時應用于所有光照貼圖,正數表示更高優先級,范圍為 –128 到 127可設置具體數值(在 –128 到 127 之間的整數)
Frame Timing Stats(幀時序統計)啟用可收集 CPU 和 GPU 幀時間統計信息,需和攝像機上的動態分辨率設置(Camera 組件下的 Allow Dynamic Resolution 選項)結合使用,確定應用程序受 CPU 還是 GPU 限制啟用可收集統計信息;不啟用則不收集
OpenGL: Profiler GPU Recorders是否啟用 OpenGL 的探查 GPU 記錄器,在 OpenGL 上,探查 GPU 記錄器會禁用 GPU 探查器啟用則開啟記錄器并禁用 GPU 探查器;不啟用則不開啟記錄器
Virtual Texturing(虛擬紋理)在場景有很多高分辨率紋理時減少 GPU 內存使用量和紋理加載時間,將紋理拆分為瓦片,按需上傳到 GPU 內存,不兼容安卓設備啟用可實現虛擬紋理功能;不啟用則不進行此操作,且因不兼容安卓設備,安卓平臺無法使用
Shader Precision Model(著色器精度模型)控制著色器中使用的采樣器的默認精度-
360 Stereo Capture(360 度立體捕捉)Unity 是否可以捕獲立體 360 度全景圖像和視頻,不兼容 Android啟用則可進行捕捉操作;不啟用則不進行此操作,且因不兼容 Android,安卓平臺無法使用

4.OtherSettings-Vulkan設置和身份證明

設置項分類描述可選值及說明
SRGB Write Mode(SRGB 寫入模式)Vulkan設置允許呈現器在運行時切換 sRGB 寫入模式,可暫時關閉線性到 sRGB 寫入顏色轉換1. 啟用:可切換 sRGB 寫入模式,但不建議移動設備啟用,會增加 GPU 負擔
2. 不啟用:保持默認的 sRGB 寫入模式
Number of swapchain buffers(交換鏈緩沖區數量)Vulkan設置設置交換鏈緩沖區數量,與Vulkan渲染器配合使用,可解決移動平臺延遲問題1. 設為 2:雙緩沖
2. 設為 3:三重緩沖,一般保持為 3,不建議安卓設備使用雙緩沖,會產生負面影響
Acquire swapchain image late as possible(盡可能晚的獲取交換鏈圖像)Vulkan設置啟用后,Vulkan 延遲獲取后緩沖器,直到將幀渲染為屏幕外圖像,與雙緩沖結合可提高性能,但額外的 blit 會占用帶寬1. 啟用:延遲獲取后緩沖器,可能提高性能但有帶寬占用風險,不建議安卓設備修改
2. 不啟用:按常規方式獲取后緩沖器
Recycle command buffers(回收命令緩沖區)Vulkan設置決定 Unity 執行命令緩沖區后是回收還是釋放命令緩沖區1. 回收:執行后回收命令緩沖區
2. 釋放:執行后釋放命令緩沖區
Apply display rotation during rendering(在渲染期間應用顯示旋轉)Vulkan設置啟用可在顯示的本機方向上執行所有渲染,有性能優勢但有使用限制1. 啟用:在本機方向渲染,有性能優勢但有使用限制,不建議修改
2. 不啟用:按常規方式渲染
Override Default Package Name(是否覆蓋默認包名稱)身份證明用于在公司名和游戲名不是英文時,自行設置包名1. 勾選:可自行設置包名
2. 不勾選:使用默認包名
Package Name(軟件包名)身份證明應用程序的 ID,用于在設備和安卓應用商店中唯一標識應用格式為 com.公司名.產品名,只能包含字母數字和下劃線,每段都必須以字母開頭
Version(版本號)身份證明標識應用程序包的迭代格式為數字.數字.數字……,如 1.0、4.3.2、1.2.1 等
Bundle Version Code(內部版本號)身份證明用于確定版本新舊,數字越大版本越新,不顯示給用戶為整數,每次發布新版本可讓數字加一
Minimum API Level(最低API級別)身份證明決定應用程序運行所需的最低 API 級別,SDK 版本低于該設置的設備無法安裝應用設置具體的 API 級別,如 Android 系統的 API 版本號
Target API Level(目標API級別)身份證明指定應用的目標 API 級別,通知 Android 系統已針對目標版本測試,應用也可在較低版本運行(取決于 Minimum API Level)設置具體的 API 級別,如 Android 系統的 API 版本號

5.OtherSettings-配置(Configuration)

設置項描述可選值及說明
Scripting Backend(腳本后端)決定Unity如何在項目中編譯和執行C#代碼1. Mono:將C#編譯為.Net公共中間語言CIL,并使用公共語言運行時執行中間語言
2. IL2CPP:將C#編譯為CIL,再將CIL轉換為C++,最后將C++編譯為本機代碼
Api Compatibility Level(API兼容性級別)決定可以在項目中使用的.Net API,影響代碼和第三方庫的兼容性1…Net Standard 2.1:和.Net Standard 2.1兼容,生成較小版本,具有完整跨平臺支持
2…Net Framework:和.Net Framework兼容(包含.Net Standard 2.1所有內容),包含更多API支持,但生成包更大。使用C#高級功能報錯時可嘗試切換,有替代方案時建議用.Net Standard 2.1以減小包體
C++ Compiler Configuration(C++編譯器配置)只有將Scripting Backend設置為IL2CPP才能使用該選項1. Debug(調試模式):關閉所有優化,代碼生成速度快但運行慢,用于調試
2. Release(發布模式):對代碼進行優化,編譯后代碼運行快、二進制文件小,但編譯時間長
3. Master(大師模式):實現所有可能的優化,發布時間比發布模式長,發布最終版本時可使用
Use incremental GC(使用增量GC)啟用后可使用增量垃圾回收器,將GC分散到多個幀上執行,降低一幀中GC造成的卡頓啟用或不啟用
Assembly Version Validation(程序集版本驗證)Mono是否驗證強名稱程序集中的類型,強名稱程序集為程序集創建唯一標識,防止程序集沖突驗證或不驗證
Mute Other Audio Sources(將其它音頻源靜音)希望在運行Unity應用程序時停止后臺運行應用程序中的音頻,可啟用該選項,否則后臺音頻和Unity音頻一起播放啟用或不啟用
Target Architectures(目標體系結構)允許應用程序運行的CPU,64位環境運行安卓應用有性能優勢,64位應用可處理超4GB內存空間,Mono模式只能選ARMv7,IL2CPP模式可選更多1. ARMv7:32位的ARM
2. ARM64:64位的ARM
3. x86(Chrome OS):32位
4. x86-64(Chrome OS):64位
Split APKs by target architecture(按目標架構拆分APK)啟用后,為目標體系結構中選擇的每個CPU架構創建單獨的APK,在Google Play中根據設備情況下載對應版本APK,可減小apk大小,但主要針對Google Play,國內產品幾乎不使用啟用或不啟用
Target Devices(目標設備)指定允許運行APK的目標設備1. All Devices(所有設備):允許apk在所有Android和Chrome OS設備上運行
2. Phones,Tablets,and TV Devices Only(手機、平板、電視設備):允許apk在Android手機、平板電腦、電視上運行,不能在Chrome OS設備上運行
3. Chrome OS Devices Only(Chrome OS設備):允許apk在Chrome OS設備上運行,不能在Android手機、平板、電視上運行
Install Location(安裝位置)指定設備上應用程序的安裝位置1. Automatic(自動):由操作系統決定,用戶可移動安裝位置
2. Prefer External(首選外部):先嘗試安裝到外部存儲(SD卡),不行則安裝到手機存儲空間
3. Force Internal(強制內部):安裝到手機存儲空間,用戶無法移動到外部存儲安裝
Internet Access(互聯網接入)選擇是否始終將網絡權限添加到Android清單(即使未使用任何網路API)1. Auto:僅當使用網絡API時添加互聯網訪問權限
2. Require:始終添加互聯網訪問權限
Write Permission(寫入權限)是否啟用對外部存儲(SD卡)的寫入訪問權限,并向Android應用清單添加相應權限1. Internal(內部):僅授予對內部存儲的寫入權限
2. External(外置SD卡):啟用對外部存儲的寫入權限
Filter Touches When Obscured(遮擋時過濾觸摸)啟用后丟棄在另一個可見窗口覆蓋Unity應用程序時收到的觸摸(觸屏事件),防止竊聽劫持啟用或不啟用
Sustained Performance Mode(持續性能模式)啟用此選項可在較長時間段內設置可預測且一致的設備性能級別,無需熱限制,但整體性能可能降低啟用或不啟用
Low Accuracy Location(低精度定位)啟用后改為低精度值與Android位置API配合使用啟用或不啟用
Chrome OS Input Emulation(Chrome OS輸入仿真)Chrome OS操作系統默認將鼠標和觸摸板輸入事件轉為觸屏輸入事件,取消可禁用此默認行為啟用或不啟用
Android TV Compatibility(安卓電視兼容性)啟用后應用程序標記為兼容Android TV啟用或不啟用
Android Game(安卓游戲)啟用后將輸出的apk標記為游戲而非常規應用啟用或不啟用
Android Gamepad Support Level(安卓游戲輸入板支持等級)選擇玩游戲時支持的輸入方式可根據需求選擇相應等級
Warn about App Bundle size(警告應用程序包的大小)只有在Build Settings中勾選了Build App Bundle(Google Play)才有用,應用程序包大小超過閾值時收到警告可設置具體的閾值大小
Active Input Handling(活動輸入處理)選擇處理來自用戶輸入的方式1. Input Manager:老的輸入系統,Input相關
2. Input System Package:新輸入系統
3. Both:同時使用,在Unity進階之InputSystem中有詳細講解

6.OtherSettings-ScriptCompilation

設置項分類描述可選值及說明
Scripting Define Symbols(腳本定義符號)腳本編譯設置自定義編譯標志,使用第三方內容時可能在此添加腳本符號,Unity 有內置腳本符號,可配合多路測試 #if 使用,也可自定義可添加自定義腳本符號,利用內置腳本符號(如 Lua 熱更相關、FairyGUI 相關等),通過 #if#elif#else#endif 控制代碼邏輯
Additional Compiler Arguments(其它編譯器參數)腳本編譯向此列表添加條目以將其他參數傳遞給 Roslyn 編譯器1. 按“+”按鈕創建新條目添加參數
2. 按“-”按鈕刪除條目
3. 單擊“應用”按鈕在將來編譯中包括其他參數
4. 單擊“還原”按鈕將列表重置為最近應用的狀態
Suppress Common Warnings(禁止顯示常見警告)腳本編譯禁用此設置可顯示 C# 警告1. 啟用:禁止顯示常見 C# 警告,如 CS0169(從不使用私有字段)、CS0649(未初始化的私有或內部字段聲明)
2. 禁用:顯示 C# 警告
Allow ‘unsafe’ Code(允許使用“不安全”代碼)腳本編譯啟用對在預定義程序集中編譯“unsafe”C# 代碼的支持1. 啟用:支持編譯“unsafe”C# 代碼,使用指針等操作需勾選此項
2. 不啟用:不支持編譯“unsafe”C# 代碼
Use Deterministic Compilation(使用確定性編譯)腳本編譯啟用此設置后,編譯的程序集在每次編譯時都是完全相同的,可用于確定二進制文件是否從受信任的源編譯1. 啟用:使用確定性編譯,編譯的程序集每次相同
2. 禁用:防止使用 -確定性 C# 標志進行編譯
Enable Roslyn Analyzers(啟用羅斯林分析器)腳本編譯禁用此設置可編譯用戶編寫的腳本,而無需項目中可能存在的 Roslyn 分析器 DLL(Roslyn 是微軟的.Net 開源編譯器,提供豐富的代碼分析 API)1. 啟用:使用 Roslyn 分析器分析腳本
2. 禁用:不使用 Roslyn 分析器,直接編譯用戶編寫的腳本
unsafe 關鍵詞(基本概念)C# 語言特性默認 C# 不支持指針,unsafe 關鍵詞用于表示不安全的上下文,在 C# 中進行指針相關操作必須使用該關鍵詞,不安全代碼在 CLR 中是指無法驗證的代碼,但不一定危險,使用時需確保無安全風險和指針錯誤在 C# 中使用指針等操作需使用 unsafe 關鍵詞,代碼在 CLR 中無法驗證安全性,僅在完全信任的程序集中執行不安全代碼
unsafe 關鍵詞(基本使用)C# 語言特性在 Unity 中正常使用 unsafe 關鍵詞編寫程序,需在 Unity 的 Player Settings 中的 Other Settings 中將 Allow ‘unsafe’ Code 選項勾選上,可用于修飾函數、代碼塊、成員變量、類1. 勾選 Allow ‘unsafe’ Code 選項后可使用 unsafe 關鍵詞
2. 可修飾函數、代碼塊、成員變量、類
unsafe 關鍵詞(總結)C# 語言特性unsafe 的使用能讓在 C# 中使用指針,但存在安全風險和穩定性風險,無特殊需求盡量避免使用盡量避免在 C# 中使用 unsafe 關鍵詞,以減少安全和穩定性風險

7.OtherSettings-優化和堆棧跟蹤

設置項分類描述可選值及說明
Prebake Collision Meshes(預烘焙碰撞到網格)優化在構建時將碰撞數據添加到網格啟用:在構建時添加碰撞數據到網格
不啟用:不進行此操作
Keep Loaded Shaders Alive(保持加載的著色器的活動狀態)優化啟動后,著色器不能卸載,避免卸載后重復加載造成性能開銷和卡頓啟用:不能卸載著色器
不啟用:可以卸載著色器
Preloaded Assets(預裝資源)優化設置啟動時加載的資源數組,將想要預加載的內容拖入框中可將需要預加載的資源拖入設置框中
Strip Engine Code(剝離引擎代碼)優化選擇IL2CPP模式才會出現的字段,啟用可刪除Unity引擎功能中沒有使用的代碼,減小包體大小啟用:刪除未使用的引擎代碼,減小包體
不啟用:不進行代碼剝離
Managed Stripping Level(管理剝離水平)優化選擇Unity如何剝離未使用的C#代碼,發布時自動去除未使用代碼,可能意外刪除需要的代碼1. Disabled:不剝離,只有在Mono模式下才能選擇
2. Minimal:最小剝離,Unity 只會搜索Unity引擎未使用的.Net類庫,不刪除用戶編寫代碼,IL2CPP模式下默認
3. Low:低級剝離,處理Unity相關,玩家自己編寫的代碼也會被剝離,盡量減小意外剝離
4. Medium:中級剝離,比Low更多一些剝離
5. High:高級剝離,優先考慮打包大小,最大限度剝離代碼,可配合link.xml手動拒絕剝離,或使用[Preserve]特性(在不希望被剝離的函數前加該特性)
Enable Internal Profiler(啟用內部探查器)優化已棄用的功能,用于從Android SDK的設備中獲取profiler數據adblogcat測試項目時輸出,僅在開發版本中可用該功能已棄用
Vertex Compression(頂點壓縮)優化選擇要設置的通道,以便在頂點壓縮方法下壓縮網格,減少內存中網格數據的大小,提高CPU性能選擇相應的通道進行頂點壓縮設置
Optimize Mesh Data(優化網格數據)優化啟用后,構建時會從使用的網格中剝離未使用的頂點屬性,減少網格數量,減小包體大小,減小加載時間和運行時內存使用,但運行時不能更改材質或著色器相關設置啟用:構建時剝離未使用的頂點屬性
不啟用:不進行此操作,運行時可自由更改材質或著色器設置
Texture MipMap Stripping(貼圖紋理剝離)優化啟用后會啟用紋理貼圖剝離,在構建時會從紋理中剝離沒有使用的紋理貼圖,根據發布平臺的質量設置確定哪些貼圖用不到,mipmap生成的多分辨率圖也會被剝離啟用:進行紋理貼圖剝離
不啟用:不進行此操作
StackTrace(堆棧跟蹤)優化選擇在特定的上下文中允許的日志記錄類型和日志記錄的方式日志記錄類型:
1. Error:錯誤信息
2. Assert:斷言(用于檢測非法情況的)信息
3. Warning:警告信息
4. Log:打印日志信息
5. Exception:異常信息
日志記錄方式:
1. None:不記錄
2. ScriptOnly:只在運行腳本時記錄信息
3. Full:一直記錄
Clamp BlendShapes(Deprecated)(鉗制混合形狀權重的范圍)優化啟用骨骼蒙皮動畫中鉗制混合形狀權重的范圍,已棄用該功能已棄用

8.PublishingSettings-KeystoreManager

設置項分類描述可選值及說明
Android 中的簽名發布設置準備知識Android 要求所有已安裝應用程序使用數字證書做數字簽名,數字證書私鑰由開發者持有,用于標示應用程序作者并建立信任關系,證書可自制,未正確簽名應用無法安裝或運行數字證書私鑰由開發者持有,可使用自制簽名證書,無正確簽名應用在 Android 系統(模擬器或真實設備)無法安裝運行
Android 應用程序清單(AndroidManifest.xml)發布設置準備知識Android 應用程序工程中的 xml 文件,用于聲明應用程序組件,確定用戶權限、最低 API 級別,聲明硬件和軟件特性等,引入 Android 第三方 SDK 或與 Android 交互時需編輯,無需求可忽略聲明應用程序組件、確定用戶權限(如網絡、通訊錄、信息讀取等)、聲明最低 API 級別、聲明硬件和軟件特性(如攝像頭、藍牙、多點觸碰等)
Gradle發布設置準備知識一個自動化構建開源工具,基于 JVM,主要面向 Java 應用,也支持其他語言,可用于 Android 項目構建,使項目更簡潔,在 Unity 中用于打包安卓應用程序,Android Studio 也使用它打包基于 JVM 的自動化構建工具,用于 Android 項目構建,幫助打包安卓應用程序
ProGuard發布設置準備知識一個壓縮、優化和混淆 Java 字節碼文件的免費工具,可刪除無用內容、優化字節碼、重命名類等,常用于 Android 開發混淆項目,增加反編譯難度,Unity 發布安卓應用默認使用壓縮、優化和混淆 Java 字節碼文件,刪除無用類、字段、方法和屬性,刪除注釋,重命名類、字段等
R8發布設置準備知識相對 ProGuard 較新的 Android 混淆編譯器,可減小應用大小,Android Gradle 3.4.0 或更高版本構建項目不再使用 ProGuard 優化,Android Sutdio 3.3 版本開始用它做代碼壓縮器,比 ProGuard 縮減代碼更快、輸出大小更優,Unity 發布安卓應用可選擇使用較新的 Android 混淆編譯器,減小應用大小,在特定版本 Android 構建項目中替代 ProGuard,縮減代碼更快、輸出更優
密鑰管理器發布設置可通過密鑰管理器創建、配置和加載密鑰和密鑰庫,可在 Keystore Manager 窗口或 Publishing Settings 發布設置中加載現有密鑰庫和密鑰-
下拉菜單(密鑰管理器)發布設置在該下拉菜單選擇創建新的密鑰庫或加載現有的密鑰庫1. Create New:創建新的密鑰庫
- Anywhere:打開項目文件夾根目錄下的文件資源管理器,是 Unity 存儲密鑰庫的默認位置
- In Dedicated Location:將密鑰庫文件保存到計算機中的另一個目錄中,為協同開發方便,建議保存在項目文件夾下
2. Select Existing:選擇現有密鑰庫,可指定加載現有密鑰庫
Password(密鑰庫的密碼)發布設置密鑰庫的密碼設置密鑰庫密碼
Confirm password(創建密鑰庫時需要重復一次密碼)發布設置創建密鑰庫時重復輸入密碼以確認重復輸入密碼與 Password 一致
Existing Keys(現有密鑰)發布設置界面中包含當前密鑰庫包含的密鑰的只讀列表顯示當前密鑰庫中密鑰的只讀信息
New Key Values(新鍵值)發布設置可在此處在密鑰庫中添加密鑰1. Alias:密鑰的標識名字,一般分不同廠商,如 huawei、xiaomi
2. Password:密鑰的密碼
3. Confirm password:密鑰的確認密碼,必須和密碼相同
4. Validity(years):有效期(年),默認有效期為 50 年,一般設置較大值,可理解為管理應用程序的有效時間
5. First and Last Name:名字和姓氏
6. Organizational Unit:所在企業中的部門
7. Organization:組織,管理應用程序的組織,一般為公司名
8. City Or Locality:個人所在的城市或地區
9. State or Province:個人所在的州或省
10. Country Code(XX):個人的國家代碼,中國的國家代碼為 86

9.PublishingSettings-其他

項目密鑰庫
項目密鑰庫是用來保存簽名密鑰,以保障應用程序安全性的容器。若要加載并使用現有的密鑰庫,需進行以下操作:

  1. 啟動 Custom Keystore。
  2. 在 Select 下拉列表里選 Browse,從文件系統挑選密鑰庫。
  3. 輸入密鑰庫密碼。

相關設置說明

設置項描述
Custom Keystore啟用后,能夠指定加載和使用現有的密鑰庫
Select啟用 Custom Keystore 后,可通過此按鈕選擇要使用的密鑰庫
Path顯示所選密鑰庫所在的路徑
Password輸入用于加載所選密鑰庫的密碼
Project Key加載密鑰庫后,Unity 會加載庫中的全部密鑰。可在此設置從該密鑰庫中選擇哪一個密鑰作為項目的活動密鑰
Alias選擇用于打開項目的密鑰
Password(項目密鑰密碼)輸入所選密鑰的密碼

構建相關
默認情況下,Unity 采用安裝時提供的清單文件、Gradle 模板和文件來構建應用程序。若要進行自定義,需啟用 Build 下方的復選框,此時文件會出現在復選框下方,接著打開新文件進行修改,保存修改后的文件,Unity 下次構建應用程序時就會自動使用這些文件。

設置項描述
Custom Main Manifest這是一個 xml 文件,可在此決定權限設置,還能設置是否啟用某些安卓功能等
Custom Launcher Manifest同樣是 xml 文件,可在此決定應用程序啟動前的外觀和行為
Custom Main Gradle TemplateGradle 是一個構建系統,能自動執行許多構建過程并避免常見的構建錯誤,Unity 對所有 Android 版本都使用 Gradle
Custom Launcher Gradle Template這是一個 gradle 文件,包含了構建 Android 應用程序的相關說明
Custom Base Gradle Template是一個 gradle 文件,包含了所有其他模板和 Gradle 項目間的共享配置
Custom Gradle Properties Template屬于屬性文件,包含了 Gradle 生成環境的配置設置
Custom Proguard File是一個 txt 文件,包含了縮小過程的配置設置

代碼混淆和縮小相關
Minify 是對應用程序代碼進行縮減、混淆和優化的過程,能減小代碼大小并增加反編譯難度。使用 Minify 設置可確定 Unity 何時以及如何將縮小應用于構建。不過使用該功能會延長發布時間,還會使調試變得復雜,所以通常在最終發布時才使用,平時發布測試應用時無需開啟。

設置項描述
Use R8默認情況下,Unity 使用 Proguard 進行縮小。啟用此復選框可改用 R8
Release若希望 Unity 在發布構建時縮小應用程序的代碼,需啟用此復選框
Debug若希望 Unity 在調試構建時縮小應用程序的代碼,需啟用此復選框

拆分應用程序二進制文件
啟用 Split Application Binary 選項,可將輸出包拆分為主包 (APK) 和擴展包 (OBB) 包。若要發布大于 100 MB 的應用程序,Google Play 應用商店要求使用此功能。

三、交互項目創建

1.Unity調用安卓

操作類型方法調用格式描述
成員變量獲取androidJavaObject.Get<變量類型>("變量名")用于獲取 Android Java 對象的成員變量
成員變量賦值androidJavaObject.Set<變量類型>("變量名", 值)用于給 Android Java 對象的成員變量賦值
靜態變量獲取androidJavaObject.GetStatic<變量類型>("變量名")用于獲取 Android Java 對象的靜態變量
靜態變量賦值androidJavaObject.SetStatic<變量類型>("變量名", 值)用于給 Android Java 對象的靜態變量賦值
無返回值成員函數調用androidJavaObject.Call("函數名", 參數)調用 Android Java 對象的無返回值成員函數
有返回值成員函數調用androidJavaObject.Call<返回值類型>("函數名", 參數)調用 Android Java 對象的有返回值成員函數
無返回值靜態函數調用androidJavaObject.CallStatic("函數名", 參數)調用 Android Java 對象的無返回值靜態函數
有返回值靜態函數調用androidJavaObject.CallStatic<返回值類型>("函數名", 參數)調用 Android Java 對象的有返回值靜態函數

代碼示例

androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");btnOpenAndroidActivity.onClick.AddListener((() =>{androidJavaObject.Call("OpenActivity");}));

2.安卓調用Unity

Android調用Unity規則

  • 需要寫在繼承MonoBehaviour的腳本中。
  • 需要掛載在場景中處于激活狀態的GameObject上。
  • 交互時,在Android端調用API:

調用方法UnityPlayer.UnitySendMessage("對象名", "函數名", "參數信息")
注意:該API中的參數只能是String類型或者為null

3.Android開發的必備原理

(1)Android應用程序的基本構成
Android SDK:為開發Android應用程序提供了各種各樣的API和工具,是進行Android開發的基礎支撐,它包含了豐富的開發資源。
編程語言:主要使用Java或者Kotlin語言進行開發,這兩種語言都提供了大量豐富的庫和API,開發者可以利用這些來實現應用的各種功能。
XML配置文件:在Android應用程序中,XML用于定義UI布局、樣式以及資源信息等。它承擔著界面和資源相關的配置工作,使得開發者能夠設計出不同的用戶界面。

  • 應用程序組件:Android應用程序由以下四種組件組成:
    • Activity(活動):主要用于實現用戶界面,代表著一個屏幕或窗口,其中包含了各種UI組件,如按鈕、文本、輸入框等,是用戶與應用進行交互的主要界面載體。
    • Service(服務):是一種可以在后臺執行長時間運行操作的組件,沒有用戶界面,通常用于處理和交互無關的邏輯,例如上傳、下載、音樂播放等后臺任務。
    • Broadcast Receiver(廣播接收器):主要負責接收系統或者其他應用程序發出的廣播消息。這些消息可以來自系統事件,比如網絡連接變化、設備啟動等,也可以來自其它應用程序。
    • Content Provider(內容提供程序):用于管理應用程序數據,既可以讓其它應用程序或系統訪問本應用中的數據,也能讓本應用訪問其它應用或系統的數據,例如用于存儲應用程序的圖片、音頻、視頻等數據。

在開發Android應用程序時,主要是編寫基于這四種組件的邏輯。日常開發中,更多的是利用Android SDK中的API開發Activity活動組件,類似于游戲中UI界面邏輯開發。只有在有其他后臺或者拓展功能需求時,才會使用其它三種組件。

(2)AndroidManifest.xml文件的作用
AndroidManifest.xml是Android應用程序的應用清單文件,每個應用程序都必須包含一個,并且文件名必須是AndroidManifest.xml。該文件中包含了應用程序的配置信息,Android系統會根據這些配置來運行應用程序。

以下是該文件中包含的重要信息:
應用程序組件信息:包含應用程序的四大組件(Activity、Service、Broadcast Receiver、Content Provider)的相關內容。
應用程序權限:如存儲權限、互聯網訪問權限等等,通過這些權限聲明,應用才能在系統中獲得相應的操作許可。
應用程序元數據:包括程序名稱、版本號、圖標、包名等等,這些信息用于標識和描述應用程序。
應用程序啟動信息:指定默認啟動哪一個Activity,決定了應用啟動時呈現給用戶的第一個界面。

(3)常用標簽作用
manifest標簽:作為文件的根標簽,主要包含包名、版本號等信息,是整個應用配置的基礎。
uses-permission標簽:用于聲明應用程序所需的權限,例如存儲權限、網絡訪問權限等,明確應用在系統中可以執行的操作。
application標簽:應用程序的各組件都包含在其中,并且還可以配置一些圖標、文本、樣式等信息,是應用組件的容器。
activity標簽:用于描述Activity組件的具體信息,包括其屬性和相關配置。
meta-data標簽:為Activity提供元數據,這些數據可以通過API獲取,為Activity添加額外的信息。
intent-filter標簽:為組件聲明意圖(intent),其中包含action(意圖類型)和category(意圖類別)兩個子標簽,用于定義組件的意圖匹配規則,決定組件在何種情況下被激活。

4.交互項目創建

  1. Unity項目:創建項目后切換到Android平臺,設置包名和Android版本。

  2. Android Studio項目:選擇Phone and Tablet,創建Empty Activity項目。確保包名和Minimum SDK版本與Unity項目一致,若版本缺失,在Android Studio中下載。創建完成后,刪除工程里兩個Test項目和res下的無用資源。

  3. build.gradle文件:在Android Studio的Project頁簽切換到Project視圖,展開app頁簽,打開build.gradle文件。將 id 'com.android.application' 改為 id 'com.android.library',刪除 defaultConfig 中的 applicationId 項,點擊右上角“Sync Now”同步。

  4. 導入classes.jar包:從 Unity安裝目錄\Data\PlaybackEngines\AndroidPlayer\Variations\mono(il2cpp)\Release\Classes 路徑拷貝包到Android Studio的 app\libs 下,選中包右鍵點擊“Add As Library”。

  5. 導入UnityPlayerActivity腳本:將 Unity安裝目錄/Data/PlaybackEngines/AndroidPlayer/Source/… 路徑下的文件夾拷貝到Android Studio的 app/src/main/java 中。

  6. 修改MainActivity腳本:讓其繼承 UnityPlayerActivity,注釋 onCreate 函數里的 setContentView 代碼。
    在這里插入圖片描述

  7. 修改AndroidManifest.xml配置文件:刪除 application 中的無用內容,在 activity 里添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
    在這里插入圖片描述

8.選中 MainActivity 腳本,通過工具欄“Build” -> “Make Moudle …” 生成Unity用的aar包。若打包時出現下載提示,等待下載完成即可構建成功。
9.將生成的aar包導入Unity。

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

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

相關文章

低配電腦暢玩《怪物獵人:荒野》,ToDesk云電腦優化從30幀到144幀?

《怪物獵人&#xff1a;荒野&#xff08;Monster Hunter Wilds&#xff09;》自2025年正式發售以來已取得相當亮眼的成績&#xff0c;僅用三天時間便輕松突破800萬銷量&#xff0c;目前順利蟬聯周榜冠軍&#xff1b;憑借著開放世界的宏大場景和豐富的狩獵玩法&#xff0c;該游戲…

Flink基礎簡介和安裝部署

文章目錄 一、Flink基礎簡介1、什么是Flink2、Flink流處理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上傳Flink安裝包②啟動交互窗口③提交任務測試④訪問WebUI頁面查看④退出停止集群 一、Flink基礎簡介 1、什么是Flink Flink是?個分布式&#…

【2025】基于ssm+jsp的二手商城系統設計與實現(源碼、萬字文檔、圖文修改、調試答疑)

基于SSMJSP的二手商城系統設計與實現系統功能結構圖&#xff1a; 課題背景 隨著經濟的發展和人們生活水平的提高&#xff0c;二手交易市場日益活躍。人們對于閑置物品的處理方式逐漸從傳統的廢品回收轉變為通過二手交易平臺進行再利用。這種交易模式不僅能夠幫助用戶節省開支&a…

幻影星空亮相CAAPA北京展 引領文旅產業升級轉型

3月19日&#xff0c;中國游藝機游樂園協會&#xff08;CAAPA&#xff09;主辦的2025中國&#xff08;北京&#xff09;國際游樂設施設備博覽會及2025北京國際旅游休閑娛樂產業博覽會在北京盛大啟幕。在這場行業盛會上&#xff0c;廣州卓遠旗下的“幻影星空”品牌以創新性的虛擬…

銀河麒麟桌面版包管理器(二)

以下內容摘自《銀河麒麟操作系統進階應用》一書 APT包管理器 APT是Debian及其派生系統的包管理器&#xff0c;構建在dpkg之上&#xff0c;以其強大的依賴性處理能力和豐富的軟件倉庫而聞名。APT具有自動解決依賴關系、提供易于使用的命令行工具&#xff08;如apt-get、apt-ca…

【STM32實物】基于STM32的掃地機器人/小車控制系統設計

基于STM32的掃地機器人/小車控制系統設計 演示視頻: 基于STM32的掃地機器人小車控制系統設計 簡介:掃地機器人系統采用分層結構設計,主要包括底層硬件控制層、中間數據處理層和上層用戶交互層。底層硬件控制層負責對各個硬件模塊進行控制和數據采集,中間數據處理層負責對采…

STM32收發數據包中間件——ProtoFlow,更方便的打包解包助手

引言 在嵌入式開發中&#xff0c;數據包封裝是不可或缺的一環。手動編寫協議不僅耗時&#xff0c;還容易出錯。ProtoFlow 的出現&#xff0c;就是為了讓數據包封裝變得簡單、高效、可靠。它不僅占用資源少&#xff0c;還能適配多種場景&#xff0c;是你項目的理想助手。 項目地…

Xcode16.1使用MonkeyDev運行Tiktok報錯分析

問題1&#xff1a; Build input files cannot be found: /usr/lib/libc.dylib, /usr/lib/libstdc.dylib. Did you forget to declare these files as outputs of any script phases or custom build rules which produce them? 解決辦法&#xff1a;在TARGETS的dylib中的Bui…

R語言交互項-formula

R語言交互項-formula 交互項的模型交互項的幾種情形連續變量和連續變量連續變量和分類變量分類變量和分類變量總結交互項的模型 統計中的交互和相關是完全不同的兩個概念,交互項是指兩個或者多個變量對因變量的協同效應,關注變量對因變量的聯合影響,比如變量X對Y的影響是否因…

圖解AUTOSAR_SWS_IPDUMultiplexer

AUTOSAR IPDUMultiplexer模塊詳解 PDU復用器模塊架構與實現分析 目錄 1. IPDU Multiplexer概述2. 模塊配置模型 2.1 配置結構概述2.2 配置類詳解2.3 配置關系說明3. 架構設計 3.1 模塊位置與接口3.2 內部組件結構3.3 接口交互模式4. 操作序列 4.1 PDU傳輸流程4.2 PDU傳輸流程詳…

手機怎么換網絡IP有什么用?操作指南與場景應用?

在數字化時代&#xff0c;手機已經成為我們日常生活中不可或缺的一部分&#xff0c;無論是工作、學習還是娛樂&#xff0c;手機都扮演著至關重要的角色。而在手機的使用過程中&#xff0c;網絡IP地址作為設備在互聯網上的唯一標識符&#xff0c;其重要性和作用不容忽視。本文將…

CH32V208GBU6沁恒協議棧BUG:在主機Write的同一包notify會造成主機一直Write不成功

從事嵌入式單片機的工作算是符合我個人興趣愛好的,當面對一個新的芯片我即想把芯片盡快搞懂完成項目賺錢,也想著能夠把自己遇到的坑和注意事項記錄下來,即方便自己后面查閱也可以分享給大家,這是一種沖動,但是這個或許并不是原廠希望的,盡管這樣有可能會犧牲一些時間也有哪天原…

unsloth微調QwQ32B(4bit)

unsloth微調QwQ32B(4bit) GPU: 3090 24G unsloth安裝部署 pip 安裝 pip install unsloth --index https://pypi.mirrors.usrc.edu.cn/simplesource /etc/network_turbopip install --force-reinstall --no-cache-dir --no-deps githttps://github.com/unslothai/unsloth.git?…

JavaScript案例0322

以下是一些涵蓋不同高級JavaScript概念和應用的案例&#xff0c;每個案例都有詳細解釋&#xff1a; 案例1&#xff1a;實現 Promise/A 規范的手寫 Promise class MyPromise {constructor(executor) {this.state pending;this.value undefined;this.reason undefined;this.o…

Dify 0.15.3 輸入變量無法被重新賦值問題-解決方法

目錄 一、問題描述 二、解決方法 2.1 原因 2.2 修改源碼 2.3 重新打包 dify-api 鏡像 2.4 修改 docker-compose.yaml 文件 2.5 重啟啟動鏡像 一、問題描述 Dify 0.15.3 是一個比較穩定的版本&#xff0c;Dify 1.0 是一個大版本更新&#xff0c;目前還有很多 Bug。但是&a…

SQL Server查詢計劃操作符(7.3)——查詢計劃相關操作符(11)

7.3. 查詢計劃相關操作符 98&#xff09;Table Scan&#xff1a;該操作符從查詢計劃參數列確定的表中獲取所有數據行。如果其參數列中出現WHERE:()謂詞&#xff0c;則只返回滿足該謂詞的數據行。該操作符為邏輯操作符和物理操作符。該操作符具體如圖7.3-98節點1所示。 圖 7.3-…

數據庫練習2

目錄 1.向heros表中新增一列信息&#xff0c;添加一些約束&#xff0c;并嘗試查詢一些信息 2.課堂代碼練習 插入語句 INSERT INTO 刪除語句DELETE和TRUNCATE 更新語句UPDATE和replace 查詢語句SELECT 條件查詢 select語句中的特殊情況 ???查詢排序 order by 分組查詢…

Java架構師成長之路

概述 本教程主要從6個方面&#xff0c;全面講解Java技術棧的知識。 1.性能調優 深入理解MySQL底層原理、索引邏輯&#xff0c;數據結構與算法。使用Explain進行優化分析MVCC原理剖析日志機制解析 2.框架源碼 掌握Spring底層原理帶你手寫一個Spring解析IOC、AOP源碼、以及事…

資金管理策略思路

詳細描述了完整交易策略的實現細節&#xff0c;主要包括輸入參數、變量定義、趨勢判斷、入場與出場條件、止損與止盈設置等多個方面。 輸入參數&#xff08;Input&#xff09;&#xff1a; EntryFrL (.6)&#xff1a;多頭入場的前一日波動范圍的倍數。 EntryFrS (.3)&#xff1…

k8s--集群內的pod調用集群外的服務

關于如何讓同一個局域網內的Kubernetes服務的Pod訪問同一局域網中的電腦上的服務。 可能的解決方案包括使用ClusterIP、NodePort、Headless Service、HostNetwork、ExternalIPs&#xff0c;或者直接使用Pod網絡。每種方法都有不同的適用場景&#xff0c;需要逐一分析。 例如&…