Android菜单图标不会出现在发布版本中,而是显示在调试版本中

时间:2017-06-23 00:50:00

标签: android android-gradle android-resources android-build

我正面临着香气时期最奇怪的问题之一。我正在使用Android支持v7的AppCompatActivity。当我在调试模式下运行应用程序时,我可以看到带有图标的菜单,在生成签名的apk并安装后,图标会从菜单中消失。

1)Release Build screenshot

2)Debug build screenshot

这是我的菜单代码

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".TerminalActivity">


<item android:id="@+id/action_streamConnect"

    app:showAsAction="never"
    android:icon="@mipmap/ic_stream"
    android:visible="false"
    android:title="Connect to Stream">
</item>

<item android:id="@+id/action_connect"

    app:showAsAction="never"
    android:icon="@mipmap/ic_bluetooth_connect"
    android:visible="true"
    android:title="@string/action_connect">
    </item>

<item android:id="@+id/action_disconnect"
    android:title="@string/action_disconnect"
    android:icon="@mipmap/ic_bluetooth_disconnect"
    android:visible="false"
    app:showAsAction="never" />
<item android:id="@+id/action_pulse"
    android:title="Start Pulse"
    android:icon="@mipmap/finger"
    android:visible="true"
    app:showAsAction="never" />

<item android:id="@+id/action_resp"
    android:title="Respiration"
    android:checkable="true"
    android:checked="false"
    android:visible="true"

    android:icon="@mipmap/ic_lungs"
    app:showAsAction="never" />
<item android:id="@+id/action_activity"
    android:title="Track Activity"
    android:checkable="true"
    android:checked="false"
    android:visible="true"

    android:icon="@mipmap/icon_activity_track"
    app:showAsAction="never" />
<item android:id="@+id/action_myRecords"
    android:title="My Records"
    android:visible="true"
    android:icon="@mipmap/ic_download"
    app:showAsAction="never" />

<item android:id="@+id/action_customUrlAnalyze"
    android:title="Analyze Record"
    android:visible="true"
    android:icon="@mipmap/ic_link"
    app:showAsAction="never" />

<item android:id="@+id/action_settings"
    android:title="Settings"
    android:visible="true"
    android:icon="@mipmap/ic_settings_black_24dp"
    app:showAsAction="never"
    >

</item>

<item android:id="@+id/action_crlf"
    android:title="@string/action_crlf"
    android:checkable="true"
    android:checked="false"
    android:visible="false"
    app:showAsAction="never" />


<item android:id="@+id/action_customer"
    android:title="Link Aadhar"
    android:icon="@mipmap/ic_card"
    app:showAsAction="collapseActionView"/>
<item android:id="@+id/action_bank"
    android:title="Policy Purchase"
    android:visible="false"
    app:showAsAction="collapseActionView"/>

<item android:id="@+id/action_buy"
    android:title="Get Device"
    android:visible="true"

    android:icon="@mipmap/ic_shopping_cart_black_24dp"
    app:showAsAction="never" />

我使用自定义主题。这是我的主题风格

 <style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">

    <!-- Customize your theme here. -->


    <item name="colorAccent">@android:color/holo_blue_light</item>

    <item name="android:colorPrimary">@android:color/holo_blue_light</item>
    <item  name="android:windowBackground">@android:color/background_light</item>
    <item name="android:windowActionBar">true</item>

</style>

在AndroidManifest中,我已经包含了这个AppTheme。我还检查过我是否使用过多个Launcher意图 请看一下Manifest

 <application
    android:allowBackup="true"
    android:icon="@mipmap/logo"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".TerminalActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme" >
        <intent-filter>
            <action android:name="android.intent.action.DEFAULT" />
        </intent-filter>
    </activity>
        </application>

在没有得到任何解决方案或者说明我做错了之后,我试着按照几个Stack溢出答案中的说明进行操作。

以下是我做的一些随机事情:

修改了dimens.xml中的默认图标大小

 <dimen name="design_navigation_icon_size" tools:override="true">24dp</dimen>

我所有的菜单图标都是24dp。我可能会遇到这个问题,因为Android可能需要一个48dp的mdpi图标。所以我检查了更换几个图标甚至48x48图标大小甚至96x96大小。

我试图在运行时将颜色变为图标,以查看是否重绘了图标。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_terminal, menu);

    for(int i = 0; i < menu.size(); i++){
        Drawable drawable = menu.getItem(i).getIcon();
        if(drawable != null) {
            drawable.mutate();
            drawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
        }
    }



    actionConnect = menu.findItem(R.id.action_connect);

    actionDisconnect = menu.findItem(R.id.action_disconnect);

    camPulseMenu= menu.findItem(R.id.action_pulse);
    menuActivityTracking= menu.findItem(R.id.action_activity);
    this.menu=menu;

    return true;
}

在我的调试中一切正常,但在发布版本中没有。

我还尝试在gradle中更改版本设置。这是我的全力以赴

android {
compileSdkVersion 23
buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.rupam.biosignal"
    minSdkVersion 21
    targetSdkVersion 23
    versionCode 5
    versionName "1.5"
    generatedDensities = []

}

aaptOptions {
    additionalParameters "--no-version-vectors"
}

buildTypes {
    release {
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        minifyEnabled false
        shrinkResources true
    }
}
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.macroyau:blue2serial:0.1.5'
    compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'
    compile 'com.microsoft.projectoxford:face:1.2.5'
    compile 'com.nabinbhandari.android.utils.permissions:android-permissions:1.0'

compile files('libs/dropbox-android-sdk-1.6.3.jar')

compile files('libs/json_simple-1.1.jar')
compile files('libs/org.eclipse.paho.client.mqttv3-1.0.2.jar')
}

repositories {
    maven {
        url "http://dl.bintray.com/macroyau/maven"
    }
}

我的活动扩展了AppCompatActivity。

我知道我犯了一些愚蠢的错误,却找不到它。

有人可以帮我理解这里有什么问题吗?为什么图标不会出现在菜单中?

PS:我测试了三星Galaxy,Moto G,ViVO和大约7-8个这样的设备,但没有任何运气。

2 个答案:

答案 0 :(得分:0)

R

将此添加到proguard-rules.pro文件中

答案 1 :(得分:0)

经过一些研究后,它似乎与样式或XML标签app:showAsAction="always"无关,也没有缩小或缩小 问题来自显示菜单时的代码膨胀

以下代码可解决此问题

 val menuHelper: Any
    val argTypes: Array<Class<*>?>
    try {
        val fMenuHelper = PopupMenu::class.java.getDeclaredField("mPopup")
        fMenuHelper.isAccessible = true
        menuHelper = fMenuHelper[popupMenu]
        argTypes = arrayOf(Boolean::class.javaPrimitiveType)
        menuHelper.javaClass.getDeclaredMethod("setForceShowIcon",
                *argTypes).invoke(menuHelper, true)
    } catch (e: Exception) {
        e.printStackTrace()
    }