作者

大家好,我叫Jack冯;
本人20年硕士结业于广东工业大学,于2020年6月参加37手游安卓团队;现在首要负责海外游戏发行安卓相关开发。

系列目录

游戏优化系列一:海外谷歌运用适配相关(本章讲解)

游戏优化系列二:Android Studio制造图标教程

游戏优化系列三:Unity游戏的黑屏问题解决方法

本文目录

  1. 谷歌运用图标

  2. 状态栏音讯推送

  3. 体系主题风格

  4. 导航键

  5. 屏幕适配

  6. 回来按钮

布景

游戏上架谷歌申请引荐时,谷歌会给予一些优化主张。这些主张实际上都是比较不错的游戏体会优化方向。以下根据app上架谷歌运用商铺的标准,罗列需求适配的当地并供给了修正样例。

1. 谷歌运用图标

游戏icon:
5个不同尺度的icon,4848, 7272, 9696, 144144, 192*192
别离放在mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi下面。

推送icon(只能由白色+透明组成): (白底透明字)
5个不同尺度的icon,2424, 3636, 4848, 7272, 96*96
别离放在mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi下面。

Android Studio制造icon的教程,详见《游戏优化系列二-Android Studio制造图标教程》

示例:

游戏优化系列一:海外谷歌应用适配相关

游戏优化系列一:海外谷歌应用适配相关

2. 状态栏音讯推送

在游戏运用中进行版本迭代时,假如游戏自身有音讯推送,且SDK中也有推送的情况下,发送音讯的notify方法中,id有可能不同,此刻会呈现两条音讯(游戏的和SDK的),有可能会被Google运用商铺回绝引荐。

NotificationManager.notify(int id, Notification notification)

呈现两条音讯:

游戏优化系列一:海外谷歌应用适配相关

需求做到的效果–同一个运用的音讯堆叠

游戏优化系列一:海外谷歌应用适配相关

展开后:

游戏优化系列一:海外谷歌应用适配相关

修正示例:

private void mergeNotifications(){
    int mergeId = 0;
    String groupKey = "com.android.example.WORK_EMAIL";
    String channelId = "1";
    Notification notification1 = new NotificationCompat.Builder(MainActivity.this, channelId)
        .setSmallIcon(R.drawable.ic_launcher_background)
        .setContentTitle("推送需求堆叠")
        .setContentText("这是一条SDK的告诉")
        .setGroup(groupKey)
        .build();
    Notification notification2 = new NotificationCompat.Builder(MainActivity.this, channelId)
        .setSmallIcon(R.drawable.ic_launcher_background)
        .setContentTitle("推送需求堆叠")
        .setContentText("这是一条游戏的告诉")
        .setSmallIcon(R.drawable.ic_stat_name)
        .setGroup(groupKey)
        .build();
    Notification mergeNotification = new NotificationCompat.Builder(MainActivity.this, channelId)
        .setContentTitle("推送需求堆叠")
        .setContentText("2条未读信息")
        .setSmallIcon(R.drawable.ic_stat_name)
        .setStyle(new NotificationCompat.InboxStyle()
            .addLine("这是一条游戏的告诉")
            .addLine("这是一条SDK的告诉")
            .setBigContentTitle("2条未读信息")
            .setSummaryText("推送测试"))
        .setGroup(groupKey)
        .setGroupSummary(true)
        .build();
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(1, notification1);
    notificationManager.notify(2, notification2);
    notificationManager.notify(mergeId, mergeNotification);
}

3. 体系主题风格

在运用里边弹出的Dialog、Loading框,需求适配体系风格!

例如在5.0以上的体系,呈现这种风格是不可的:

游戏优化系列一:海外谷歌应用适配相关

这种风格才是符合要求的:

游戏优化系列一:海外谷歌应用适配相关

假如这些Dialog、Loading框不是运用体系风格,而是自行设计,则能够继续运用,不必进行额外处理; 例如:

游戏优化系列一:海外谷歌应用适配相关

具体完成方法有两种:

第一种,在Androidmanifest的application和activity标签下,不要设定android:theme,即可适配体系风格。

修正示例1:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"    
    package="com.game37.themeapplication">    
<application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher" 
       android:label="@string/app_name" 
       android:roundIcon="@mipmap/ic_launcher_round" 
       android:supportsRtl="true">
       <activity
         android:name=".MainActivity"
         android:screenOrientation="sensorLandscape">
         <intent-filter> 
               <action android:name="android.intent.action.MAIN" /> 
               <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter>
        </activity>
</application></manifest>

示例效果1:

游戏优化系列一:海外谷歌应用适配相关

第二种,可保留android:theme,但需求引证Google库工程appcompat_v7,运用体系自带主题或许自定义主题。 其间,在自定义的style里边,承继Theme.AppCompat(还有很多子风格能够挑选,如Theme.AppCompat.Light和Theme.AppCompat.NoActionBar等)。

修正示例2:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.game37.themeapplication">
    <application
        ...
        android:theme="@style/Theme.AppCompat">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="sensorLandscape"
            //运用自定义主题
            android:theme="@style/testStyle">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            //运用体系自带主题
            android:name=".MainActivity2"
            android:theme="@style/Theme.AppCompat.NoActionBar" />
    </application>
</manifest>

其间,自定义主题样式如下:(设置全屏、布景色等)

<style  name="testStyle" parent="Theme.AppCompat">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
</style>
<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/colorAccent</item>
</style>

示例效果2:

游戏优化系列一:海外谷歌应用适配相关

在Androidmanifest的相关android:theme设置上述承继Theme.AppCompat风格的主题即可。

【常见问题】

游戏工程接入SDK的过程中,假如主Activity承继的是androidx.appcompat.app.AppCompatActivity,需求运用Theme.AppCompat类主题,因而主张游戏工程的主题设置不留空,即选用第二种方式设定相关主题!

【留意】

假如修正主题后,输入框等显现异常(eg:角色的名称输入框,布景白色、字体白色,会影响玩家体会),可运用引荐主题来修复android:theme=”@style/Theme.AppCompat.Light.DarkActionBar”

4.导航键

体系导航键不能挡住功用,最好能够运用IMMERSIVE_STICKY模式(即彻底全屏,告诉栏和导航键都自动隐藏,需求API-19以上支撑)。

掩盖功用情景:

游戏优化系列一:海外谷歌应用适配相关

修正示例:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

修正效果:

游戏优化系列一:海外谷歌应用适配相关

5. 屏幕适配

(1)屏幕方向

在某些运用程序中偶然会呈现180度左右的倒挂现象。为了获得更好的用户体会,咱们主张您保持整体方向与原始方向共同。

由于某些横屏的游戏,能够根据重力自动转化屏幕(转化后仍是横屏,只是方向不同),所以修正androidmanifest中Activity特点,android:screenOrientation设置为sensorLandscape即可。

(2)适配多种屏幕

在androidmanifest参加下面配置

<supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />

6.回来按钮

回来按钮需具有回来功用,应具有回来上一级内容、撤销当前处理中的事务、退出游戏等效果。

回来键功用的官方解释:

1.具有与屏幕上任何后退或封闭按钮相同的功用

2.暂停和撤销暂停游戏(假如适用)

3.封闭一切对话框窗口

4.导航到菜单堆栈中的上一个方位(假如适用)

5.第一次登录时,在主菜单中按下退出运用程序,在服务器挑选和字符挑选页面中,Android后退按钮呈现错误行为。

具体情境:

(1)在游戏启动、资源加载过程,点击体系回来按钮要求能够后退,或许弹框提示用户是否退出游戏;(部分运用在这过程屏蔽了体系按钮,呈现被谷歌运用商铺回绝的情况)

(2)活动弹窗显现时,点击回来体系按钮要求能够封闭弹窗。

示例说明:点击回来按钮无法封闭弹窗

游戏优化系列一:海外谷歌应用适配相关

结束语

过程中有问题或许需求沟通的同学,能够扫描二维码加好友,然后进群进行问题和技术的沟通等;

游戏优化系列一:海外谷歌应用适配相关