Zmień nazwę pakietu dla Androida w React Native

179

Kiedyś react-native init MyAppinicjowałem nową aplikację React Native. Stworzyło to m.in. projekt na Androida z pakietem com.myapp.

Jaki jest najlepszy sposób zmiany nazwy pakietu, na przykład na com.mycompany.myapp:?

Próbowałem to zmienić, AndroidManifest.xmlale spowodowało to inne błędy, więc zakładam, że tak nie jest.

Dowolny pomysł?

mllm
źródło
Kliknij lewym przyciskiem myszy na nazwę pakietu i przejdź do opcji Refactor -> Rename, aby zmienić nazwę pakietu.
kunal
To, co teraz działa najlepiej, to po prostu znajdź i zamień
mllm
3
Możesz także wypróbować to saumya.github.io/ray/articles/72
Andy,
dla mnie
funkcja

Odpowiedzi:

411

Zmieniłem nazwę podfolderu projektu z: „ android / app / src / main / java / MY / APP / OLD_ID / ” na: „ android / app / src / main / java / MY / APP / NEW_ID /

Następnie ręcznie przełączono stare i nowe identyfikatory pakietów:

W: android / app / src / main / java / MY / APP / NEW_ID / MainActivity.java :

package MY.APP.NEW_ID;

W systemie Android / app / src / main / java / MY / APP / NEW_ID / MainApplication.java :

package MY.APP.NEW_ID;

W systemie Android / app / src / main / AndroidManifest.xml :

package="MY.APP.NEW_ID"

A w android / app / build.gradle :

applicationId "MY.APP.NEW_ID"

( Opcjonalnie ) W systemie Android / app / BUCK :

android_build_config(
  package="MY.APP.NEW_ID"
)
android_resource(
  package="MY.APP.NEW_ID"
)

Czyszczenie Gradle na koniec (w folderze / android ):

./gradlew clean
Czerniow
źródło
23
Muszę również edytować plik BUCK, aby zastąpić starą wartość pakietu nową. Przy okazji, 2 pliki MainAcitivity.java i MainApplication.java powinny zostać przeniesione do nowej ścieżki fizycznej.
Golden Thumb
4
Zmieniłem też nazwę katalogu android/app/src/main/java/com/old_app_name/na ...com/new_app_name/i wydaje się, że działa.
Nicholas
Wystąpił błąd „Nie udało się sfinalizować sesji: INSTALL_FAILED_UPDATE_INCOMPATIBLE”, dopóki ręcznie nie wymusiłem czyszczenia symulatora urządzenia z systemem Android: adb odinstaluj my.package.name ... Tak więc wskazówki są w porządku, ale symulator Androida może „wstrzymać” stare informacje w zły sposób, przez który wygląda na to, że wskazówki nie działają. (I samo odinstalowanie aplikacji NIE rozwiązało tego problemu!)
Bill Patterson,
Czytałem o tym i wypróbowałem tę bibliotekę: npmjs.com/package/react-native-rename wygląda na to, że działa całkiem dobrze, nie tylko zmienia nazwę aplikacji, ale także może zmienić identyfikator pakietu
fray88
1
zrób to na Androidzie / folderze @Anuj
Czerniow
76

Używam pakietu react-native-rename * npm. Zainstaluj go przez

npm install react-native-rename -g

Następnie z katalogu głównego projektu React Native wykonaj następujące czynności:

react-native-rename "MyApp" -b com.mycompany.myapp
Javid Al Karuzi
źródło
to jest proste i trudne, po prostu muszę ręcznie zaktualizować plik MainApplication.java.
Gopal Devra
59
Dzięki, zepsułem projekt
Leap Hawk
@AkashRajput czy naprawiłeś swój problem? daj nam znać, jeśli znalazłeś jakieś rozwiązanie
Saleem Khan
@SaleemKhan Musiałem ponownie utworzyć projekt. Tym razem z react-native init .. Po prostu skopiuj pliki.
Leap Hawk
5
Zepsuło
24

Aby zmienić nazwę pakietu z com.myappna: com.mycompany.myapp(na przykład),

  1. W przypadku aplikacji na iOS w aplikacji React użyj xcode - ogólnie.
  2. W przypadku aplikacji na Androida otwórz plik build.gradle na poziomie modułu. Ten w android/appfolderze. Znajdziesz
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

Zmień na com.myappcokolwiek potrzebujesz.

Mam nadzieję że to pomoże.

Olusola Omosola
źródło
4
To najłatwiejszy sposób zmiany nazwy pakietu. Nie zmieniając nazwy lokalnego pakietu, spowoduje to zmianę następnego pakietu kompilacji. Dzięki! Po wykonaniu tej czynności zrób ./gradlew cleani wtedy ./gradlew app:assembleRelease.
Michael Harley
2
„Jednak nazwa applicationIdlokalna i packagenazwa lokalna są od siebie niezależne”, „ applicationIdjednoznacznie identyfikuje Twoją aplikację na urządzeniu i w Sklepie Google Play” - developer.android.com/studio/build/application-id
osiemdziesiąt pięć
nie działa dla mnieNo matching client found for package name 'xxxxx'
MichaelMao
10

możesz po prostu użyć pakietu npm react-native-rename.

Zainstaluj za pomocą

npm install react-native-rename -g

Następnie z katalogu głównego projektu React Native wykonaj następujące czynności

react-native-rename "MyApp" -b com.mycompany.myapp

react-native-rename on npm

ale zauważ, że ta biblioteka usuwa MainActivity.javai MainApplication.java. przed zmianą nazwy pakietu wykonaj kopię zapasową z tych dwóch plików, a po zmianie nazwy pakietu po prostu umieść ją z powrotem na swoim miejscu. to rozwiązanie działa dla mnie

więcej informacji: React-native-rename

Moein Hosseini
źródło
1
Brak efektu, jeśli nie zmienisz nazwy aplikacji „Spróbuj inną nazwę”.
Made in Moon
1
właściwie to próbuję pod inną nazwę dla mojego projektu. ale kiedy zmieniam nazwę projektu, reakcja-natywna-zmiana nazwy usuwa te dwa pliki z mojego projektu.
Moein Hosseini
8

Idź do studia Android

Kliknij prawym przyciskiem myszy pakiet (najprawdopodobniej com) -> Refractor -> Zmień nazwę -> Wprowadź nową nazwę pakietu w oknie dialogowym -> Do Refractor

Zmieni nazwę twojego pakietu wszędzie.

Aishwarya
źródło
Chyba nie wpłynie to na całą strukturę projektu.
Kishan Oza,
Jak można zrobić z projektem React-Native JS?
Arifur Rahman
8

Skrypt inicjujący generuje unikalny identyfikator dla Androida na podstawie nadanej mu nazwy (np. com.acmeappDla AcmeApp).

Możesz zobaczyć, jaka nazwa została wygenerowana, szukając klucza applicationId w android/app/build.gradle.

Jeśli chcesz zmienić ten unikalny identyfikator, zrób to teraz, jak opisano poniżej:

W /androidfolderze zamień wszystkie wystąpienia com.acmeappbycom.acme.app

Następnie zmień strukturę katalogów za pomocą następujących poleceń:

mkdir android/app/src/main/java/com/acme

mv android/app/src/main/java/com/acmeapp android/app/src/main/java/com/acme/app

Potrzebujesz poziomu folderu dla każdej kropki w identyfikatorze aplikacji.

Źródło: https://blog.elao.com/en/dev/from-react-native-init-to-app-stores-real-quick/

Atul Yadav
źródło
7

Jeśli korzystasz z Android Studio:

zmiana com.myappnacom.mycompany.myapp

  1. utwórz nową hierarchię pakietów com.mycompany.myapp w android/app/src/main/java

  2. Skopiuj wszystkie klasy z com.myappdo com.mycompany.myappza pomocą interfejsu GUI Android Studio

  3. Android studio zadba o umieszczenie odpowiedniej nazwy pakietu dla wszystkich skopiowanych klas. Jest to przydatne, jeśli masz jakieś niestandardowe moduły i nie chcesz ręcznie zastępować wszystkich plików .java.

  4. Zaktualizuj android/app/src/main/AndroidManifest.xmli android/app/build.gradle(zamień com.myappnacom.mycompany.myapp

  5. Synchronizuj projekt (kompilacja Gradle)

Varun Kumar
źródło
5

Mam rozwiązanie oparte na odpowiedzi @ Cherniv (dla mnie działa na macOS). Dwie różnice: mam plik Main2Activity.java w folderze java, z którym robię to samo, i nie kłopoczę się wywoływaniem ./gradlew czysto, ponieważ wygląda na to, że program do pakowania natywnego reagowania i tak robi to automatycznie.

W każdym razie moje rozwiązanie robi to, co robi Czerniow, z wyjątkiem tego, że stworzyłem dla niego skrypt powłoki bash, ponieważ tworzę wiele aplikacji przy użyciu jednego zestawu kodu i chcę mieć możliwość łatwej zmiany nazwy pakietu za każdym razem, gdy uruchamiam skrypty npm.

Oto skrypt bash, którego użyłem. Będziesz musiał zmodyfikować nazwę pakietu, którego chcesz użyć, i dodać do niego wszystko, co chcesz ... ale oto podstawy. Możesz utworzyć plik .sh, przyznać mu uprawnienia, a następnie uruchomić go z tego samego folderu, z którego uruchamiasz opcję „React-native”:

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

ZRZECZENIE SIĘ: Najpierw musisz edytować komentarz MainApplication.java w dolnej części pliku java. W komentarzu znajduje się słowo „pakiet”. Ze względu na sposób działania skryptu pobiera on dowolny wiersz zawierający słowo „pakiet” i zastępuje go. Z tego powodu ten skrypt może nie zostać sprawdzony w przyszłości, ponieważ to samo słowo może być użyte w innym miejscu.

Drugie zastrzeżenie: pierwsze 3 polecenia sed edytują pliki java z katalogu o nazwie javaFiles. Sam utworzyłem ten katalog, ponieważ chcę mieć jeden zestaw plików java, które są stamtąd kopiowane (ponieważ mogę dodać do niego nowe pakiety w przyszłości). Prawdopodobnie będziesz chciał zrobić to samo. Więc skopiuj wszystkie pliki z folderu java (przejdź przez jego podfoldery, aby znaleźć rzeczywiste pliki java) i umieść je w nowym folderze o nazwie javaFiles.

Trzecie zastrzeżenie: musisz edytować zmienną packageName, aby była zgodna ze ścieżkami na górze i na dole skryptu (com.MyWebsite.MyAppName to com / MyWebsite / MyAppName)

Kjell
źródło
2

W kodzie VS naciśnij Ctrl + Shift + Fi wprowadź nazwę starego pakietu w polu „Znajdź” i wprowadź nowy pakiet w polu „Zamień”. Następnie naciśnij „Zastąp wszystkie wystąpienia”.

Zdecydowanie nie w sposób pragmatyczny. Ale to załatwiło sprawę dla mnie.

Kiran JD
źródło
2

Posługiwać się npx react-native-rename <newName>

Z niestandardowym identyfikatorem pakietu (tylko Android. W przypadku iOS użyj Xcode)

$ npx react-native-rename <newName> -b <bundleIdentifier>

Najpierw przełącz się na nową gałąź (opcjonalne, ale zalecane)

$ git checkout -b rename-app

Następnie zmień nazwę swojej aplikacji $ npx React-native-rename rename „Travel App”

Z niestandardowym identyfikatorem pakietu

$ npx react-native-rename "Travel App" -b com.junedomingo.travelapp 

Po zmianie nazwy przejdź do folderu Android i uruchom gradlew clean. następnie wróć do głównego projektu i uruchom npx react-native run-android.

Ponadto, jeśli masz plik google-services.json w swoim poprzednim projekcie, zmień go odpowiednio na nowy ... to jesteś gotowy :)

Zobacz więcej tutaj https://github.com/junedomingo/react-native-rename#readme

Farhad Kabir
źródło
1

Wykonaj proste kroki, aby zmienić nazwę swojego app namei Package namena wypadek, gdybyś nie wprowadził żadnych niestandardowych zmian w folderze Androida (np. Scenariusz, w którym właśnie zainicjowałeś projekt)

  1. Po prostu zmień namew package.jsonpliku według potrzeb i zapisz go.
  2. Usuń folder o nazwie android
  3. uruchom polecenie react-native upgrade

Uwaga: Jak wspomniano w komentarzu ivoteje50 , nie usuwaj folderu systemu Android, jeśli wykonałeś już oficjalne instrukcje dotyczące wygenerowania magazynu kluczy, ponieważ spowoduje to usunięcie magazynu kluczy i nie będzie można ponownie podpisać nowej aplikacji.

Jose Kj
źródło
1
Nie usuwaj folderu Androida, jeśli wykonałeś już oficjalne instrukcje dotyczące wygenerowania magazynu kluczy, ponieważ spowoduje to usunięcie magazynu kluczy i nie będzie można ponownie podpisać nowej aplikacji.
Ivotje50
2
Nie rób tego! Możesz mieć mnóstwo niestandardowego kodu w kodzie Androida, który nie zostanie odtworzony
pie6k
1

Przejdź do Android Studio, otwórz aplikację, kliknij prawym przyciskiem myszy java i wybierz Nowy, a następnie Pakiet.

Podaj żądaną nazwę (np. Com. Coś).

Przenieś pliki z innego pakietu (którego nazwę chcesz zmienić) do nowego pakietu. Usuń stary pakiet.

Przejdź do swojego projektu w edytorze i użyj skrótu do wyszukiwania we wszystkich plikach (na Macu jest to shift cmd F). Wpisz nazwę swojego starego pakietu. Zmień wszystkie odniesienia do nowej nazwy pakietu.

Przejdź do Android Studio, Build, Clean Project, Rebuild Project.

Gotowe!

Miłego kodowania :)

Fotis Tsakiris
źródło
1

Użyłem pakietu react-native-rename .

W terminalu uruchom polecenie, aby zainstalować:

npm install react-native-rename -g

W katalogu głównym projektu React Native uruchom następujące polecenie:

react-native-rename "NewNameOfApp" -b com.companyname.newnameofapp
Waqar UlHaq
źródło
0

Możesz użyć pakietu react-native-rename, który przejmie wszystkie niezbędne zmiany nazwy pakietu w

app / mainapplication.java

AndroidManifest.xml

ale pamiętaj, aby ręcznie zmienić nazwę pakietu wszystkich plików w folderze java / com. ponieważ kiedy utworzyłem działanie na ekranie powitalnym, stara nazwa pakietu nie jest aktualizowana.

https://www.npmjs.com/package/react-native-rename

Geetha Tulasi Balam
źródło
0

Po prostu skorzystanie z narzędzia wyszukiwania i zamiany w moim IDE załatwiło sprawę.

Tenesse
źródło
0

Po uruchomieniu tego:

react-native-rename "MyApp" -b com.mycompany.myapp

Upewnij się, że również przechodzisz Build.gradlepod android/app/... i zmieniasz nazwę identyfikatora aplikacji, jak pokazano poniżej:

defaultConfig {
        applicationId:com.appname.xxx
........
}
Newtoxton
źródło
-3

Przejdź do pliku android / app / src / main / AndroidManifest.xml -

Aktualizacja :

attr android: etykieta aplikacji Element jako:

Stara wartość - android: label = "@ string / app_name"

Nowa wartość - android: label = "(ciąg, który chcesz wstawić)"

i

attr android: etykieta aktywności elementu jako:

Stara wartość - android: label = "@ string / app_name"

Nowa wartość - android: label = "(ciąg, który chcesz wstawić)"

Pracował dla mnie, mam nadzieję, że pomoże.

Anshul Singh
źródło
2
Szczerze mówiąc, nie sądzę, aby ta odpowiedź była tak gorsza, jak była. Jednak ta odpowiedź jest nie zająć co pytano w pytaniu - Jak zmienić nazwę pakietu . Odpowiada jednak na pytanie „jak zmienić tytuł aplikacji, która pojawia się w programie uruchamiającym”. Czy to trafna odpowiedź? Nie całkiem. Czy zawiera przydatne informacje? Tak. Dlatego proponuję znaleźć pytanie, które dotyczy tytułu programu uruchamiającego i zamieścić tam swoje rozwiązanie zamiast tutaj.
Dev-iL