# Google aab提包
1. The release is not compliant with the Google Play 64-bit requirement
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcuMTYjNTN3YmZjhTOwMWN4EWOjFTZxQjN2gTZ4ITN2U2Nvw1NxYDOzkjMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
項目中存在32位的包,需要替換成64位:
Unity Editor - Project Settings - Player - Android - Other Settings:
Scripting Backend選擇IL2CPP;
Target Architectures勾選ARM64;
2. 重新提包時,版本号需要擡一下
# Android權限判斷問題
1. Android 6.0及以上判斷權限
private static int PERMISSIONS_CODE = 1;
private String _unityObjName = "";
public boolean hasPermission(String unityObjName, String permission)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
_unityObjName = unityObjName;
this.checkPermissoin(permission) == PackageManager.PERMISSION_GRANTED;
}
return true;
}
public void requestPermission(String permission)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
this.requestPermission(new String[] {permission}, PERMISSIONS_CODE);
}
}
複制
2. Android 6.0以下權限判斷
private static int PERMISSIONS_CODE = 1;
private String _unityObjName = "";
public boolean hasPermission(String unityObjName, String permission)
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
{
_unityObjName = unityObjName;
PermissionChecker.checkSelfPermission(this, permission) == PermissionChecker.PERMISSION_GRANTED;
}
return true;
}
public void requestPermission(String permission)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
ActivityCompat.requestPermissions(this, new String[] {permission}, PERMISSIONS_CODE);
}
}
複制
Android 6.0以下版本,一旦玩家拒絕了權限,判斷權限的接口永遠範圍true。
解決方法:
暫時無解,體驗上可以告知玩家,目前功能需要這個權限,并提供前往手機設定的按鈕。
在權限回調裡向Unity發送Message,交給邏輯層面去處理。
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, granteResults);
if (PERMISSIONS_CODE != requestCode) return;
for (int i = 0; i < permissions.length; i++)
{
String permission = permissions[i];
int grantResult = grantResults[i];
if (grantResult == PackageManager.PERMISSION_GRANTED)
{
sendUnityMessage("OnPermissionRequested", permission);
}
else
{
sendUnityMessage("OnPermissionDenied", permission);
}
}
}
private void sendUnityMessage(String funcName, String param)
{
UnityPlayer.UnitySendMessage(_unityObjName, funcName, param);
}
複制
# android.support.v4與androidX沖突
android 6.0以下權限判斷用到了2個類:PermissionChecker 和 ActivityCompat,這兩個類需要android.support.v4包,但是和第三方庫使用androidX沖突。
plugins - Android裡面
gradleTemplate
檔案添加如下兩句:
android.useAndroidX=true
android.enableJetifier=true
複制
# 小米K30手機上跑應用後殺程序重進,出現閃退的情況
小米K30手機,Android系統11,打開Unity打包的應用,然後讓引用進入背景,通過殺程序的方式關掉應用,再重新打開,應用有非常大的機率出現閃退的問題。有時候可以通過多嘗試打開幾次讓應用成功開啟,但是大多數情況依然會出現閃退。
原因:
出現閃退的包是用Debug方式打出來的,占用記憶體消耗、性能、包體大小都是沒有經過優化的,是以當殺程序後,實際應用占用記憶體是沒有馬上被釋放掉的(猜測),這時啟動應用,大量占用的記憶體會導緻程式被系統Kill掉,出現閃退的情況;
而Release方式打出來的包是經過優化的,不會出現閃退的情況。
Ref:
http://c.biancheng.net/view/4124.html
# WebCamTexture + ARM64在部分機型上閃退的問題
用IL2CPP + ARM64打出來的包,在小米 K30機子上,調用webCamTexture.Play()方法後出現穩定閃退的情況。
進一步發現:
Debug包不會有閃退問題,但是Release包會有問題。
原因:
new WebCamTexture的時候,傳入了螢幕寬高作為攝像頭拍照的尺寸,在小米K30上用ARM64打Release包的時候會出現閃退。
解決方法:
不傳入指定寬高,拍出來的圖像,将其裁剪成螢幕寬高大小,模拟全屏拍照的效果。