2017-08-23 6 views
0

携帯電話をAndroid Oreoにアップグレードします。このデバイスでアプリを実行しているとき。私のアプリはクラッシュします。 Android 7以降の端末では正常に動作していますがAndroid 8.0のAndroidクラッシュOreo:SecurityException:許可の否認:ユーザー450として実行するよう求められ、ユーザー0から電話しています。

これはログです:

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

これは[この質問で尋ねられたこと]とよく似ています(https://stackoverflow.com/q/45842943/115145)。どのようにこのクラッシュを引き起こしていますか? – CommonsWare

答えて

7

私はこの問題を経験しています。

私の場合は

、後startActivityを実行し、アプリケーションは次の例外をthrowed:

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) 

は、調査の時間後、私はすべてのアプリケーションの活動によって拡張された私のクラスBaseActivityは、実施していることを識別しました

class BaseActivity extends AppCompatActivity { 

    ... 

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

私はちょうど別のメソッド名を変更し、バックアプリケーションが再び動作するように:保護された方法は、以下の例のように、getUserId呼ば

class BaseActivity extends AppCompatActivity { 

    ... 

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

私は、基本クラスで同じ名前の任意の方法を見つけることができませんでしたが、我々はスタックトレースで見ることができるように、この方法は、おそらくリフレクションで呼ばれていました。

その他の重要な考えは、EditTextビューを実装するアクティビティが例外をスローするということです。 Autofill Frameworkの実装後の問題は、API 26にあります。

+1

私は同じ問題を抱えていました、getUserIdというメソッドを持っていました、私はgetUserIDに名前を変更して、私は働いた - 信じられないほど –

+0

getUserId()メソッド名の後に私のために働いています。 –

0

this答えからまとめると、我々はフレームワークのユーザーIDの意味を参照してくださいUserHandle.javaのソースを見ているし。そして、あなたがpermission-elementについてのページを読んでする必要がありますどのようなandroid:protectionLevel="signature"手段、理解する

# | @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 

。表にまとめれる:

enter image description here

23 APIは、非ため、android:permissionGroup=definitionをも必要としています>が高いように、あなたのAndroidManifest.xmlに何をする必要があるか、あなたがサポートするために必要なものAPIの上で多くを依存して通常の(「危険な」)の権限...

INTERACT_ACROSS_USERSを保持できるようにするには、あなたのアプリケーションは、ファームウェアの署名鍵で署名する必要があるか、それはシステムパーティションにインストールする必要があります。

INTERACT_ACROSS_USERS_FULLを保存するには、ファームウェアの署名キーでアプリに署名する必要があります。

したがって最終的にあなたのマニフェストファイルでこれを追加します。

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

はそれが役に立てば幸い ...

+0

クラッシュはAndroid 8.0でのみ発生します。私はこれを試したが動作しません –

関連する問題