发布版本时 ActionBar 缺少后退箭头,但调试版本没有

Posted

技术标签:

【中文标题】发布版本时 ActionBar 缺少后退箭头,但调试版本没有【英文标题】:Back arrow missing from ActionBar on release build but not debug build 【发布时间】:2018-12-20 06:52:26 【问题描述】:

当我从我的 android 应用程序的调试版本转移到发布版本时,ActionBar 中的后退导航箭头被替换为汉堡包(因为想要一个更好的名称),这不是我想要的。

这是调试版本,应该是后退箭头。

这是发布版本,带有汉堡包。

这是用户使用 Jetpack 导航组件导航到片段时出现的默认后退箭头,在 AppBarLayout 中如下所示:

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appbar"
            android:layout_
            android:layout_
            android:theme="@style/AppTheme.AppBarOverlay">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_
                android:layout_
                app:popupTheme="@style/AppTheme.PopupOverlay">

            </androidx.appcompat.widget.Toolbar>

        </com.google.android.material.appbar.AppBarLayout> 

当我在发布版本中关闭缩小时,后退箭头再次出现。所以这与缩小有关。

但是我告诉 ProGuard 保留什么?我尝试了所有这些,但没有任何帮助:

-keep class androidx.appcompat.widget.Toolbar
-keep class androidx.navigation.NavController
-keep class androidx.navigation.Navigation
-keep class androidx.navigation.ui.AppBarConfiguration
-keep class androidx.navigation.ui.navigateUp.** *;
-keep class * extends android.support.v4.app.Fragment
-keep class com.google.android.material.appbar.AppBarLayout

提前致谢!

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,并在Google Issue Tracker 中找到了它。那里有人有解决方案:

-keep class androidx.appcompat.graphics.drawable.DrawerArrowDrawable  *; 

显然,后退箭头drawable(DrawerArrowDrawable)默认被Proguard混淆了。这为我解决了问题,我没有任何其他 Proguard 规则。

您还应该将android.support.v4.app.Fragment 替换为androidx.fragment.app.Fragment(尽管它与您的问题无关)

【讨论】:

这就是我喜欢***的原因。问题立即解决。谢谢。【参考方案2】:

使用时:

androidx导航库2.2.0 已禁用 androidx jetifier

你会遇到这个问题,因为 proguard 规则仍然引用了支持库版本。

在 Navigation 2.2.1 及更高版本中已修复(请参阅https://issuetracker.google.com/issues/147610424)

【讨论】:

我使用的是 Navigation 2.3.0-alpha06,但问题仍然存在。 @HimanshuMalik 刚刚确认它已在 2.3.0 中修复,而且动画看起来更流畅了。

以上是关于发布版本时 ActionBar 缺少后退箭头,但调试版本没有的主要内容,如果未能解决你的问题,请参考以下文章

Actionbar中后退箭头的颜色不会更改

应用ActionBar中的返回按钮

更改后退按钮上的颜色(在ActionBar上)

在工具栏上显示返回箭头

Android Studio:如何从 Fragment 在 ActionBar 中实现后退按钮

以编程方式创建的后退按钮没有箭头