我是Android编程和StackOverflow的新手。这是我的第一个问题,但我之前使用过StackOverflow平台来寻求解决方案。现在,我的问题。我有一个Android应用程序曾经在SDK 11的所有Android设备上正常运行。但是,在SDK 25的更新中,它会在棒棒糖前设备上崩溃。
我的日志猫如下:
Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
我已将vectorDrawables.useSupportLibrary = true
包含在我的gradle中。我的minSdkVersion = 11
,targetSdkVersion = 25
,supportLibraryVersion = 25.2.0
我已经尝试了我在这里找到的所有建议但没有效果。所以,伙计,我需要你的帮助。我渴望学习,以便我能解决这个问题。
感谢。
答案 0 :(得分:2)
调试有时会很痛苦,上面的问题是我原始代码中的一个简单错误的结果。人类会犯错......
现在解决方案。我的初始代码如下所示,如果你看起来很敏锐,你会注意到如果设备低于版本23,检查Build.Version
的if语句之间的初始化代码就不会运行。
if(Build.VERSION.SDK_INT >= 23) {
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// Storage permissions is already available, save profile photo
initialization();
} else {
// Providing additional rational to the user if permission was not granted
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Storage permission is needed to save your profile photo.", Toast.LENGTH_LONG).show();
}
requestPermissions(new String[] {Manifest.permission.READ_CONTACTS}, WRITE_EXTERNAL_STORAGE);
}
}
这是初始化方法。在Android版本低于23的设备中,它没有运行从而触发Could not find class
错误。但是我仍然无法弄清楚这与Ripple Drawable有什么关系,因为我的代码中没有使用Vector Drawables。因此,任何阅读此内容的人都可能会对原因有所了解
private void initialization() {
hoverView = (View) findViewById(R.id.hoverView);
hoverView.setVisibility(View.GONE);
mExitAppDialog = new HookUpDialog(this);
mExitAppDialog.setMessage(getString(R.string.exit_app_message));
mExitAppDialog.setOnButtonClickListener(HookUpDialog.BUTTON_OK,
new OnClickListener() {
@Override
public void onClick(View v) {
mExitAppDialog.dismiss();
if (WallActivity.getInstance() != null) {
WallActivity.getInstance().finish();
}
sInstance.finish();
/* Informing the user, to press back again to exit */
Toast.makeText(getApplicationContext(),
R.string.press_back_again_to_exit,
Toast.LENGTH_SHORT).show();
}
});
mExitAppDialog.setOnButtonClickListener(HookUpDialog.BUTTON_CANCEL,
new OnClickListener() {
@Override
public void onClick(View v) {
mExitAppDialog.dismiss();
}
});
mLlRecentActivity = (LinearLayout) findViewById(R.id.llRecentActivity);
mNoActivitiesView = (TextView) findViewById(R.id.tvNoRecentActivities);
}
现在到完整的代码包括一个其他的,如果修复Android版本23及以下的设备。
if(Build.VERSION.SDK_INT >= 23) {
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// Storage permissions is already available, save profile photo
initialization();
} else {
// Providing additional rational to the user if permission was not granted
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "Storage permission is needed to save your profile photo.", Toast.LENGTH_LONG).show();
}
requestPermissions(new String[] {Manifest.permission.READ_CONTACTS}, WRITE_EXTERNAL_STORAGE);
}
} else if (Build.VERSION.SDK_INT < 23 ) {
// Storage permissions is already available, save profile photo
initialization();
}
感谢@Anurag Singh,经过数小时的测试和重新测试,我能够看到这一点。谷歌搜索和谷歌搜索。