0

我创建了一个在我的手机上运行良好但在 MI 手机上运行良好的应用程序。原因一定是使用了非 SDK API。我有一份发布前报告,告诉我我正在使用非 SDK API,但我无法理解它发生在哪里。我的警告之一示例:

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)

abcnK 和其他类似的痕迹是什么意思?我尝试在我的源代码中使用 strictmode 来自己检测这些,但我在我的运行终端中没有找到任何东西。在一个活动中,我添加了以下严格模式代码:

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();
}

如何检测这些违规行为在我的源代码中发生的位置?

感谢您的任何帮助

4

1 回答 1

0

使用构建 APK/App Bundle 时生成的 proguard 映射文件并在其上运行ReTrace以对 stactkrace 进行反混淆。

于 2021-06-17T15:10:09.320 回答