27 grudnia 2016

Testowanie aplikacji Xamarin na telefonie z rootem

Rozpoczynając zabawę z Xamarinem można w niektórych przypadkach natrafić na problem błędu z instalacją (deploy) aplikacji na komórce (chodzi o fizyczne testowanie na sprzęcie, nie emulację programową).
Problem objawia się w enigmatycznych komunikatach w stylu:

1>Unexpected install output: pkg: /data/local/tmp/Mono.Android.DebugRuntime-debug.apk
1>Killed

lub

Couldn't connect to logcat, GetProcessId returned: 0

Zagłębiając się w temat włączyłem rozszerzone komunikaty debugowe Xamarina w opcjach Visual Studio.
Otrzymałem kilka błędów, jednak głównie dotyczyły one brakujących uprawnień.

-- Start Broadcast - 12/27/2016 22:57:49 (387.0222ms) --
[INPUT] am broadcast -a "mono.android.intent.action.EXTERNAL_STORAGE_DIRECTORY" -n "Mono.Android.DebugRuntime/com.xamarin.mono.android.ExternalStorageDirectory"
[OUTPUT]
Broadcasting: Intent { act=mono.android.intent.action.EXTERNAL_STORAGE_DIRECTORY cmp=Mono.Android.DebugRuntime/com.xamarin.mono.android.ExternalStorageDirectory }
java.lang.SecurityException: Permission Denial: broadcast asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
(...)
[INPUT] am start -a "android.intent.action.MAIN" -c "android.intent.category.LAUNCHER" -n "AndroidApp1.AndroidApp1/md5c178831cd46fc53bebc42cf953f78ced.MainActivity"
[OUTPUT]
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=AndroidApp1.AndroidApp1/md5c178831cd46fc53bebc42cf953f78ced.MainActivity }
java.lang.SecurityException: Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL

Po przetestowaniu kolejnego telefonu problem wciąż występował, co było co najmniej dziwne.

Przespałem się z problemem i na rozwiązanie natrafiłem dnia następnego – problemem były zrootowane telefony. Po części sugerował to błąd “startActivity asks to run as user -2 but is calling from user 0”.

Rozwiązaniem problemu jest zainstalowanie na telefonie programu “adbd insecure” – po zrootowaniu telefonu umożliwia domyślne uruchamianie wiersza poleceń adb w trybie root. W aplikacji trzeba jeszcze zaznaczyć opcję “Enable insecure adbd”:

adbd-Insecure-v2.00

TrackBack

TrackBack URL dla tej wiadomości:
https://blog.kkthx.pl/2016/12/testowanie-aplikacji-xamarin-na-telefonie-z-rootem/trackback/

Napisz komentarz