Guten Abend

Ich bin am verzweifeln, da ich bei XDA und MIUI-Germany keinen Support erwarten darf, mangels klarer Rechtslage... Vielleicht finde ich hier ein paar kluge Köpfe die einem armen Java-Dev helfen können :smile:

Ausgangslage:
Das Original MIUI-Rom hat eine System-App im Rom namens "SuperMarket.apk". Ein alternativer AppStore aus China. Dieses war bis vor einigen Versionen auch in der Englischen und Deutschen MIUI-Rom enthalten.
Neu ist das SuperMarket.apk nicht mehr im Englischen und Deutschen MIUI-Rom enthalten. Grund dafür ist, dass im SuperMarket auch kostenpflichtige APKs angeboten werden, was vermutlich gegen geltendes US-Amerikanisches sowie Deutsches Recht verstösst. Schweizer recht ist gemäss unserem Jura-Studenten nicht davon betroffen. In der Schweiz darf sowas ohne Probleme übersetzt und auch verwendet werden.
Ich verstehe, dass es jedem Android zugewannten Forum wiederspricht, sowas zu unterstützen. Dennoch möchte ich die App gerne von Chinesisch auf Englisch übersetzen und bei mir und unseren Mitarbeitern installieren, da dass AppShare Feature für unser KMU von Bedeutung ist, wir sind im Mobile-Marketing Sektor tätig und können neue Testbuilds am einfachsten über die AppShare-Funktion des SuperMarket apps intern testen. Das haben wir mit früheren MIUI-Roms super verwenden können.

Extrahieren der APK:


  1. APKTool heruntergeladen und entpackt nach C:\apk\apktool\
  2. Chinesische v1.10.28 MIUI-Rom runtergeladen und aus ..\system\app\ die SuperMarket.apk rauskopiert auf C:\apk\apktool reinkopiert
  3. Deutsche v1.10.28 MIUI-Rom runtergeladen und aus ..\system\framework\ die framework-res.apk rauskopiert auf C:\apk\apktool reinkopiert
  4. cmd geöffnet und zu C:\apk\apktool\ navigiert und Befehl eingegeben:
    apktool if framework-res.apk
  5. apk extrahiert mit folgendem Befehl:
    apktool d SuperMarket.apk

Übersetzen der Strings:

  1. In C:\apk\apktool\SuperMarket\res\values\ die strings.xml übersetzt von Chinesisch auf Englisch

Erneutes packen der APK:

  1. cmd geöffnet und in C:\apk\apktool\ navigiert und Befehl eingegeben:
    apktool b SuperMarket
  2. Nun gibt es in C:\apk\apktool\SuperMarket\dist\ eine nicht signierte SuperMarket.apk, in C:\apk\apktool\SuperMarket\build\ der nicht gezippte Inhalt (Files) der apk.

Nun habe ich mehrere Varianten versucht, das APK zu installieren.

Versuch 1: Installation der unsignierten APK

  • Auf dem Samsung Nexus S ES File Explorer installiert
  • Im ES File Explorer Menu > Einstellungen > Root-Explorer und Dateisystem mounten EIN
  • Die neue, unsignierte SuperMarket.apk (oben Punkt :cool: mit dem ES File Explorer in /system/app/ kopiert und Rechte im Menu Eigenschaften > Permissions > Change von RW-RW-RW- auf RW-R--R-- gesetzt
  • Nexus neu gebootet
  • SuperMarket App wird anscheinend nicht installiert, da sich das Icon nicht wie üblich im Tools Ordner befindet. Ist wohl auch normal, da APKs ohne Zertifikat nicht installiert werden oder?
  • Mit ES File Explorer das APK wieder aus /system/app/ gelöscht und neu gebootet

Variante 2: Signieren der APK mit SignApk

  • Java JDK 7u1-windows-i586.exe installieren
  • SignApk.rar runtergeladen und entpackt in C:\apk\SignApk\
  • openssl v0.9.8k win32 runtergeladen und entpackt in C:\apk\openssl\
  • In Windows 7 Start > Systemsteuerung > System > Erweiterte Systemeinstellungen > Tab:Erweitert > Umgebungsvariablen > Benutzer und Systemvariable hinzugefügt mit den Buttons Neu:
    Name der Variablen: OPENSSL_CONF
    Wert der Variablen: C:\apk\openssl\openssl.cnf
  • cmd als Administrator gestartet und zu C:\apk\openssl\bin\ gewechselt
  • Befehl ausgeführt:
    openssl genrsa -out key.pem 1024
  • Befehl ausgeführt:
    openssl req -new -key key.pem -out request.pem
    Country Name: CH
    State or Province Name: BE
    Locality Name: BE
    Organization Name: MIUI
    Organizational Unit Name: MIUICH
    Common Name: Jan
    Email:
    underlines@g_m_a_i_l.com
    Password: ******
    Optional company name: MIUI
  • Befehl ausgeführt:
    openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
  • Befehl ausgeführt:
    openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 –nocrypt
  • Kopieren der certificate.pem und key.pk8 aus C:\apk\openssl\bin\ in C:\apk\SignApk\
  • SuperMarket.apk (aus Punkt 8 oben) in C:\apk\SignApk\ kopiert
  • cmd gestartet, zu C:\apk\SignApk\ gewechselt und Befehl ausgeführt:
    java -jar signapk.jar certificate.pem key.pk8 SuperMarket.apk SuperMarketSigned.apk
  • SuperMarketSigned.apk auf das Android kopiert und mit ES File Explorer in /system/app/ kopiert und umbenannt zu SuperMarket.apk
  • Permissions auf RW-R--R-- gewechselt
  • Andoird reboot
  • Icon erscheint, heisst aber App Name, beim starten erscheint ein Force Close: App Name (Prozess com.miui.supermarket)

Variante 3: .odex Datei vergessen

  • Da anscheinend die System-Apps von MIUI noch .odex files benötigen, habe ich dieses aus dem Chinesischen MIUI Rom extrahiert, es befindet sich auch dort, wo das SuperMarket.apk ist und heisst SuperMarket.odex
  • Mit ES File Explorer habe ich die odex Datei in /system/app/ kopiert und das Android gebootet
  • SuperMarket befindet sich auf dem Homescreen aber heisst App Name und hat das richtige Symbol (Einkaufstüte)
  • Das App scheint zu laden, sich aber gleich ohne Meldung zu schliessen

Variante 4: Original .odex und Original .apk verwenden

  • Original SuperMarket.apk und SuperMarket.odex aus dem Chinesischen rom kopiert
  • Eingefügt auf das Andoid in /system/app/
  • Reboot
  • Starten des Chinesischen Apps schlägt ohne Fehlermeldung fehl
  • LogCat:

    11-01 13:09:47.179 E/dalvikvm(120): odex source not available -- failing
    11-01 13:09:47.210 E/dalvikvm(5583): /system/app/SuperMarket.apk odex has stale dependencies
  • Ich habe ja die odex im /system/app/ Ordner, aber gemäss XDA sollte diese automatisch im dalvik-cache unter /data/dalvik-cache/ ein File erstellen, oder?