- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Android 4.x 中,将 APK 文件放入/system/priv-app 就足够了,包管理器会识别该新文件并(卸载)安装相应的应用程序或服务。
从 Android L 开始,仅将文件放入该目录似乎是不够的 - 需要重新启动系统才能强制 Android 识别该更改。
有没有人知道如何规避这个问题?也许使用任何 setprop ctl.restart xxx
或通过终止专用服务?
编辑:
以下是 logcat 的一些日志:
su
mount -o remount rw /system
cd /system/priv-app
mv ../AARSCService.apk . // move from /system to /system/priv-app
W/mv ( 3268): type=1400 audit(0.0:53): avc: denied { rename } for name="AARSCService.apk" dev="mmcblk0p22" ino=23041 scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0 tclass=file
(但文件已被移动,因为 Nexus 7 Android Android L P2 的当前根实现禁用了根命令的 SELinux!)
-> APK 未加载且未在应用列表中列出 -> 与预期不同,APK 将在 Android 4.4 上的 priv-app 文件夹中自动安装。
reboot
I/PackageManager( 567): /system/priv-app/AARSCService.apk changed; collecting certs
-> APK 已加载并列在应用列表中 -> 符合预期
su
mount -o remount rw /system
cd /system/priv-app
mv AARSCService.apk .. // move from /system/priv-app to /system
W/mv ( 3189): type=1400 audit(0.0:31): avc: denied { rename } for name="AARSCService.apk" dev="mmcblk0p22" ino=23041 scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0 tclass=file
(但文件已被移动,因为 Nexus 7 Android Android L P2 的当前根实现禁用了根命令的 SELinux!)
-> APK 仍然加载并列在应用程序列表中,应用程序中的服务仍然可以从另一个应用程序绑定(bind) -> 与预期不同,一旦从 Android 4.4 上的 priv-app 文件夹中删除,APK 将自动卸载。
reboot
W/PackageManager( 570): System package eu.airaudio.aarscservice no longer exists; wiping its data
-> APK 不再加载,也不再列在应用列表中 -> 正如预期的那样
编辑 2:
在无根的 Android L (21) 模拟器上有相同的行为 - 当然,没有 SELinux 警告。但是 APK 在重启后也只是(未)安装(=kill zygote)。
最佳答案
比较 KitKat 和 Lollipop 的 PackageManagerService
的源代码可以看到显着的变化,并且一些明显与此变化相关。
PackageManagerService.java
on Lollipop
PackageManagerService.java
on KitKat
问题主题最重要的变化是删除了对 AppDirObserver
(PackageManagerService
的嵌套类)的所有引用,这些引用已初始化以监视所有目录(附件图像显示了使用它的相关代码的比较。右侧显示 KitKat 代码,左侧显示 Lollipop)
仍未找到解决方案,但可能会帮助其他人解决问题。
关于Android 5.0/ Lollipop : Force rescan of/system/priv-app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26487750/
我遇到了很棒的ctrlp.vim plugin 。它是 Command-T plugin 的一个很好的替代品。我以前用过。我不喜欢 Command-T 的是,在启动 vim 后第一次调用 Comman
我正在使用 java jinput 库从游戏 handle 读取数据,但我无法重新加载 Controllers,我用它来加载它们: public Controller[] findStickContr
如何避免在 Git GUI 中扫描不必要的/临时文件?例如 obj、pdb 文件等...? 最佳答案 通常的机制适用,即: 在“.git/info/exclude”中列出目录、文件或模式 - 这将是每
在 Android 4.x 中,将 APK 文件放入/system/priv-app 就足够了,包管理器会识别该新文件并(卸载)安装相应的应用程序或服务。 从 Android L 开始,仅将文件放入该
因此,我的应用根据用户的请求从在线来源下载图像。通过 Activity 中的按钮,用户可以选择隐藏或显示图库中的图像。这很简单,我只是根据需要添加或删除一个 .nomedia 文件。但是,我想每次都重
我正在尝试编译第三方项目,但遇到了一些链接问题。我在解决小问题时没有遇到太大问题,但我注意到它们是项目或解决方案上下文菜单中的“重新扫描解决方案”选项。 我点击了它,但它似乎没有做任何事情。它到底有什
我是一名优秀的程序员,十分优秀!