Android – Whitelabel App

HINWEIS: Das ist eine alte Frage, und die entsprechend alte Stimme Antwort ist vielleicht nicht relevant – siehe die neueren Antworten über Build-Varianten (aka App Flavours).

Ich habe eine Frage über die Veröffentlichung auf dem Markt.

  • So filtern Sie ein RecyclerView mit einem SearchView
  • Fehler beim Verwenden der RecyclerView: Das angegebene Kind hat bereits ein übergeordnetes Element
  • Android-Integration mit CCAvenue
  • Wie berechnen Sie Abstand von verschiedenen Markierungen in einer Karte und dann abholen die am wenigsten
  • Hinzufügen von Ansichten in einer bestimmten Reihenfolge und Speichern dieser Reihenfolge
  • NoSuchMethod mit AddAll im Adapter?
  • Unternehmen, X, bietet ähnliche Dienstleistungen für Unternehmen A & B, und beide A & B wollen eine App auf dem Markt. Firma X möchte nur eine App schreiben und zwischen ihnen mit den entsprechenden Logos, Konfigurationseinstellungen, Sprachzeichenfolgen zur Kompilierzeit unterscheiden. Allerdings, wenn es um die Veröffentlichung geht, haben die Apps den gleichen App-Paket-Namen (mit Shared-Code-Basis). Die App wird beibehalten und

    Also, da ich eine einzige Codebasis behalten möchte, was ist die beste Praxis hier?

  • Probleme beim Entfernen von TextViews aus einem LinearLayout programmgesteuert
  • Horizontale Schriftrolle auf Textansicht auf Android?
  • ListFragment vs ListActivity - Welches zu verwenden?
  • Remote-Bilder in einem ListView mit ViewHolder-Muster
  • Ist es möglich, ein Array von Bitmap in Android zu erstellen
  • Rapid App Prototyping Tools für Android und iOS
  • 7 Solutions collect form web for “Android – Whitelabel App”

    Soweit ich weiß, können Sie nicht zwei Apps auf dem Markt mit dem gleichen Paketnamen haben. Um das Kopieren von freigegebenen Code, Layouts, Drawables usw. zu vermeiden, würde ich empfehlen, diese Ressourcen in ein Bibliotheksprojekt zu verwandeln und dann dieses Projekt von App A und B zu verweisen, die du erwähnt hast und in diesen Apps nur die Werte überschreiben, die du ändern möchtest .

    Mehr über Bibliotheksprojekte in der offiziellen Dokumentation .

    Sehen Sie diesen Blogpost, blog.javia.org/android-package-name/ .

    [Edit] Um einen Verlust von Informationen zu vermeiden, wenn dieser Link stirbt: Es ist ein Beitrag über die Differenz der Anwendungspaketdefinition und der Java-Paketdefinition. Es ist möglich, das Anwendungspaket (innerhalb des Manifests) zu ändern, ohne das Java-Paket der Quellen zu berühren. [/ Edit]

    Johans Antwort ist richtig. In meiner Firma haben wir gerade ein kleines Skript gebaut, das "Marken" der Anwendung von einer "Basis" -Anwendung schafft, indem wir nicht nur neue Ressourcen anwenden, sondern auch einen benutzerdefinierten Paketnamen erstellen und die entsprechenden XML-Dateien patchen.

    Ich stimme zu, was Reflog sagte, meine Firma benutzte ein Ameisenskript, um den Paketnamen für jede Marke zu ändern und auch die Ressourcen nach Bedarf zu ersetzen. Ich schrieb die Basis-App mit Default-Verhalten im Auge, und erstellt Ordner für jede weitere Marke, die nur die Dateien, die sich von der Basis, wie die mehrfachen Zeichnungsordner mit verschiedenen dpi-Größen ("drawable", "drawable-hdpi"). ..). Andere Änderungen beinhalten das Ändern der Strings-Dateien für jede Marke für entsprechende Farben und legalen Text.

    Durch die Benennung im Lokalisierungsstil (zB "drawable-en-rAA-hdpi", "layout-en-rBB" …) konnte ich das schnell in mehreren Emulatoren testen, indem ich die "Custom Locale" App eröffnete In jedem Emulator und legen Sie das Gebietsschema auf "en_AA", "en_BB" nach Bedarf. Durch das Speichern mehrerer Kopien der Basis-AVD konnte ich diese Einstellungen speichern, damit ich nicht im Emulator wechseln musste, um alle endgültigen Marken zu testen.

    Eine Vorbehalte zu diesem Ansatz ist diese emulierte Version der App wird alle Dateien in der .apk enthalten, während die Ameise Skript Streifen aus den Duplikaten. Auch wenn diese "volle" .apk auf Geräten installiert wird, wird nur das Standardverhalten angezeigt, es sei denn, Sie können das Gebietsschema auf dem Gerät so einstellen, dass es dem Markengebietsschema entspricht. (Benutzerdefiniertes Gebietsschema wurde nicht auf einem meiner physischen Geräte installiert.) Das funktioniert gut, wenn Sie vorsätzlich vorhandene Gebietsschemata (en_AU, en_CA, en_GB) verwenden, aber für benutzerdefinierte Namen (en_B1, en_XX) problematisch sein können.

    Ich weiß, ich bin ein bisschen spät zur Party, aber du kannst das tun durch:

    1) Ändern Sie Ihre project.properties, indem Sie die Zeile manifestmerger.enabled=true hinzufügen

    2) Ändern Sie Ihren Paketnamen im Manifest.

    3) Aktualisieren / Ändern Sie Ihre Ressourcen, Zeichenketten, Strings, was auch immer.

    4) Markiere dein Masterprojekt als Bibliothek und setze die Abhängigkeit dazu in deinem White-Label-Projekt. Voila, Weiß-Label!

    Das ist eine ziemlich alte Frage. Doch jetzt denke ich, dass der beste Ansatz ist, Produkt-Aromen für Android mit dem neuen Gradle-Build-System zu verwenden.

    • Für jeden Geschmack können Sie applicationId definieren. Es gibt einen Unterschied zwischen packageName und applicationId . ApplicationId identifiziert Ihre App eindeutig auf dem Gerät und im Google Play Store. Letzteres ist für Code-Namespace. Hier können Sie mehr lesen: https://developer.android.com/studio/build/application-id.html
    • Für jeden Geschmack können Sie eine andere Zeichenkette, Strings, andere XML-Datei mit bestimmten Ordner für den Geschmack haben. Sie müssen diese Assets nur in die neuen Dateien einfügen, die sich von den Assets im Hauptordner unterscheiden. Dann gibt es buildConfigField du für jeden Geschmack in build.gradle definieren kannst, auf den von Java-Dateien zugegriffen werden kann, wie deine Konfigurationen für jedes Whitelabel.
    • Auch können Sie resValue für jeden Geschmack von dort aus definieren.
    • Sie können auch Ihre AndroidManifest.xml konfigurierbar für Schlüssel usw. mit manifestPlaceholders .

    Was Sie brauchen, sind Build-Varianten (aka App Aromen).

    Hier können Sie hier lesen. https://developer.android.com/studio/build/build-variants.html

    Kurz gesagt, das erlaubt Ihnen, verschiedene Varianten Ihrer App zu haben, die einen Teil des Codes und der Ressourcen teilen, aber auch ihre eigenen Ersatzteile haben können. Sie können verschiedene Paketnamen / ID für jede Variante angeben, unter anderem (wie Logo, Farben, Splash-Screen und sogar Java-Code).

     defaultConfig { applicationId "com.example.example" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0.0" } productFlavors { variantone { applicationId 'com.company1.example' } varianttwo { applicationId 'com.company2.example' } } 

    Sie können Ressourcenordner mit dem Namen der Varianten erstellen, in denen Sie Ihre alternativen Ressourcen oder Quellcode platzieren können. Zum Beispiel, src/variantone/res

    Das Umschalten zwischen den Buildvarianten in Android Studio führt nicht zu Dateiveränderungen (Sie wählen einfach die "Ausgabe"). Sie können APKs für alle Varianten bauen, die Sie zur gleichen Zeit wünschen. Verwenden Sie den Assistenten unter Erstellen / Generieren von signiertem APK.

    PS Hier ist, wie Sie einen anderen Paketnamen für Debug-Builds haben können:

     buildTypes { release { } debug { applicationIdSuffix '.debug' versionNameSuffix '.debug' } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.