我最近在Google Play上发布了我的应用。我检查了Firebase中的崩溃,其中一个异常数最多的群集是一个致命的例外,其中包含以下堆栈跟踪:
Caused by android.renderscript.RSIllegalArgumentException: Unsuported element type.
android.renderscript.ScriptIntrinsicBlur.create (ScriptIntrinsicBlur.java:50)
com.kayimapps.autocolorsplash_android.Util.getBlurredBitmap (Util.java:234)
com.kayimapps.autocolorsplash_android.activities.IntroActivity.onCreate (IntroActivity.java:83)
android.app.Activity.performCreate (Activity.java:5283)
android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1097)
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2209)
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2299)
android.app.ActivityThread.access$700 (ActivityThread.java:150)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1280)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loop (Looper.java:137)
android.app.ActivityThread.main (ActivityThread.java:5283)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1102)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:869)
dalvik.system.NativeStart.main (NativeStart.java)
可以在堆栈跟踪中看到的getBlurredBitmap方法如下:
public static Bitmap getBlurredBitmap(Bitmap input, Context context)
{
Bitmap result = null;
try {
RenderScript rsScript = RenderScript.create(context);
Allocation alloc = Allocation.createFromBitmap(rsScript, input);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rsScript, alloc.getElement());
blur.setRadius(25);
blur.setInput(alloc);
result = Bitmap.createBitmap(input.getWidth(), input.getHeight(), input.getConfig());
Allocation outAlloc = Allocation.createFromBitmap(rsScript, result);
blur.forEach(outAlloc);
outAlloc.copyTo(result);
rsScript.destroy();
}
catch (RSIllegalArgumentException e)
{
FirebaseCrash.report(e);
}
return result;
}
我到处寻找这个例外,看看它的原因,但到目前为止我一无所获。有趣的是,这个例外仅在Android 17(4.2)的设备中引发,我测试应用程序的唯一设备是带有Android 17的三星Galaxy S3,在同一个地方没有例外。
我猜测由于RenderScript在GPU上运行,因此某些设备可能因为其硬件而无法支持它。提出这种例外的设备是各种各样的品牌设备,所以我不能真的责怪一家制造商。
有没有人知道为什么会发生这种情况,或者可能会指出在哪里寻找解决方案?
编辑:原来我是一个白痴,我使用的手机的操作系统版本是18,而不是17。但是Android 17设备上的问题仍然存在。