Ich habe react-native init MyApp
verwendet, um eine neue React Native-App zu initialisieren . Diese erstellte unter anderem ein Android-Projekt mit dem Paket com.myapp
.
Wie kann ich diesen Paketnamen am besten ändern, beispielsweise in: com.mycompany.myapp
?
Ich habe versucht, es in AndroidManifest.xml
zu ändern, aber es wurden andere Fehler erzeugt. Ich gehe davon aus, dass dies nicht der Fall ist.
Irgendeine Idee?
Ich habe den Unterordner-Namen des Projekts von "Android/app/src/main/Java/MY/APP / OLD_ID /" in: "Android/app/src/main/Java geändert/MY/APP / NEW_ID / "
Dann haben Sie die alten und neuen Paket-IDs manuell gewechselt:
In: Android/app/src/main/Java/MY/APP/NEW_ID/MainActivity.Java:
package MY.APP.NEW_ID;
In Android/app/src/main/Java/MY/APP/NEW_ID/MainApplication.Java:
package MY.APP.NEW_ID;
In Android/app/src/main/AndroidManifest.xml:
package="MY.APP.NEW_ID"
Und in Android/app/build.gradle:
applicationId "MY.APP.NEW_ID"
(Optional) In Android/app/BUCK:
Android_build_config(
package="MY.APP.NEW_ID"
)
Android_resource(
package="MY.APP.NEW_ID"
)
Gradle 'Reinigung am Ende (in / Android Ordner):
./gradlew clean
Ich verwende das rease-native-rename npm-Paket.
Installieren Sie mit
npm install react-native-rename -g
Führen Sie dann im Stammverzeichnis Ihres React Native-Projekts Folgendes aus
react-native-rename "MyApp" -b com.mycompany.myapp
So ändern Sie den Paketnamen von com.myapp in: com.mycompany.myapp (zum Beispiel)
Öffnen Sie für die Android-App das build.gradle auf Modulebene. Die im Android/App-Ordner. Du wirst finden
...
defaultConfig {
applicationId com.myapp
...
}
...
Ändern Sie die "com.myapp" in das, was Sie benötigen.
Hoffe das hilft.
Das Init-Skript generiert eine eindeutige Kennung für Android, die auf dem von Ihnen angegebenen Namen basiert (z. B. com.acmeapp
für AcmeApp
).
Sie können sehen, welcher Name generiert wurde, indem Sie in Android/app/build.gradle
nach dem Schlüssel applicationId suchen.
Wenn Sie diesen eindeutigen Bezeichner ändern müssen, führen Sie ihn wie folgt aus:
Ersetzen Sie im Ordner /Android
alle Vorkommen von com.acmeapp
durch com.acme.app
.
Ändern Sie dann die Verzeichnisstruktur mit den folgenden Befehlen:
mkdir Android/app/src/main/Java/com/acme
mv Android/app/src/main/Java/com/acmeapp Android/app/src/main/Java/com/acme/app
Für jeden Punkt in der App-Kennung benötigen Sie eine Ordnerebene.
Quelle: https://blog.elao.com/de/dev/from-react-native-init-to-app-stores-real-quick/
Gehe zu Android Studio
Klicken Sie mit der rechten Maustaste auf Ihr Paket (wahrscheinlich com) -> Refraktor -> Umbenennen -> Geben Sie im Dialogfeld einen neuen Paketnamen ein -> Do Refraktor
Es wird Ihren Paketnamen überall umbenennen.
Wenn Sie Android Studio verwenden,
com.myapp
in com.mycompany.myapp
ändern
erstellen Sie eine neue Pakethierarchie com.mycompany.myapp unter Android/app/src/main/Java
.
Kopieren Sie alle Klassen von com.myapp
nach com.mycompany.myapp
mit der Android Studio-GUI
Android Studio kümmert sich darum, für alle kopierten Klassen einen geeigneten Paketnamen anzugeben. Dies ist nützlich, wenn Sie über einige benutzerdefinierte Module verfügen und nicht in allen .Java-Dateien manuell ersetzen möchten.
Android/app/src/main/AndroidManifest.xml
und Android/app/build.gradle
aktualisieren (com.myapp
durch com.mycompany.myapp
ersetzen)
Synchronisieren Sie das Projekt (gradle build)
Befolgen Sie die einfachen Schritte, um Ihren app name
und Package name
umzubenennen
name
in der package.json
-Datei nach Bedarf und speichern Sie sie.react-native upgrade
aus.Hinweis: Wie ivoteje50 im Kommentar erwähnt, entfernen Sie den Android-Ordner nicht, wenn Sie bereits den offiziellen Anweisungen zum Generieren eines Keystores gefolgt sind, da dadurch der Keystore entfernt wird und Sie keine neue App erneut signieren können.
Ich habe eine Lösung basierend auf der Antwort von @ Cherniv (funktioniert für mich unter macOS). Zwei Unterschiede: Ich habe ein Main2Activity.Java im Java-Ordner, mit dem ich dasselbe mache, und ich mache mir nicht die Mühe, ./gradlew clean aufzurufen, da es so aussieht, als würde der reaktions-native Packager das sowieso automatisch tun.
Wie auch immer, meine Lösung macht das, was Cherniv tut, außer dass ich ein bash-Shell-Skript dafür erstellt habe, da ich mehrere Apps mit einem Satz von Code baue und den Paketnamen bei jeder Ausführung meiner npm-Skripts problemlos ändern kann.
Hier ist das Bash-Skript, das ich verwendet habe. Sie müssen den Paketnamen ändern, den Sie verwenden möchten, und alles hinzufügen, was Sie möchten. Hier sind jedoch die Grundlagen. Sie können eine .sh-Datei erstellen, die Berechtigung erteilen und sie dann in demselben Ordner ausführen, in dem Sie Reacti-Native ausführen:
rm -rf ./Android/app/src/main/Java
mkdir -p ./Android/app/src/main/Java/com/MyWebsite/MyAppName
packageName="com.MyWebsite.MyAppName"
sed -i '' -e "s/.*package.*/package "$packageName";/" ./Android/app/src/main/javaFiles/Main2Activity.Java
sed -i '' -e "s/.*package.*/package "$packageName";/" ./Android/app/src/main/javaFiles/MainActivity.Java
sed -i '' -e "s/.*package.*/package "$packageName";/" ./Android/app/src/main/javaFiles/MainApplication.Java
sed -i '' -e "s/.*package=\".*/ package=\""$packageName"\"/" ./Android/app/src/main/AndroidManifest.xml
sed -i '' -e "s/.*package = '.*/ package = '"$packageName"',/" ./Android/app/BUCK
sed -i '' -e "s/.*applicationId.*/ applicationId \""$packageName"\"/" ./Android/app/build.gradle
cp -R ./Android/app/src/main/javaFiles/ ./Android/app/src/main/Java/com/MyWebsite/MyAppName
HAFTUNGSAUSSCHLUSS: Sie müssen zuerst den Kommentar von MainApplication.Java am unteren Rand der Java-Datei bearbeiten. Es hat das Wort "Paket" im Kommentar. Aufgrund der Funktionsweise des Skripts nimmt es eine beliebige Zeile mit dem Word-Paket und ersetzt es. Aus diesem Grund ist dieses Skript möglicherweise nicht zukunftssicher, da möglicherweise dasselbe Word an anderer Stelle verwendet wird.
Zweiter Haftungsausschluss: Die ersten 3 sed-Befehle bearbeiten die Java-Dateien aus einem Verzeichnis namens javaFiles. Ich habe dieses Verzeichnis selbst erstellt, da ich einen Satz von Java-Dateien haben möchte, die von dort kopiert werden (da ich möglicherweise in Zukunft neue Pakete hinzufüge). Sie möchten wahrscheinlich dasselbe tun. Kopieren Sie also alle Dateien aus dem Java-Ordner (suchen Sie die eigentlichen Java-Dateien durch ihre Unterordner) und legen Sie sie in einem neuen Ordner mit dem Namen javaFiles ab.
Dritter Haftungsausschluss: Sie müssen die packageName -Variable so bearbeiten, dass sie mit den Pfaden oben und unten im Skript übereinstimmt (com.MyWebsite.MyAppName bis com/MyWebsite/MyAppName).
sie können einfach das React-native-Rename-Paket npm verwenden.
Installieren Sie mit
npm install react-native-rename -g
Führen Sie dann im Stammverzeichnis Ihres React Native-Projekts Folgendes aus
react-native-rename "MyApp" -b com.mycompany.myapp
react-native-rename on npm
beachten Sie jedoch, dass diese Bibliothek Ihren MainActivity.Java
und MainApplication.Java
. entfernt, bevor Sie den Paketnamen ändern. Geben Sie eine Sicherungskopie dieser beiden Dateien an und setzen Sie den Paketnamen nach dem Ändern wieder an seinen Platz. Diese Lösung funktioniert für mich
weitere Informationen: React-native-umbenennen
Gehen Sie zu Android Studio, öffnen Sie die App, klicken Sie mit der rechten Maustaste auf Java und wählen Sie Neu und dann Paket.
Geben Sie den gewünschten Namen ein (z. B. com.something).
Verschieben Sie die Dateien aus dem anderen Paket (das Sie umbenennen möchten) in das neue Paket. Löschen Sie das alte Paket.
Gehen Sie in Ihrem Editor zu Ihrem Projekt und verwenden Sie die Verknüpfung zum Suchen in allen Dateien (auf einem Mac ist Shift cmd F). Geben Sie den Namen Ihres alten Pakets ein. Ändern Sie alle Verweise auf den neuen Paketnamen.
Gehen Sie zu Android Studio, Build, Clean Project, Rebuild Project.
Erledigt!
Fröhliches Codieren :)
Drücken Sie im VS-Code Ctrl + Shift + F
und geben Sie Ihren alten Paketnamen unter "Suchen" und Ihr neues Paket unter "Ersetzen" ein. Drücken Sie dann auf "Alle Vorkommen ersetzen".
Auf keinen Fall der pragmatische Weg. Aber es ist der Trick für mich getan.