la aplicación instalada en /system/priv-app no ​​se ejecutará

Requisitos previos :

  • un dispositivo de tableta rooteado de China basado en Rockchip que ejecuta Android 6, parcheado para deshabilitar SystemUI

  • aplicación de desarrollo propio que declara la categoría LAUNCHER y está destinada a tomar el control total del dispositivo

¿Qué estoy tratando de lograr?

instale la aplicación como una aplicación del sistema para evitar el manejo de permisos SDK 23+

Qué he hecho hasta ahora:

  • instaló la aplicación regularmente a través de Android Studio
  • movió la aplicación a /system/priv-app:

(raíz)

ls /data/app/my.package.name-1
 base.apk
 lib
 oat
mount -o rw,remount /system
mv /data/app/my.package.name-1 /system/priv-app/AppName
ls -la /system/priv-app/AppName
 -rw-r--r-- system   system    2464934 2017-12-08 11:32 base.apk
 drwxr-xr-x system   system            2017-12-08 11:32 lib
 drwxrwx--x system   install           2017-12-08 11:32 oat
reboot

¿Cuál es el problema?

Parece que el sistema no sabe que la aplicación existe: no se ejecuta en el arranque (que lo hace perfectamente cuando se instala como una aplicación normal) y no puedo iniciarla manualmente:

root@rk312x:/ # am start -n my.package.name/.ui.MainActivity
Starting: Intent { cmp=my.package.name/.ui.MainActivity }
Error type 3
Error: Activity class {my.package.name/my.package.name.ui.MainActivity} does not exist.

¿Qué me estoy perdiendo?

Gracias, esto resolvió el problema al iniciar la aplicación. Todavía no se otorgan permisos automáticamente, supongo que debido a una firma que no es del sistema. Sin embargo, la pregunta era sobre cómo ejecutar la aplicación, así que publique sus comentarios como respuesta.
¿Está tratando de obtener permisos de tiempo de ejecución otorgados automáticamente? Estar en ese directorio no lo otorgará automáticamente. El administrador de paquetes firmado de Google debe incluirlo en la lista blanca. Podría apuntar a API 22 o inferior y obtendría los permisos que deseaba con solo instalar el APK.

Respuestas (2)

Cambiar los permisos -rw-r--r--y el propietario seguido rootdel reinicio debería solucionar

Pero como OP señaló, los problemas de firma deben resolverse

Mover una aplicación de un espacio a otro en Marshmallow y superior casi siempre resultará en eso. La mejor manera de usar el cpcomando, después de eso, elimine la fuente. Una aplicación en data tiene sus propios permisos establecidos que persisten en el sistema y, aunque los cambie, dado que no hay una nueva instancia de creación de archivos, el sistema simplemente no se encarga de activar la preparación de la aplicación. la mejor manera es

cp /data/app/[package.name]-1/app-name.apk /system/app/[app-folder-name]/app-name.apk

Repita esto para las bibliotecas en la carpeta de la aplicación a la carpeta de la aplicación. La carpeta debe verse como:

APPNAME que contiene .apk y la carpeta LIB Carpeta LIB que contiene el tipo de lib como carpeta ARM Carpeta ARM con todas las bibliotecas, por ejemplo, libexample.so

establecer el permiso de todas las carpetas chmod 0755y todos los archivos para el permisochmod 0644

Van a trabajar. Para hacer la vida más fácil, deje de usar los comandos de shell. Busque un administrador de archivos para simplificar su trabajo, pero siempre recuerde que está usando TWRP o Terminal en un dispositivo de arranque, siempre copie y elimine la fuente. Mover muchas ROM en realidad conducirá a eso

NOTA: La carpeta Oat en esa carpeta en /data/app/package.name/ no sirve. Dalvik creará su nuevo archivo classes.dex en /data/dalvik-cache al instalarlo como aplicación del sistema