迁移到AndroidX后:无法实例化类:androidx.appcompat.widget.ShareActionProvider。

问题描述 投票:0回答:1

我迁移到了AndroidX(使用Android Studio中的向导),我在共享动作提供者方面遇到了问题。向导改变了(除其他外)。app:actionProviderClass="android.support.v7.widget.ShareActionProvider"app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"在我看来 detailactivity.xml 文件。

这个应用编译得很好,运行得也很好--只要我通过USB安装在我的设备上。然而,如果我编译一个签名的APK,并安装它,我得到以下运行时错误(当启动详细片段时)。

WSupportMenuInflater: 不能实例化类:androidx.appcompat.widget.ShareActionProvider。

我在开发的时候没有注意到这个问题,因为我是通过USB在我的设备上运行应用的。然而,当我现在测试(signedminified)APK时,分享按钮不工作。我该如何解决这个问题呢?比如说,为什么在signedminified APK失败,而通过USB在同一设备上安装时却能正常工作?

因为APK中的代码是经过minified的,所以很难说清楚警告发生在哪里(代码中)。也许我可以创建一个APK,其中的代码是 minified,这样我就能在源代码中得到正确的引用行(在Android Studio LogCat中)?

作为参考,这里是发生警告的类的摘录。我假设警告发生在这里的某个地方,因为这是引用shareActionProvider的地方?

import androidx.appcompat.widget.ShareActionProvider;

public class ScreenSlidePageFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {

    private ShareActionProvider mShareActionProvider;

    public ScreenSlidePageFragment() {
        setHasOptionsMenu(true); // only the share button
    }


    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.detailfragment, menu);
        MenuItem menuItem = menu.findItem(R.id.action_share);
        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);

        if (mShareActionProvider != null && mImageData != null) {
            mShareActionProvider.setShareIntent(createShareImageIntent());
        }
    }
}
android androidx
1个回答
0
投票

我在#android-dev(IRC)上得到了一些帮助,似乎问题在于minifier(出于某种原因)删除了 "android......"。androidx.appcompat.widget.ShareActionProvider 类。关闭minification产生了一个工作的APK。

修复方法是更新我的 proguard-rules.pro 文件中加入新的 "keep "行,以防止它删除该类。从前,我对老的Android支持库也有类似的规则,所以我加了下面第二行,现在可以用了。

-keep class android.support.v7.widget.** { *; }

-keep class androidx.appcompat.widget.** { *; }

谢谢@melatonina!

© www.soinside.com 2019 - 2024. All rights reserved.