Mehrere strings.xml vorhanden, Nutzung einer zentralen strings.xml erzwingen

  • Moin moin und ein frohes Fest liebe Android-Profis,


    ich habe ein App bzw. deren strings.xml übersetzt. Es handelt sich hierbei um die Mi-Home App von Xiaomi. Mit der Übersetzung bin ich nun fast durch. Was mir Bauchschmerzen bereitet, ist folgendes Problem. Die App wird über Erweiterungen, welche bei Bedarf heruntergeladen werden, dynamisch erweitert. Dies bedeutet auch, dass in jedem Erweiterungspaket mehrere strings.xml liegen. Diese sollen aber nicht verwendet werden, sondern nur jene zentrale strings.xml, welche nun auf Deutsch vorliegt. Problematisch ist das Ganze deshalb, da die entsprechende strings.xml aus einem Paket eher umständlich über ein Backup und Wiedereinspielen oder aber über Root-Zugriff ausgetauscht werden müsste, falls ich keinen Weg finde, die Haupt-strings als zentrale Übersetzungsdatei zu definieren. Angenommen, ich kopple nun einen Xiaomi Mi Vacuum Robot mit der Mi-Home App, wird die Anwendung die Staubsauger-Erweiterung herunterladen, diese liegt im Original aber nur in Chinesisch vor. Übersetzt habe ich auch diese bereitliegen, würde deren Inhalt gerne in die Haupt-strings packen. Anstatt der chinesischen Sprachdatei soll die Erweiterung nun ihre strings aus der Haupt-strings beziehen und in Deutsch anzeigen. Ist sowas überhaupt möglich?


    Da ich keinen Root-Zugriff auf mein Smartphone habe, arbeite ich aktuell mit dem APK Editor, um mir die .apk nach dem Ändern der strings und zwei anderen Dateien am Computer wieder packen und signieren zu lassen. Klappt alles prima, nur die Sache mit der Erweiterung eben nicht. Leider kann ich dies auch erst testen, wenn mein Staubsauger endlich da ist.


    Ich wäre für Hilfe sehr dankbar. Ich stelle die Übersetzung allen zur Verfügung, die damit arbeiten bzw. sie benutzen wollen. Mittlerweile stecken etliche Dutzend Stunden in der Übersetzung und Testphase, es wäre schade, wenn das Ganze aufgrund einer solchen "Kleinigkeit" nun stocken würde.


    Danke und einige schöne und erholsame Tage zwischen den Jahren, Henne

  • Hallo Ben, danke für deine Antwort. Daran hatte ich bereits gedacht und habe auch eine strings.xml vorbereitet. Völlig richtig, die Erweiterungspakete, hier wäre nur eines für mich relevant, werden als .apk installiert. An die strings heranzukommen ist kein Problem gewesen. Ich hatte nur Sorge, dass die erweiterte strings.xml, in der ich alle strings aus beiden Anwendungsteilen eingebracht, überschüssige bzw. doppelte Einträge gelöscht hatte, nicht anerkannt würde und bevorzugt die strings.xml aus dem Erweiterungspaket genommen würde. Heute habe ich den Sauger bekommen, kann also gleich mal die erweiterte strings testen und bin schon gespannt auf das Ergebnis. Danke erst einmal für deine Anregung. Ich melde mich zurück, sobald mir ein Ergebnis vorliegt. LG Henne

  • So. Leider kein Erfolg. Habe ich mir bereits gedacht. Sehr ärgerlich. Die entsprechende .xml wird aus dem Erweiterungspaket geladen und genutzt. Die zusammengeführte Haupt-strings.xml wird hier leider nicht für die Erweiterung aktiv.


    Gibt es eine Möglichkeit, eine App zu entwickeln, die nur eine Funktion hat, nämlich die entsprechende .apk in einen vorher definierten Ordner zu kopieren? Und das ohne Root?

  • Hi,


    ich versteh immrenoch nicht ganz das prinzip der zusammengeführten haupt string datei. warum übersetzt du nicht die strings der anwendung und die strings der erweiterung und packst dann jeweils beide wieder und installierst sie auf dem device?



    Zitat

    Gibt es eine Möglichkeit, eine App zu entwickeln, die nur eine Funktion hat, nämlich die entsprechende .apk in einen vorher definierten Ordner zu kopieren? Und das ohne Root?

    nein meines wissens nach geht das nicht.

  • Genau das habe ich gemacht. Leider lässt sich die Erweiterung nicht einfach so installieren. Sie wird intern durch die Haupt-App heruntergeladen und dann in einem bestimmten Verzeichnis abgelegt. Mit Root käme man dort super einfach ran, könnte einfach die Erweiterung.apk austauschen gegen die übersetzte Variante und fertig. Probleme bereitet somit der fehlende Root-Zugang. Ich kann die Erweiterung zwar übersetzen, bekomme das Paket ohne adb Umweg über den PC aber nicht mal eben einfach in den entsprechenden Ordner im Verzeichnis



    Code
    ...\com.xiaomi.smarthome\data\com.xiaomi.smarthome\files\plugin\install\mpk\134\5224.apk


    Würde ich die Möglichkeit bekommen, auch ohne Root dort die entsprechende Erweiterung.apk abzulegen, würde die Haupt-App dieselbe, aber unübersetzte Erweiterung nicht herunterladen, weil bereits vorhanden. Die in 5224.apk enthaltene eigene strings.xml in mehreren Sprachen wird leider nicht durch die entsprechende strings.xml in der Haupt-App, welche über alle ihre Strings verfügt, vorzogen. Somit ist die Haupt-App deutsch, die Erweiterung chinesisch.


    Gibt es denn eine Möglichkeit, die Haupt.apk so zu modifizieren, dass die darin enthaltende Erweiterung.apk (habe ich bereits hinzugefügt und gepackt sowie signiert, ging problemlos) einfach in den entsprechenden Ordner geschoben wird bzw. dieser Ordner 134 einfach bei der Installation mit erzeugt wird und die Erweiterung.apk dort hinein kopiert wird? Die entsprechenden Rechte hat die Haupt.apk doch bei der Installation.


    Ginge denn sowas wie das hier? Wie würde man eine solche Kopierprozedur anstoßen, das Codebeispiel betrifft ja wohl nicht Android. Müsste die entsprechende Datei als activity im Manifest nachgetragen werden?


    Code
    File source = new File("storage/emulated/0/download/5224.apk");
    File dest = new File("?/com.xiaomi.smartphone/data/com.xiaomi.smarthome/files/plugin/install/mpk/134/5224.apk");
    try {
        FileUtils.copyDirectory(source, dest);
    } catch (IOException e) {
        e.printStackTrace();
    }

    Könnte ein solcher Prozess dann automatisch ablaufen?



    Code
    public void copy(File src, File dst) throws IOException {
        FileInputStream inStream = new FileInputStream(src);
        FileOutputStream outStream = new FileOutputStream(dst);
        FileChannel inChannel = inStream.getChannel();
        FileChannel outChannel = outStream.getChannel();
        inChannel.transferTo(0, inChannel.size(), outChannel);
        inStream.close();
        outStream.close();
    }
  • Das wollte ich gerade vorschlagen. Warum änderst du nicht einfach den downloadlink?
    Da du das erweiterungs apk ja aber auf dem smartphone hast, musst du Im prinzip nur noch deine apk irgendwo auf dem smartphone speichern und dann in der variable "dest" das java File was auf die erweiterung apk zeigt, speichern. Dann müsste es ohne probleme funktionieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!