2017-08-23 1 views
0

Je passe mon téléphone à Android Oreo. Lorsque j'utilise mon application sur cet appareil Mon application se bloque. Alors qu'il fonctionne bien sur Android 7 et les appareils inférieurs.Android Crash sur Android 8.0 Oreo: SecurityException: Permission Denial: null demande à exécuter en tant qu'utilisateur 450 mais appelle de l'utilisateur 0

C'est le journal:

E/AndroidRuntime: FATAL EXCEPTION: main 
                 Process: com.test.test, PID: 28271 
                 java.lang.SecurityException: Permission Denial: null asks to run as user 450 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS 
                  at android.os.Parcel.readException(Parcel.java:1942) 
                  at android.os.Parcel.readException(Parcel.java:1888) 
                  at android.view.autofill.IAutoFillManager$Stub$Proxy.addClient(IAutoFillManager.java:326) 
                  at android.view.autofill.AutofillManager.ensureServiceClientAddedIfNeededLocked(AutofillManager.java:896) 
                  at android.view.autofill.AutofillManager.notifyViewExited(AutofillManager.java:487) 
                  at android.view.View.notifyEnterOrExitForAutoFillIfNeeded(View.java:6945) 
                  at android.view.View.dispatchAttachedToWindow(View.java:17413) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
                  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1658) 
                  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386) 
                  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733) 
                  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) 
                  at android.view.Choreographer.doCallbacks(Choreographer.java:723) 
                  at android.view.Choreographer.doFrame(Choreographer.java:658) 
                  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) 
                  at android.os.Handler.handleCallback(Handler.java:789) 
                  at android.os.Handler.dispatchMessage(Handler.java:98) 
                  at android.os.Looper.loop(Looper.java:164) 
                  at android.app.ActivityThread.main(ActivityThread.java:6541) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
+1

Cela ressemble beaucoup à [ce qui a été demandé à cette question] (https://stackoverflow.com/q/45842943/115145). Comment causez-vous ce crash? – CommonsWare

Répondre

7

J'ai rencontré ce problème.

Dans mon cas, après effectuer une startActivity, l'application throwed l'exception suivante:

Fatal Exception: java.lang.SecurityException: Permission Denial: null asks to run as user 66853 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS 
     at android.os.Parcel.readException(Parcel.java:1942) 
     at android.os.Parcel.readException(Parcel.java:1888) 
     at android.view.autofill.IAutoFillManager$Stub$Proxy.addClient(IAutoFillManager.java:326) 
     at android.view.autofill.AutofillManager.ensureServiceClientAddedIfNeededLocked(AutofillManager.java:896) 
     at android.view.autofill.AutofillManager.notifyViewExited(AutofillManager.java:487) 
     at android.view.View.notifyEnterOrExitForAutoFillIfNeeded(View.java:6945) 
     at android.view.View.dispatchAttachedToWindow(View.java:17413) 
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3326) 
     at android.view.ViewGroup.addViewInner(ViewGroup.java:4955) 
     at android.view.ViewGroup.addView(ViewGroup.java:4746) 
     at android.view.ViewGroup.addView(ViewGroup.java:4686) 
     at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:711) 
     at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107) 
     at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:7877) 
     at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7835) 
     at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7823) 
     at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1565) 
     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) 
     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595) 
     at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) 
     at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3025) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) 
     at android.view.View.measure(View.java:21998) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) 
     at android.view.View.measure(View.java:21998) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) 
     at android.view.View.measure(View.java:21998) 
     at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1308) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
     at android.widget.ScrollView.onMeasure(ScrollView.java:350) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
     at android.view.View.measure(View.java:21998) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:806) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:685) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
     at com.android.internal.policy.DecorView.onMeasure(DecorView.java:721) 
     at android.view.View.measure(View.java:21998) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2410) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1498) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1751) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:723) 
     at android.view.Choreographer.doFrame(Choreographer.java:658) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) 
     at android.os.Handler.handleCallback(Handler.java:789) 
     at android.os.Handler.dispatchMessage(Handler.java:98) 
     at android.os.Looper.loop(Looper.java:164) 
     at android.app.ActivityThread.main(ActivityThread.java:6541) 
     at java.lang.reflect.Method.invoke(Method.java) 
     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Après des heures d'enquête, j'ai identifié que ma classe BaseActivity, qui se prolonge par toutes les activités d'application, a mis en place un méthode protégée appelée getUserId, comme dans l'exemple ci-dessous:

class BaseActivity extends AppCompatActivity { 

    ... 

    protected int getUserId() { 
    return getCurrentUserRepository().getId(); 
    } 
} 

Je viens de modifier le nom de la méthode à l'autre et l'application retour au travail à nouveau:

class BaseActivity extends AppCompatActivity { 

    ... 

    protected int getApplicationUserId() { 
    return getCurrentUserRepository().getId(); 
    } 
} 

Je ne pouvais pas trouver une méthode avec le même nom dans les classes de base, mais comme nous pouvons voir dans stacktrace, cette méthode a été probablement appelé par Réflexion.

Autre important est que seules les activités qui implémente une vue EditText lève l'exception. Le problème est apparu après la mise en œuvre de Autofill Framework dans API 26.

+1

eu le même problème, avait une méthode appelée GetUserID, je retitré à GetUserID puis j'ai travaillé - –

+0

incroyable travail pour moi aussi après le changement nom de la méthode GetUserID(). –

0

Pour résumer de this réponse, et en regardant les sources de UserHandle.java que nous voyons le sens de l'ID utilisateur-cadre de.

# | @UserIdInt   | Value | Status  | Description | 
# | --------------------- | ------ | ---------- | ------------| 
# | USER_OWNER   | 0  | deprecated | "owner" user of the device 
# | USER_SYSTEM   | 0  | ok   | "system" user of the device 
# | USER_ALL    | -1  | ok   | ALL users on the device 
    | USER_CURRENT   | -2  | ok   | the currently active user 
# | USER_CURRENT_OR_SELF | -3  | ok   | id from which we would like to send to the current user 
# | USER_NULL    | -10000 | ok   | An undefined user id 

Ensuite, pour comprendre ce que android:protectionLevel="signature" signifie, vous devrez lire la page sur permission-element. Ce qui est résumée dans le tableau:

enter image description here

Donc ce que vous devez faire dans votre AndroidManifest.xml dépendent beaucoup de ce que API dont vous avez besoin pour soutenir, comme API supérieur> 23 est également besoin d'un android:permissionGroup=definition, pour non autorisations normales ("dangereuses")

Pour pouvoir contenir INTERACT_ACROSS_USERS, votre application doit être signée par la clé de signature du microprogramme ou doit être installée sur la partition système.

Pour pouvoir tenir INTERACT_ACROSS_USERS_FULL, votre application doit être signé par la clé de signature du firmware.

donc enfin ajouter dans votre fichier manifeste:

<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/> 

Hope it helps ...

+0

L'accident se produit uniquement sur Android 8.0. J'ai essayé cela, mais cela ne fonctionne pas, je –