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

卧疾丰暇豫,翰墨时间作。这篇文章主要讲述迁移到AndroidX后:无法实例化类:androidx.appcompat.widget.ShareActionProvider。相关的知识,希望能为你提供帮助。
我迁移到了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-dev(IRC)上得到了一些帮助,似乎问题在于minifier(出于某种原因)删除了 "android......"。androidx.appcompat.widget.ShareActionProvider 类。关闭minification产生了一个工作的APK。
【迁移到AndroidX后(无法实例化类:androidx.appcompat.widget.ShareActionProvider。)】修复方法是更新我的 proguard-rules.pro 文件中加入新的 "keep "行,以防止它删除该类。从前,我对老的Android支持库也有类似的规则,所以我加了下面第二行,现在可以用了。
-keep class android.support.v7.widget.** { *; }-keep class androidx.appcompat.widget.** { *; }

谢谢@melatonina!

    推荐阅读