如果我是OEM制作自己的固件,并且我希望设备上预装的应用程序无法删除,我需要做什么?
例如,假设我制作了ACME Gadget 2000,并且当用户将其从包装盒中取出时,它已经让我的Cats应用程序说出有趣的东西,而且我不希望用户能够删除它,我究竟与APK有什么关系?
我有一个Verizon摩托罗拉Droid X,它附带了一些我无法删除的应用程序。他们是怎么做到的?
非常感谢。
大卫
答案 0 :(得分:5)
不可移动的OEM应用程序安装在/system/app
目录中(至少在我见过的每种情况下,我想可能有例外)。它们无法卸载(无法生根设备),因为默认情况下/system
分区以只读方式挂载。我不知道有任何方法可以将.apk本身设计为可卸载,因为允许开发人员明显存在重大的安全隐患。
Samsung Fascinate的挂载列表示例:
/ dev / block / stl9 / system rfs ro ,relatime,vfat,log_off,check = no,gid / uid / rwx,iochaset = utf8 0 0
答案 1 :(得分:0)
我的意思是它有点棘手但可以做到。您必须分配BroadcastReceiver
,它在发生android.intent.action.PACKAGE_REMOVED
时触发,如:
<receiver android:name ="com.mydomain.myapplication.PackageReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
然后当你在BroadcastReceiver
中抓住这个意图时 - 只需取消它即可。好吧,可能你应该以在其他人之前接收广播的方式定义意图过滤器优先级。
但问题很简单,即要删除的包不会收到android.intent.action.PACKAGE_REMOVED
。这意味着你必须保留自己独立的应用程序/软件包,这将使服务人员观察谁将要卸载你的应用程序。
这是一般方案 - 但实际上它是如何运作的 - 我不知道......试试!