Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

插件在android 4.3手机中调用view.setLayerType或者使用android:layerType="software" 属性,崩溃 #333

Open
KuoGao opened this issue Sep 4, 2017 · 2 comments

Comments

@KuoGao
Copy link

KuoGao commented Sep 4, 2017

问题详细描述 Detailed description of the problem

复现问题步骤 Steps to reproduce the problem

  1. 插件调用view.setLayerType或者使用android:layerType="software" 属性,崩溃

其它重要信息 Other important information

replugin-host-lib/gradle Version:2.2.0
rePlugin-plugin-lib/gradle Version:2.2.0

Android API Version:android 4.3
Android 手机型号&ROM(Phone model & ROM):

Logcat上下文 Logcat context

09-04 16:48:39.864 2447-2447/com.jd.jrapp E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jd.jrapp/com.jd.jrapp.loader.a.ActivityN1NRNTS4}: android.view.InflateException: Binary XML file line #94: Error inflating class
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362)
at android.app.ActivityThread.access$700(ActivityThread.java:168)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:177)
at android.app.ActivityThread.main(ActivityThread.java:5493)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #94: Error inflating class
at android.view.LayoutInflater.createView(LayoutInflater.java:669)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:718)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:804)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:898)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:794)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812)
at android.view.LayoutInflater.inflate(LayoutInflater.java:526)
at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
at com.jdjr.stock.chart.ui.fragment.BaseChartMinFragment.a(Unknown Source)
at com.jdjr.stock.chart.ui.fragment.BaseChartFragment.onCreateView(Unknown Source)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
at com.jdjr.frame.base.BaseActivity.onStart(Unknown Source)
at com.jdjr.stock.detail.StockDetailContainerActivity.onStart(Unknown Source)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188)
at android.app.Activity.performStart(Activity.java:5382)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2279)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
at android.app.ActivityThread.access$700(ActivityThread.java:168) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:177) 
at android.app.ActivityThread.main(ActivityThread.java:5493) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:643)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:718) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:804) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:898) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:794) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:526) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
at com.jdjr.stock.chart.ui.fragment.BaseChartMinFragment.a(Unknown Source) 
at com.jdjr.stock.chart.ui.fragment.BaseChartFragment.onCreateView(Unknown Source) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624) 
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330) 
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) 
at com.jdjr.frame.base.BaseActivity.onStart(Unknown Source) 
at com.jdjr.stock.detail.StockDetailContainerActivity.onStart(Unknown Source) 
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188) 
at android.app.Activity.performStart(Activity.java:5382) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2279) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
at android.app.ActivityThread.access$700(ActivityThread.java:168) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:177) 
at android.app.ActivityThread.main(ActivityThread.java:5493) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException
at android.view.View.setLayerType(View.java:13313)
at android.view.View.(View.java:3853)
at android.view.View.(View.java:3493)
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
at android.view.LayoutInflater.createView(LayoutInflater.java:643) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:718) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:804) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:898) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:794) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:526) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
at com.jdjr.stock.chart.ui.fragment.BaseChartMinFragment.a(Unknown Source) 
at com.jdjr.stock.chart.ui.fragment.BaseChartFragment.onCreateView(Unknown Source) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624) 
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330) 
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) 
at com.jdjr.frame.base.BaseActivity.onStart(Unknown Source) 
at com.jdjr.stock.detail.StockDetailContainerActivity.onStart(Unknown Source) 
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1188) 
at android.app.Activity.performStart(Activity.java:5382) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2279) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
at android.app.ActivityThread.access$700(ActivityThread.java:168) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:177) 
at android.app.ActivityThread.main(ActivityThread.java:5493) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041) 
at dalvik.system.NativeStart.main(Native Method) 

@cundong
Copy link
Contributor

cundong commented Sep 13, 2017

建议提供一个可以稳定崩溃的示例代码。

@duqian291902259
Copy link
Contributor

确实,在使用一些自定义控件的时候,如果使用了xxx.setLayerType,在某些机型上面,会崩溃。
示例代码:
ShapeDrawable circle; if (elevationSupported()) { circle = new ShapeDrawable(new OvalShape()); ViewCompat.setElevation(this, SHADOW_ELEVATION * density); } else { OvalShape oval = new OvalShadow(mShadowRadius, diameter); circle = new ShapeDrawable(oval); try { // 修复空指针 ViewCompat.setLayerType(this, ViewCompat.LAYER_TYPE_SOFTWARE, circle.getPaint()); } catch (Exception e) { e.printStackTrace(); } circle.getPaint().setShadowLayer(mShadowRadius, shadowXOffset, shadowYOffset, KEY_SHADOW_COLOR); final int padding = (int) mShadowRadius; // set padding so the inner image sits correctly within the shadow. setPadding(padding, padding, padding, padding); } circle.getPaint().setColor(color); setBackgroundDrawable(circle);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants