APK-Datei neu verpacken, um benutzerdefinierte Assets zu enthalten - welches Build-Tool soll verwendet werden?

9

Aktualisieren : Dies ist ein alter Beitrag, und Verweise auf defekte aapt Versionen sind veraltet.

Basierend auf früheren Rückmeldungen speichern ich benutzerdefinierte Textfelder im Anlagenverzeichnis meiner App.

Ich schreibe die App unter Verwendung der Standardbenutzerdetails in einer Asset-Datei, und der Client möchte die App für jeden Benutzer neu erstellen, einschließlich der Details dieses Benutzers in der Asset-Datei.

(Ich bin mir bewusst, dass diese Methode einige gravierende Mängel aufweist, aber der Klient ist immer noch daran interessiert, es auf diese Weise zu tun - siehe Login-Details in APK-Datei einbetten, für jeden Benutzer (oder andere Optionen?) anders )

Diese Frage bezieht sich auf Probleme, die ich beim Neuerstellen der APK-Datei habe, nachdem ich sie entpackt habe und die benutzerdefinierte Asset-Datei aktualisiert habe. Ich bin davon überzeugt, dass mir etwas Kleines fehlt, aber die Dokumentation und Beiträge, die ich zu diesen Methoden gefunden habe, sind für einen Neuankömmling nicht hilfreich genug.

  1. aapt - Android SDK-Tool: Leider sind die Android-Dokumente auf "Using aapt" auf den Android-Dokumenten [Link 2 unten] sehr begrenzt. Der Konsolenbefehl -help zeigt ein bisschen mehr Informationen an. Wenn Sie versuchen, eine Datei nur zur Datei test.apk hinzuzufügen, wird das Original gelöscht und eine neue Datei test.apk.zip erstellt, die nur die Datei enthält, die ich hinzufügen wollte. Ich war nicht in der Lage, die korrekte Befehlszeilenkombination zu finden, um eine entpackte apk zu nehmen und neu zu verpacken - das wäre mein erster Preis.

  2. apkbuilder - Android SDK-Tool: Erstens ist dieses Tool veraltet, was ein negativer Punkt dafür ist. Ich kann es auch nicht mit dem funktionieren, was ich in diesem entpackten Ordner habe. Ich denke, ich vermisse einen Vor-Apkbuilder-Schritt, da der Apkbuilder nach einem Zip-Archiv für Ressourcen fragt und ich einen Ressourcenordner habe.

  3. ant - build tool: Andere ähnliche Beiträge sagen, mit Ameisen zu bauen, anstatt die Android - Tools zu verwenden. Ich habe Probleme, zur Arbeit zu kommen. Ein bestimmter Link zu Get Ant mit Android [Link 3 unten] sieht vielversprechend aus, aber sieht aus wie es für einen anderen Android SDK ist (meine build.xml, die von Android generiert wird, sieht anders aus). Leider weiß ich wenig über Ameisen und habe Probleme, Experte genug zu werden, um mein aktuelles Problem zu lösen.
    Weiter zu NickT Lösung unten - Ausführen der Ant-Skript gibt mir den Fehler
    Taskdef-Klasse com.android.ant.SetupTask kann nicht mit dem Klassenlader AntClassLoader [] gefunden werden.
    Ich habe einige Verweise online auf diesen Fehler gefunden, habe bestätigt, dass local.properties eine sdk.dir Einstellung hat, die auf meinen Android SDK Installationsordner verweist (sdk.dir = / Applications / android-sdk-mac_86).

  4. ?????: Es könnte eine andere Option geben, die ich nicht aufgelistet / entdeckt habe, worüber ich gerne etwas erfahren würde.

Mir ist klar, dass das Eintauchen in die Gänge, die normalerweise von meiner Idee abgedeckt werden, zu Schwierigkeiten führen kann. Aber ich weiß, dass viele der SO-Benutzer viele dieser Dinge tun können, und ich hoffe, dass ich das Interesse einiger von ihnen bekomme. Danke für jede Hilfe.

(Eclipse 3.6 auf Mac Snow Leopard 10.6 64 Bit)

PS, ich kann noch nicht mehr als einen Hyperlink posten, daher habe ich diese Adressen hinzugefügt, um mehr Informationen zu meiner Frage anzuzeigen.

(1): stackoverflow.com/questions/4783160/embed-login-details-in-apk-file-different-for-e-user-user-other-options

(2): developer.android.com/guide/developing/tools/aapt.html

(3): www.disgruntledrats.com/?p=27

    
Richard Le Mesurier 25.01.2011, 11:59
quelle

4 Antworten

9

Um meine eigene Frage mit der Methode zu beantworten, die wir schließlich gewählt haben, und "für die Aufzeichnung":

Ich konnte Ant nicht richtig für mich arbeiten lassen (mein Mangel an Verständnis).

Ich benutzte das aapt-Tool. Es funktioniert wie in der Android-SDK-Dokumentation und ist wirklich sehr einfach zu bedienen:

%Vor%

Dies wird eine readme.txt-Datei hinzufügen (wir haben sie in einem Unterordner des aktuellen laufenden Ordners, den so genannten Assets, gespeichert. Wenn Sie die neue Datei irgendwo anders speichern möchten, bietet aapt einen Befehlszeilenschalter an, um dies zu spezifizieren)

Allerdings gibt es einige Einschränkungen:

  1. Ich konnte nicht mit signierten APK-Dateien arbeiten.
  2. einige Versionen von aapt funktionieren nicht richtig! Sie erkennen den Unterordner nicht ...

Um 1 zu lösen:

  1. Exportiere das APK aus der Eclipse als unsigniertes APK.
  2. Verwenden Sie das keytool, um einen Schlüssel zu generieren (siehe Android-Entwicklerdokumente).
  3. Benutze aapt.
  4. Unterschreiben Sie die APK mit jarsigner.

Um 2 zu lösen:

Ich kann damit nicht wirklich helfen. Jede Version des SDK (auf Mac), die ich herunterladen wollte, enthielt ein aapt-Tool, das die Unterordner nicht erkannte. Ein Kollege hat eine funktionierende Version heruntergeladen, aber wir konnten immer noch nicht herausfinden, welche Version er heruntergeladen hat, also haben wir diese "magische" Kopie behalten und umbenannt und werden sie benutzen, bis wir eine neue Version gefunden haben, die funktioniert.

    
Richard Le Mesurier 09.02.2011, 12:16
quelle
3

Die einfachste Lösung wäre, Ihrem Client die Vorlagenquelle der App mit einem Skript zu geben, das die App von Grund auf neu erstellt.

Auf diese Weise muss Ihr Client einfach die Assets im Ordner ändern, doppelklicken Sie auf eine Batch-Datei und erhalten Sie die Apk in etwa einer Minute.

Sie müssen nichts über ANT wissen, um ohne die IDE zu kompilieren und zu verpacken, folgen Sie einfach den Schritten hier:

Ссылка

Das ANT-Skript wird mit den Befehlen "android create" und "android update" generiert. Sie müssen dann nur "ant release" ausführen und los gehts.

    
Yahel 25.01.2011 12:34
quelle
2

Ein bisschen spät, wahrscheinlich, aber dieser Post erscheint in vielen Suchen, also dachte ich, dass das von Interesse sein könnte.

Ich habe gerade ein Standard-Zip-Tool verwendet, um die APK durch Entfernen des META-INF-Ordners zu "signieren", habe alle Asset-Dateien aktualisiert und dann die APK mit jarsigner beendet. (Wenn ich eine Möglichkeit finden könnte, JARs ohne Jarsigner zu signieren, so dass wir das Java SDK nicht überall installiert hätten, wäre das wirklich nützlich - Ideen für irgendjemanden?)

    
Grant Shirreffs 19.05.2011 03:34
quelle
1

Um Yahel's Antwort zu erweitern, denke ich, dass Ant der richtige Weg ist. Es kann ein wenig einschüchternd sein, aber es ist überraschend, wie gut es "out of the box" funktioniert, ohne zu viel Unsinn zu machen. Die Anpassung erfordert ein wenig Lesen, aber ich habe es geschafft, also gebe ich Ihnen den Vorteil meiner Erfahrung.

Erstellen Sie zuerst eine Beispielanwendung wie vorgeschlagen. Nehmen wir an, Sie möchten, dass es in c: \ junk erstellt wird. Dann geben Sie an Ihrer Eingabeaufforderung im Verzeichnis Android SDK \ tools Folgendes ein:

%Vor%

(-t 5 gibt dir API-Level 7, gib 'Android-Listenziele' ein, um weitere Optionen zu sehen)

Angenommen, Sie haben Ihre Projekte in einem Eclipse-Arbeitsbereich erstellt (es ist / dev / projects / EclipseHelios / AndroidWorkspace auf meinem Computer). Kopieren Sie die Build-Dateien build.xml und build.properties der Beispiel-App in den Projektordner in Eclipse

und bearbeiten Sie die neu erstellte build.xml und entfernen Sie die Zeile

%Vor%

und ersetzen Sie es mit nur:

%Vor%

Bearbeiten Sie nun die neu erstellten build.properties, die bis auf Kommentare leer sind und fügen Sie (falls erforderlich) hinzu:

%Vor%

Wenn Sie dann eine Eingabeaufforderung in / dev / projects / EclipseHelios / AndroidWorkspace / YourActualProjectName

erhalten

und geben Sie 'ant release' ein, Sie sollten mit einer gebauten und signierten APK in / dev / projects / AntBuilds / YourActualProjectName

enden

Sie sollten in der Lage sein, den Speicherort der Assets anzupassen, indem Sie in der Datei build.properties

einen Eintrag assets.dir hinzufügen     
NickT 25.01.2011 14:15
quelle

Tags und Links