Problèmes rencontrés par l'apk packagé Unity sur la boîte Android 4.4.2

Scénario du projet :

Les projets développés avec Unity doivent fonctionner sur des boîtiers Android 4.4.2.


Description du problème

1、会出"Faites glisser votre doigt depuis le haut pour quitter le mode plein écran." boîte contextuelle,这是android4.4的一个特性,叫做沉浸模式(Full-screen Immersive Mode),当app启用该模式时,应用程序的界面会占据整个屏幕,屏幕上方的状态栏和下方的导航栏会被隐藏,从屏幕顶端向下滑动就可以再次呼出状态栏和导航栏,系统为了提醒用户就多加了一个提示装口。需要去掉这个弹框,否则用户无法进行下面的操作。
2、部分项目在启动过程中加载很慢,经测试有三款项目在启动过程有20-30秒的加载时间;加载时间过长需要优化。


Analyse des causes :

1. Cela est dû aux fonctionnalités d'Android 4.4 et supérieur, mais la plupart des boîtiers ont été optimisés pour cette fonctionnalité. Certains modèles de boîtiers n'ont pas été optimisés, ce problème se produira donc.

2. Causes possibles des problèmes de chargement : ressources trop volumineuses, problèmes avec les méthodes d'emballage et problèmes avec les méthodes de chargement.


solution:

1,

La première méthode : ( Cette méthode ne fonctionne pas après test, cela peut être un problème de mon côté )

Cette invite peut causer des problèmes dans certaines situations particulières. Par exemple, certains systèmes Android profondément personnalisés ne peuvent pas utiliser la souris ou l'écran tactile. Lors de l'ouverture d'une application en plein écran, une fois cette invite affichée, elle ne peut pas être éliminée, ce qui affecte grandement l'expérience utilisateur. . Cette fenêtre d'invite doit donc être supprimée.


Cela ne signifie pas supprimer la fonctionnalité de mode immersif d’Android, mais uniquement supprimer la fenêtre d’invite.


Le code correspondant se trouve dans le fichier ImmersiveModeConfirmation.java dans le répertoire frameworks/base/policy/src/com/android/internal/policy/impl/. Ouvrez ce fichier et recherchez :
 


private final class H extends Handler {
         private static final int SHOW = 0;
         private static final int HIDE = 1;
 
         @Override
         public void handleMessage(Message msg) {
             switch(msg.what) {
                 case SHOW:
                     handleShow((String)msg.obj);
                     break;
                 case HIDE:
                     handleHide();
                     break;
             }
         }
     }

La fonction de ce code est d'appeler et de masquer la fenêtre d'invite. Il suffit de bloquer handleShow((String)msg.obj) et handleHide() dans la méthode handleMessage.

La deuxième méthode : recréer la méthode onWindowFocusChanged (cette méthode peut être supprimée après test avec cocos, mais pas avec unity)

public void onWindowFocusChanged(boolean hasFocus){
 super.onWindowFocusChanged(hasFocus);
if(hasFocus){
showSystemUI();
}
}

public void showSystemUI(){

Handler mHandler = new Handler(){
public void handleMessage(Message msg){

getWindow().getDecorView().setSystemUiVisibility()(

View.SYSTEM_UI_FLAG_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);

}

};
mHandler.sendEmptyMessageDelayed(0,100);
}

Après réécriture, le projet cocos peut supprimer la boîte contextuelle et s'exécuter normalement, mais le projet Unity ne fonctionne toujours pas. Continuez à trouver d'autres solutions ;

Le support technique d'autres sociétés suggère de modifier le thème de l'activité : en "@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

Le thème de l'application est modifié en :

<style name="titleTheme" parent="android:Theme" >
        <!-- <item name="android:windowTitleSize">30dp</item>  -->
        <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
        <item name="android:windowTitleStyle">@style/CustomWindowTitle</item>
        <item name="android:windowTitleSize">0sp</item>
    </style>

Même après avoir modifié le thème, cela ne fonctionne toujours pas ;

Troisième méthode : utilisez le plug-in Unity (unityShowAndroidStatusBar.aar)

Vous devriez pouvoir rechercher ce plug-in en ligne. Quelqu'un l'a empaqueté et partagé. Lorsque j'ai rencontré ce problème auparavant, la technologie de l'entreprise utilisait des plug-ins pour résoudre des problèmes similaires, mais cela ne fonctionnait toujours pas après avoir utilisé les plug-ins. Je soupçonnais qu'il s'agissait d'un problème de version Unity. Maintenant, j'utilise unity2019.4.9f1 , et avant d'utiliser unity5.4.5f1 ; donc, utilisez la version 5.4.5 de Unity pour créer un projet vide, ajoutez le plug-in et exécutez-le sur la boîte, en supprimant avec succès la boîte de dialogue. Par conséquent, tous les projets seront rétrogradés de 2019 à 5.4.5 (rétrograder la version est très pénible).

2. Solution au problème de chargement : (Les projets avec des problèmes de chargement sont des projets Unity, et il existe trois modèles sans problèmes de chargement, et trois modèles en ont) Optimisez d'abord le corps du package, le corps du package est optimisé de 38 Mo à 15 Mo, et le temps de chargement est le même ; continuez à modifier la méthode de packaging, changez la méthode de packaging pour qu'elle soit cohérente avec le projet sans problème, mais cela ne fonctionne toujours pas ; utilisez le packaging Unity pour exporter puis empaquetez-le avec Android Studio, mais cela ne fonctionne toujours pas ; je peux voir dans le journal que la progression du chargement est de 4 % et j'ai attendu 20 secondes avant de continuer le chargement. , et aucune erreur n'a été signalée au milieu ; je soupçonnais que cela était dû à un gros fichier de ressources. J'ai vérifié le projet et découvert qu'il y avait un fichier audio volumineux, 2,5 Mo. J'ai directement supprimé le package audio et je l'ai testé. Le temps de chargement est devenu 3 secondes. Le problème devrait provenir de l'audio. Le fichier est téléchargé, et je continue à regarder les deux autres jeux. Effectivement, ils ont tous les deux des fichiers audio plus gros. J'ai compressé les fichiers audio à 300 Ko et je les ai testés après l'emballage. Le chargement est toujours très rapide. À ce stade, le Le problème est résolu. Tous les fichiers audio sont compressés et reconditionnés. , tous réussis après les tests.

Je téléchargerai le plug-in sur csdn plus tard, ou m'enverrai simplement un message privé pour l'obtenir.

Je suppose que tu aimes

Origine blog.csdn.net/leo347/article/details/130430265
conseillé
Classement