LV. 15
GP 536

【心得】Android&Ios 開發經驗&注意事項

樓主 DirtySoul licexicel
GP51 BP-
最近做的APP終於上架了,
就整理一下遇到的問題分享給大家,
希望後人不要走同樣的彎路。
有問題都可以問,但是請先Google,
Stackoverflow & unity forum & github issue,
這裡幾乎都有答案。
-----
成品:
楓葉筆記本
Android 連結
Ios 連結
-----
開發環境
系統:WIN11
Unity: 2019.4.f1~2019.4.23f~2021.3.13f1
-----
工具
1. Firebase 7.1.0 -> 10.1.0
2. TMPro (UPM中下載)
3.Localization (UPM中下載)
4.Unity In App Purchase(IAP)
5.Google Admobs 7.2.0
-----
注意事項
1.一定要做好版控
現在內建的collab改成Plastic SCM了,還算好用。
當然整個專案資料夾備份也是可以的。
很多時候都是插件更新時掛掉,然後都要重弄。

2.UI的Text不要用Best Fit
Best Fit 的作用在於找出文字的最佳大小。
Unity本身的文字渲染很吃效能,
尤其是手機的性能本來就沒有PC好,實機會卡死。

請使用TMP,這是Unity的終極文字解決方案,
字體大小請用實機去測試,
測試好了之後給一個固定值就好。
如果需要適配不同螢幕大小,
在設定裡給使用者自己調,
根據你給的預設讓使用者可以調整一點點就好。

3.善用Package Manager
2019以後的版本都支援這個,
裝新的插件最好透過這裡,
可以管理更新&移除。

4.除錯
個人覺得最常遇到的就是null reference,
請檢查好你場景的物件有沒有掛上去,
或者善用 try catch 針對特殊情況去做例外檢查。

5.Method 64K Limit & 支援版本
方法數爆炸了,
最低版本請支援Android 5.0(API 21)以上就可以了。

Android都會要求Target API要最新的,
所以請從Unity Hub下載最新的SDK。

6.Project Setting的一些細節
6-A Player設定
Company Name & Product Name 一定要設定
Version 版本自己設,這算是給使用者看

6-B Identification設定
打開Other Setting -> Identification
會顯示你的應用名稱
com.companyName.ProductName
這就是你的應用程式的名字
往下的Bundle Version Code 很重要!
這是給開發者看的版本,
每次要上傳打包新版的時候都要+1

6-C Configuration設定
這裡需要改成IL2CPP,
反正都要符合規範就對了。
(這會讓建置時間變久)
Target Architecture 分不分問題好像不大

7.Android Logcat 看實機log
請透過Package Manager去安裝,
手機插上,開啟開發人員模式-> USB偵錯
Build上去會自動偵測。

8.Build Setting
上方場景記得確認一下,
也許會發生有些場景沒有勾到情況,
然後平台記得選對你要開發的平台。

右邊的部分,
Build App Bundle 是Google Play的新格式,
Android app bundle(aab)會取代舊有的APK,
32位元&64位元的規定,
照著規則走就對了。

Create symbols.zip,
除錯符號檔請一起輸出。

輸出後資料夾會有三個檔案,
aab(應用本體),mapping.txt,symbols.zip
最好都要上傳。
symbols.zip過大無法上傳時,
請將他解壓縮,
再手動選取解壓縮出來的東西再次進行壓縮,
選取zip格式,壓縮方式設定為 "最佳壓縮"。

Develope Build,
測試的時候可以打開,
Profiler可以看你的應用具體的效能情形。

9.開發者帳號
25鎂的門票,
建議開一個新的Google帳號,
或者用舊的也沒關係,
反正安全性最重要。

10.Keystore & Publish Setting
相當於應用程式的身分證/戶口名簿的概念吧?
你要生出一個keystore做為一個鑰匙圈,
keystore本身還有一把鎖,
底下掛了很多鑰匙alias key。
舉例來說,
你有一個鑰匙圈(keystore)上面掛了一串鑰匙(alias keys),
有公司的辦公室的鑰匙,宿舍的鑰匙,老家的鑰匙。
要去不同地方(開不同專案),要用不同的鑰匙(alias key),
這樣都懂了吧?
每次要輸出apk或aab的時候請記得輸入這兩個密碼。
保管好他,這是應用程式的歸屬認定方式,
他生成SHA加密金鑰也請保管好。

Publish Setting 底部有個Minify
視自己需求去改,
我是把None改成Proguard。

11. JAVA_HOME
環境參數的設定,
之前Unity秀逗的時候會抓不到Android的SDK,
請確認JAVA_HOME有沒設定正確,
要安裝的是JAVA SE Development Kit 2xx版

12.UnityGfxDeviceW crash
遇到這個問題的話,
請去Player Setting 關掉 Multithreaded Rendering。

13.Editor測試顯示大小
點開Game,
這裡可以改測試的螢幕大小,
體驗看看不同解析度的效果。
如果顯示位置跑掉,
代表你anchor沒設好。

15.切分Canvas
Canvas如果掛太多物件也會降低效能或卡頓,
適當的切分功能到不同的Canvas。

16.Script 執行順序
了解順序很重要,
null reference常常發生在你以為已經初始化完了,
但是被你以為是後面的先執行了。
通常是Awake->Start->OnEnable->update,
建議自己去測一下。

17.非同步等待
await & async 了解一下,
個人認為比以前的Enumerator更好操作。

18.建立Prefab
如果需要重複生成物件,
學一下物件池去管理。

19.版本選擇
入門可以選.1/.2去嘗試最新功能,
要推出產品的話,選LTS的最好,
穩定性比什麼功能都重要。
每個LTS都會在發布後維護2年,
現在LTS版本號為.3

剩下的都是其他通用的開發常識就不多說了,
該會的都要會。
暫時想到這些,有機會再補吧!

51
-
LV. 28
GP 1k
2 樓 DirtySoul licexicel
GP3 BP-
二樓給Ios。

必備條件:
1. MacOS系統
2.iphone+最新版本Ios
3.開發者帳號(99鎂/年)
-----
原因:
1.審核在測試時會用當時最新的iphone+最新&次新的Ios版本測試
2.Xcode只能在MacOS上執行

可能會遇到的問題:
1.FBLPromises.framework does not contain bitcode
去build option 中,把 Bitcode關掉(ios14以上不支援)

2.ios14以上要求追蹤透明度(有追蹤才要用)
看你用的套件有沒有附這個功能,
沒有的話,Unity本身有示範專案 點我

3. profile/certificates/identifiers可以在網站上弄,
當然你也可以全在xcode用auto。

4.有些code segement分Android/Ios,確認有包好 if / end if

5.Unity有localization插件可以用,應用名稱可以在uinty中先設定好。

在Xcode的操作:
1.打開Unity切到Ios -> 確認沒有錯誤 ->輸出Xcode專案
2.打開資料夾的 "xcworkspace"
(不要用xcodeproj開,很多設定都包在xcworkspace)
3.在signing中掛上你的開發版/正式版 profile
4.插上iphone開啟開發者模式並註冊你的裝置
5A.測試時用開發版的profile,選裝置,從product->build for running
5B.輸出時用正式版的profile,選any device,從product->archieve

註:
1.帳號要先申請,個人的會核對身分,來回一趟就是好幾天。
2.appstore上的資料,只要有變更,就要整個專案重新打包一次。(即使跟code無關)
3.Log可以從Xcode右下角點開終端機看,或從上方windows->device進去 view log
-----
先打到這,有想到再補。
3
-
未登入的勇者,要加入 3 樓的討論嗎?
板務人員: