2014-04-25 1 views
6

Ho già cercato in Internet una risposta al mio problema, ma sfortunatamente non ho trovato un soluzione per il mio problema. Ho persino scritto in questo caso sullo official forum, Sfortunatamente, i moderatori non sono riusciti a far fronte a questo problema. Qui di seguito descrivo il problema, sperando che qualcuno abbia avuto un problema simile e conosca la soluzione.RecoverySystem.installPackage -/cache/recovery/command: open non riuscito: EACCESS (permesso negato) - autorizzazione mancante dopo l'aggiornamento Android a 4.3+

Ho creato un'applicazione che funziona correttamente su Android 4.1, motivo per cui rifiuto i problemi associati alla mancanza di "qualcosa". Per ora, sembra che nelle versioni più recenti di Android è un bug, perché dopo l'aggiornamento ad Android 4.3 e versioni successive (API 18+) la mia app visualizza il messaggio:

/cache/recovery/command: open failed: EACCESS (permission denied)

La mia applicazione è un'applicazione di sistema, in modo che il presentare *.apk è stato messo nella directory /system/app/ insieme a un adeguato i permessi di accesso ai file (chmod), in modo che il context.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM è uguale 1.

Poiché l'applicazione utilizza il metodo RecoverySystem.installPackage(...) ho aggiunto permesso:

<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> <uses-permission android:name="android.permission.REBOOT" /> <uses-permission android:name="android.permission.DELETE_CACHE_FILES" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

più del minimo richiesto, perché tra gli altri la mia applicazione utilizza il metodo RecoverySystem.verifyPackage(...) Inoltre, questo metodo ha avuto problemi dopo l'aggiornamento ad Android 4.3 e versioni successive, ma questi problemi sono stati risolti dopo l'aggiunta di uno dei (o tutti) permesso:

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

NOTA: per la prova ho aggiunto a manifestare il file anche tutte le possibili autorizzazioni disponibili, ma questo non risolve il problema.

Ancora una volta, vorrei sottolineare che l'applicazione funziona correttamente fino ad un aggiornamento per Android 4.3+. Dopo l'aggiornamento c'è un errore con il messaggio:

/cache/recovery/command: open failed: EACCESS (permission denied)

Questo errore si verifica quando si chiama il metodo RecoverySystem.installPackage(...). (FileWriter command = new FileWriter(COMMAND_FILE); dove COMMAND_FILE == /cache/recovery/command)

Non sono sicuro, ma penso che una delle possibili ragioni possono essere bug nel 'avvio/recupero/recovery.c', ma non riesco a trovare alcuna conferma .

Se qualcuno può aiutare, sarei grato.

P.S. Per evitare problemi in Internet, non pubblicare con testi come "usa Google", "già lo era - l'ho visto da qualche parte - ma non riesco a ricordare dove", "Ho lo stesso problema/anche non funziona per me" e altri post che non aiutano a risolvere il problema.


@ shiri-hrw Grazie per la risposta.

dopo aver aggiunto android: sharedUserId = "com.google.uid.shared" al mio manifest app (AndroidManifest.xml), si è verificato un errore:

Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE Please check logcat output for more details. Launch canceled!

LogCat

Package com.example.test has no signatures that match those in shared user com.google.uid.shared; ignoring!

e/o

Package com.example.test has no signatures that match those in shared user android.uid.system; ignoring!

Hai scritto:

...as your app isn't signed with google signatures...

ma dopo l'applicazione del segno, usando i file * .pk8 e * .x509.pem, che possono essere trovati sotto build/target/product/security nel sdk pulbic.

java -jar SignApk.jar platform.x509.pem platform.pk8 Application.apk Application_signed.apk

e/o

java -jar SignApk.jar shared.x509.pem shared.pk8 Application.apk Application_signed.apk

l'errore si verifica ancora.

Quando spingo la mia app al sistema/app (e riavvio) l'applicazione non è visibile nelle app.

risposta

0

Avevo lo stesso problema, ma l'ho risolto. Se il firmware è 4.3+, È necessario aggiungere android:sharedUserId="com.google.uid.shared" nel manifest dell'app e spingere l'app nel sistema .

Per questo si può radicare il dispositivo Ma dopo l'aggiunta di questo, il vostro non sarà possibile ottenere installato, come durante l'installazione metodo verifySignaturesLP da PackageManagerService restituirà falso come la vostra applicazione non è firmato con google firme, in modo da avere per apportare modifiche in quel metodo per controllare il pacchetto delle tue app e restituire true lì.

Si riceve questo errore perché l'app non ha le firme corrispondenti a quelle di Google. Sebbene tu abbia firmato la tua app usando * .pk, ma che/quei file/s non contengano la firma che Google usa per firmare la loro app.

Quindi, per installare l'app, è necessario modificare il codice quadro come già detto in precedenza. ad es. è possibile modificare il metodo verifySignaturesLP per restituire true per l'applicazione.

o la seconda opzione Se non sono in grado di farlo, allora non sono sicuro, ma si può provare un'altra cosa. Invece di utilizzare l'ID condiviso, l'ID condiviso di altre applicazioni di sistema nel dispositivo. ad es. Ho usato android:sharedUserId="android.uid.system" Poi rendere il vostro dispositivo permissiva, dando seguito comandi

1. adb shell 
2. setenforce 0 

Ricordati si dovrebbe ottenere Permissive invece di Applicazione per getenforce dopo i comandi di cui sopra. E poi prova. Non sono sicuro al 100% di questa seconda opzione. Spero che questa seconda opzione funzioni nel tuo caso.

+0

Ho dato risposte, modificando la mia domanda. Hai qualche idea su come risolvere questo? –

+0

controllo Ho modificato la mia risposta –

0

Se si utilizza KitKat (4.4), quindi inserisci il tuo apk in/system/priv-app invece di/system/app.

+0

e circa untrusted_app? – Benny