How can I find where the nonSdk violation is occuring in my source code?

185 Views Asked by At

I created an app that works perfectly fine on my phone but not well on an MI phone. The reason must be using non-SDK APIs. I have a Pre-launch report which tells me I am using non-SDK API's but I am unable to understand where it is occurring. Example of one of my warnings:

StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
at java.lang.Class.getDeclaredMethodInternal(Native Method)
at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
at java.lang.Class.getMethod(Class.java:2063)
at java.lang.Class.getMethod(Class.java:1690)
at a.b.c.n.K(:2)
at a.b.c.n.v(Unknown Source:0)
at a.b.c.s.setContentView(Unknown Source:4)
at a.b.c.j.onCreate(:2)
at android.app.Dialog.dispatchOnCreate(Dialog.java:407)
at android.app.Dialog.show(Dialog.java:302)
at a.l.b.c.f0(:2)
at a.l.b.r.T(:39)
at a.l.b.r.R(:1)
at a.l.b.r.S(Unknown Source:47)
at a.l.b.a.m(:2)
at a.l.b.r.D(:7)
at a.l.b.r.Z(Unknown Source:84)
at a.l.b.r.B(:4)
at a.l.b.r$d.run(Unknown Source:3)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at androidx.test.espresso.base.Interrogator.loopAndInterrogate(Interrogator.java:10)
at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:7)
at androidx.test.espresso.base.UiControllerImpl.loopUntil(UiControllerImpl.java:1)
at androidx.test.espresso.base.UiControllerImpl.injectMotionEvent(UiControllerImpl.java:6)
at androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:6)
at androidx.test.espresso.action.MotionEvents.sendUp(MotionEvents.java:1)
at androidx.test.espresso.action.Tap.sendSingleTap(Tap.java:5)
at androidx.test.espresso.action.Tap.access$100(Tap.java:1)
at androidx.test.espresso.action.Tap$1.sendTap(Tap.java:1)
at androidx.test.espresso.action.GeneralClickAction.perform(GeneralClickAction.java:4)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:2)
at androidx.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:19)
at androidx.test.espresso.ViewInteraction.access$100(ViewInteraction.java:1)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:2)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

What do a.b.c.n.K and other such traces mean? I tried using strictmode in my source code to detect these myself but I do not find anything in my Run terminal. In an activity I added the following piece of strict mode code:

protected void onCreate(Bundle savedInstanceState) {
    setUserTheme();
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectAll()
                .penaltyLog().build());
    }
    super.onCreate(savedInstanceState);
    mNavigationView = findViewById(R.id.navigation_view);
    setColorToIcons();

    getGeneralInfo();
    setHeaderWelcomeUser(userName);
    showMenuEvents();
    drawerAndToggle();
}

How do I detect where these violations occur in my source code?

Thank you for any help

1

There are 1 best solutions below

1
On

Use the proguard mapping file that was generated when you built the APK/App Bundle and run ReTrace on it to deobfuscate the stactkrace.