卧疾丰暇豫,翰墨时间作。这篇文章主要讲述迁移到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!
推荐阅读
- Android只打电话第二次工作
- 如何使用adb与Memu / Bluestacks / Nox App Player等模拟器
- Android调试器不断断开连接
- java.lang.NoSuchMethodError public default void android.content.ServiceConnection.onBindingDied(andr
- Unity3D通过Whatsapp发送AudioClip
- 从MyProject-App.xml中检测versionNumber( Adobe AIR)
- 使用Adobe Air构建Android本机库
- Android Air GoViral ANE showFacebookShareDialog throw modeOverride错误
- 如何在Android AIR上获取可用网络列表()