3 Stimmen

Wie kann ich dafür sorgen, dass ein Benutzer eine vorinstallierte Android-App nicht löschen kann?

Was muss ich tun, wenn ich ein OEM bin, der seine eigene Firmware herstellt, und ich möchte, dass eine Anwendung so auf dem Gerät vorinstalliert wird, dass sie nicht gelöscht werden kann?

Angenommen, ich stelle das ACME Gadget 2000 her, und wenn der Benutzer es aus der Verpackung nimmt, hat es bereits meine App mit Katzen, die lustige Dinge sagen, und ich möchte nicht, dass der Benutzer sie löschen kann, was genau muss ich dann mit der APK tun?

Ich habe ein Motorola Droid X von Verizon, auf dem sich einige Anwendungen befinden, die ich nicht löschen kann. Wie machen sie das?

Ich danke Ihnen vielmals.

David

5voto

eldarerathis Punkte 34379

OEM-Anwendungen, die nicht entfernt werden können, werden auf dem /system/app Verzeichnis (zumindest in allen Fällen, die ich bisher gesehen habe, es kann aber auch Ausnahmen geben). Sie können nicht deinstalliert werden (ohne das Gerät zu rooten), weil die /system Partition ist standardmäßig schreibgeschützt gemountet. Ich kenne keine Möglichkeit, eine .apk selbst so zu gestalten, dass sie deinstalliert werden kann, da es offensichtlich erhebliche Sicherheitsimplikationen gibt, wenn man Entwicklern dies erlaubt.

Beispiel für die Auflistung einer Halterung auf einem Samsung Fascinate:

/dev/block/stl9 /system rfs ro ,relatime,vfat,log_off,check=no,gid/uid/rwx,iochaset=utf8 0 0

0voto

Barmaley Punkte 16398

Ich meine, es ist ein bisschen schwierig, aber es ist machbar. Sie müssen zuweisen BroadcastReceiver der ausgelöst wird, wenn android.intent.action.PACKAGE_REMOVED , wie:

 <receiver android:name ="com.mydomain.myapplication.PackageReceiver">
            <intent-filter>
              <action android:name="android.intent.action.PACKAGE_REMOVED"/>            
              <data android:scheme="package" />
            </intent-filter>
 </receiver>

Und dann, wenn du diese Absicht in deinem BroadcastReceiver - einfach stornieren. Wahrscheinlich sollten Sie die Priorität des Absichtsfilters so festlegen, dass die Sendung vor anderen empfangen wird.

Das Problem besteht jedoch darin, dass das Paket, das entfernt werden soll, nicht in die android.intent.action.PACKAGE_REMOVED . Das bedeutet, dass Sie Ihre eigene separate Anwendung/Paket behalten müssen, die einen Dienst haben wird, der Ihre Anwendung deinstalliert.

Das ist das allgemeine Schema - aber wie es in der Realität funktionieren würde - ich weiß es nicht... Versuchen Sie es!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X