En el pasado, instalar una aplicación como aplicación del sistema era tan simple como mover el archivo APK a /system/app
o /system/priv-app
. Eliminarlos fue tan simple como borrar el APK.
Ahora, mientras personalizo la ROM estándar del teléfono, noté que todas y cada una de las aplicaciones en la partición del sistema estaban dentro de su propia carpeta. Intenté simplemente colocar el APK en /system/app
o /system/priv-app
, pero no funcionan.
¿Cómo instalo una aplicación como aplicación del sistema en Lollipop? Sospecho que pasa algo con SELinux y el contexto, pero no tengo acceso de root. Sin embargo, tengo acceso de lectura/escritura al sistema de archivos (montando la imagen en Linux).
ACTUALIZACIÓN: Probé la Death Mask Salesman
sugerencia de y eché un vistazo a logcat
. Las aplicaciones que quiero preinstalar (por ejemplo, Instagram) arrojan este error:
01-01 01:04:45.108 5538-5538/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.instagram.android, PID: 5538
java.lang.RuntimeException: Unable to instantiate application com.instagram.app.InstagramAppShell: java.lang.ClassNotFoundException: Didn't find class "com.instagram.app.InstagramAppShell" on path: DexPathList[[zip file "/system/framework/com.google.android.maps.jar"],nativeLibraryDirectories=[/custpack/app/removeable/withlibs/com.instagram.android-1/lib/arm, /vendor/lib, /system/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:572)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4818)
at android.app.ActivityThread.access$1500(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1531)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5624)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.instagram.app.InstagramAppShell" on path: DexPathList[[zip file "/system/framework/com.google.android.maps.jar"],nativeLibraryDirectories=[/custpack/app/removeable/withlibs/com.instagram.android-1/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newApplication(Instrumentation.java:985)
at android.app.LoadedApk.makeApplication(LoadedApk.java:567)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4818)
at android.app.ActivityThread.access$1500(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1531)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5624)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Suppressed: java.lang.ClassNotFoundException: com.instagram.app.InstagramAppShell
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
Síntomas:
Para las personas que planean marcar esto como un duplicado, estas respuestas no funcionan/están desactualizadas/no aplican (no es un sistema en vivo/no tiene acceso a la raíz):
Está bien, lo tengo funcionando. Así es como lo hice:
/system/app/some-folder/
o /system/priv-app/xyz-folder/
.
libs
extraigan sus archivos y otros y se coloquen junto con el APK en carpetas específicas, aunque son bastante raros.lib
u otra carpeta al lado del APK.chcon u:object_r:system_file:s0 /path/to/apk-file.apk
chcon -R u:object_r:system_file:s0 /folder/where/the/APK/is/saved
.Si no se cambia el contexto, Android no tratará su aplicación como una aplicación del sistema. Aparecerá en el iniciador como una aplicación con un icono genérico y zzz.package.name
como nombre.
En los viejos tiempos (por ejemplo, Gingerbread), simplemente tenía que copiar el APK /system/app/
y establecer los permisos adecuados. Los tiempos han cambiado.
Grimorio
Señor del Fuego
Aloha
Grimorio
Aloha
/data/app
a/system/app
.