Ubah nama paket untuk Android di React Native

179

Saya biasa react-native init MyAppmenginisialisasi aplikasi React Native baru. Ini dibuat antara lain proyek Android dengan paket com.myapp.

Apa cara terbaik untuk mengubah nama paket ini, misalnya menjadi com.mycompany.myapp:?

Saya mencoba mengubahnya AndroidManifest.xmltetapi ia membuat kesalahan lain, jadi saya menganggap itu bukan jalannya.

Ada ide?

mllm
sumber
Klik kiri pada nama paket dan pilih Refactor -> Rename option untuk mengganti nama paket.
kunal
Apa yang paling cocok untuk saya sekarang adalah temukan & ganti
mllm
3
Anda juga dapat mencoba saumya.github.io/ray/articles/72
Andy
untuk saya cari & ganti berhasil
shesh nath

Jawaban:

411

Saya telah mengganti nama subfolder proyek dari: " android / app / src / main / java / MY / APP / OLD_ID / " ke: " android / app / src / main / java / MY / APP / NEW_ID / "

Kemudian secara manual beralih id paket lama dan baru:

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

package MY.APP.NEW_ID;

Di android / app / src / main / java / MY / APP / NEW_ID / MainApplication.java :

package MY.APP.NEW_ID;

Di android / app / src / main / AndroidManifest.xml :

package="MY.APP.NEW_ID"

Dan di android / app / build.gradle :

applicationId "MY.APP.NEW_ID"

Di android / app / BUCK :

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

Pembersihan Gradle pada akhirnya (dalam folder / android ):

./gradlew clean
Cherniv
sumber
23
Saya juga perlu mengedit file BUCK untuk mengganti nilai paket lama dengan yang baru. BTW, 2 file MainAcitivity.java dan MainApplication.java harus dipindahkan ke jalur fisik baru.
Golden Thumb
4
Saya juga berganti nama direktori android/app/src/main/java/com/old_app_name/untuk ...com/new_app_name/dan tampaknya bekerja.
nicholas
Saya mengalami kesalahan "Gagal menyelesaikan sesi: INSTALL_FAILED_UPDATE_INCOMPATIBLE" hingga saya secara manual memaksa pembersihan simulator perangkat android: adb copot my.package.name ... Jadi petunjuknya baik-baik saja, tetapi simulator android dapat "bertahan" untuk info lama di sebuah cara buruk yang membuatnya terlihat seperti arah tidak berfungsi. (Dan hanya menghapus instalan aplikasi TIDAK memperbaiki ini!)
Bill Patterson
Saya membaca tentang ini dan saya mencoba perpustakaan ini: npmjs.com/package/react-native-rename tampaknya bekerja dengan sangat baik untuk ini, tidak hanya mengubah nama aplikasi tetapi juga dapat mengubah pengidentifikasi bundel
fray88
1
lakukan di android / folder @Anuj
Cherniv
76

Saya menggunakan paket react-native-rename * npm. Pasang melalui

npm install react-native-rename -g

Kemudian, dari akar proyek React Native Anda, jalankan yang berikut:

react-native-rename "MyApp" -b com.mycompany.myapp
Javid Al Karuzi
sumber
itu sederhana dan rumit, saya hanya perlu memperbarui MainApplication.java secara manual.
Gopal Devra
59
Terima kasih, hancurkan proyek
Leap Hawk
@AkashRajput apakah Anda memperbaiki masalah Anda? beri tahu kami jika Anda menemukan solusi
Saleem Khan
@SaleemKhan Harus membuat proyek lagi. Kali ini dengan init asli-reaksi .. Cukup salin file.
Leap Hawk
5
Itu menghancurkan proyek saya, dan harus membuat proyek baru :(
MujtabaFR
24

Untuk mengubah nama paket dari com.myappmenjadi: com.mycompany.myapp(misalnya),

  1. Untuk aplikasi iOS dari aplikasi reaksi, gunakan xcode - secara umum.
  2. Untuk aplikasi android, buka build.gradle di tingkat modul. Yang ada di android/appfolder. Anda akan menemukan
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

Ubah com.myappuntuk apa pun yang Anda butuhkan.

Semoga ini membantu.

Olusola Omosola
sumber
4
Ini adalah cara termudah untuk mengubah nama paket Anda. Jadi, tidak mengubah nama paket lokal Anda, ini akan mengubah paket build Anda selanjutnya. Terima kasih! Setelah melakukan ini, lakukan ./gradlew cleandan kemudian ./gradlew app:assembleRelease.
Michael Harley
2
"Namun, applicationIddan packagenama lokal tidak tergantung satu sama lain", " applicationIdmengidentifikasi aplikasi Anda secara unik di perangkat dan di Google Play Store" - developer.android.com/studio/build/application-id
eightyfive
tidak bekerja untuk sayaNo matching client found for package name 'xxxxx'
MichaelMao
10

Anda hanya dapat menggunakan paket npm reaksi-asli-ganti nama.

Instal menggunakan

npm install react-native-rename -g

Kemudian dari akar proyek React Native Anda, lakukan hal berikut

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

react-native-rename on npm

tetapi perhatikan bahwa, lib ini menghapus MainActivity.javadan MainApplication.java. sebelum mengubah nama paket Anda, berikan cadangan dari dua file ini dan, setelah mengubah nama paket, kembalikan saja ke tempatnya. solusi ini bekerja untuk saya

info lebih lanjut: react-native-rename

Moein Hosseini
sumber
1
Tidak berpengaruh jika Anda tidak mengubah nama aplikasi "Silakan coba nama yang berbeda."
Dibuat di Bulan
1
sebenarnya, saya mencoba nama yang berbeda untuk proyek saya. tetapi ketika saya mengubah nama proyek saya react-native-rename menghapus dua file dari proyek saya.
Moein Hosseini
8

Goto Android studio

Klik kanan paket Anda (kemungkinan besar com) -> Refraktor -> Ganti nama -> Masukkan nama paket baru dalam dialog -> Lakukan Refraktor

Ini akan mengubah nama nama paket Anda di mana-mana.

Aishwarya
sumber
Saya kira tidak akan mempengaruhi struktur keseluruhan proyek.
Kishan Oza
Bagaimana dengan proyek JS React-Native?
Arifur Rahman
8

Skrip init menghasilkan pengidentifikasi unik untuk Android berdasarkan nama yang Anda berikan (mis. com.acmeappUntuk AcmeApp).

Anda dapat melihat nama apa yang dihasilkan dengan mencari kunci applicationId android/app/build.gradle.

Jika Anda perlu mengubah pengenal unik itu, lakukan sekarang seperti yang dijelaskan di bawah ini:

Di /androidfolder, ganti semua kemunculan com.acmeappolehcom.acme.app

Kemudian ubah struktur direktori dengan perintah berikut:

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

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

Anda memerlukan level folder untuk setiap titik di pengenal aplikasi.

Sumber: https://blog.elao.com/id/dev/from-react-native-init-to-app-stores-real-quick/

Atul Yadav
sumber
7

Jika Anda menggunakan Android Studio-

berubah com.myappmenjadicom.mycompany.myapp

  1. buat hierarki paket baru com.mycompany.myapp di bawah android/app/src/main/java

  2. Salin semua kelas dari com.myappke com.mycompany.myappmenggunakan GUI studio Android

  3. Studio Android akan mengurus menempatkan nama paket yang cocok untuk semua kelas yang disalin. Ini berguna jika Anda memiliki beberapa modul khusus dan tidak ingin mengganti secara manual di semua file .java.

  4. Perbarui android/app/src/main/AndroidManifest.xmldan android/app/build.gradle(ganti com.myappkecom.mycompany.myapp

  5. Sinkronkan proyek (build gradle)

Varun Kumar
sumber
5

Saya punya solusi berdasarkan jawaban @ Cherniv (berfungsi pada MacOS untuk saya). Dua perbedaan: Saya memiliki Main2Activity.java di folder java yang saya lakukan hal yang sama, dan saya tidak repot-repot memanggil ./gradlew clean karena sepertinya packager asli-reaksi melakukan itu secara otomatis.

Bagaimanapun, solusi saya melakukan apa yang dilakukan Cherniv, kecuali saya membuat skrip bash shell untuk itu karena saya membangun beberapa aplikasi menggunakan satu set kode dan ingin dapat dengan mudah mengubah nama paket setiap kali saya menjalankan skrip npm saya.

Berikut ini skrip bash yang saya gunakan. Anda harus memodifikasi packageName yang ingin Anda gunakan, dan menambahkan apa pun yang Anda inginkan ... tapi inilah dasarnya. Anda dapat membuat file .sh, memberikan izin, dan kemudian menjalankannya dari folder yang sama dengan tempat Anda menjalankan reaksi asli:

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

DISCLAIMER: Anda harus mengedit komentar MainApplication.java di dekat bagian bawah file java terlebih dahulu. Itu memiliki kata 'paket' di komentar. Karena cara kerja skrip, dibutuhkan baris apa pun dengan kata 'paket' di dalamnya dan menggantikannya. Karena itu, skrip ini mungkin tidak terbukti di masa depan karena mungkin ada kata yang sama yang digunakan di tempat lain.

Penafian Kedua: 3 sed perintah pertama mengedit file java dari direktori yang disebut javaFiles. Saya membuat direktori ini sendiri karena saya ingin memiliki satu set file java yang disalin dari sana (karena saya mungkin menambahkan paket baru ke sana di masa depan). Anda mungkin ingin melakukan hal yang sama. Jadi salin semua file dari folder java (buka subfoldernya untuk menemukan file java yang sebenarnya) dan letakkan di folder baru yang disebut javaFiles.

Penafian Ketiga: Anda harus mengedit variabel packageName agar sejalan dengan jalur di bagian atas skrip dan bawah (com.MyWebsite.MyAppName to com / MyWebsite / MyAppName)

Kjell
sumber
2

Dalam VS Code, tekan Ctrl + Shift + Fdan masukkan nama paket lama Anda di 'Cari' dan masukkan paket baru Anda di 'Ganti'. Lalu tekan 'Ganti semua kejadian'.

Jelas bukan cara pragmatis. Tapi, ini sudah melakukan trik untukku.

Kiran JD
sumber
2

Menggunakan npx react-native-rename <newName>

Dengan Custom Bundle Identifier (khusus Android. Untuk iOS, silakan gunakan Xcode)

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

Pertama, Pindah ke cabang baru (opsional tetapi disarankan)

$ git checkout -b rename-app

Lalu, Ganti nama aplikasi Anda $ npx react-asli-rename "Travel App"

Dengan Pengidentifikasi Bundel khusus

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

Setelah Anda mengubah nama, pastikan Anda pergi ke folder android dan jalankan gradlew clean. kemudian kembali ke proyek utama dan jalankan npx react-native run-android.

Juga Jika Anda memiliki file google-services.json di proyek Anda sebelumnya, ubah sesuai dengan yang baru ... maka Anda baik-baik saja :)

Lihat Lebih Banyak di sini https://github.com/junedomingo/react-native-rename#readme

Farhad Kabir
sumber
1

Ikuti langkah-langkah sederhana untuk mengubah nama Anda app namedan Package namejika Anda belum membuat perubahan khusus pada folder android (mis., Skenario di mana Anda baru saja menginisialisasi proyek)

  1. Cukup mengubah namedalam package.jsonberkas yang Anda butuhkan dan menyimpannya.
  2. Hapus folder bernama android
  3. jalankan perintah react-native upgrade

Catatan: Seperti disebutkan ivoteje50 dalam komentar, Jangan menghapus folder android jika Anda telah mengikuti instruksi resmi untuk menghasilkan keystore, karena itu akan menghapus keystore dan Anda tidak dapat menandatangani aplikasi baru lagi.

Jose Kj
sumber
1
Jangan hapus folder android jika Anda telah mengikuti instruksi resmi untuk membuat keystore, karena itu akan menghapus keystore dan Anda tidak dapat menandatangani aplikasi baru lagi.
Ivotje50
2
Jangan lakukan itu! Anda mungkin memiliki banyak kode khusus dalam kode android yang tidak akan dibuat ulang
pie6k
1

Buka Android Studio, buka aplikasi, klik kanan pada java dan pilih Paket Baru dan kemudian.

Beri nama yang Anda inginkan (mis. Com. Sesuatu).

Pindahkan file dari paket lain (Anda ingin mengganti nama) ke Paket baru. Hapus paket lama.

Pergi ke proyek Anda di editor Anda dan gunakan jalan pintas untuk mencari di semua file (pada mac adalah shift cmd F). Ketikkan nama paket lama Anda. Ubah semua referensi ke nama paket baru.

Buka Android Studio, Build, Clean Project, Rebuild Project.

Selesai!

Selamat coding :)

Fotis Tsakiris
sumber
1

Saya telah menggunakan paket react-native-rename .

Di terminal jalankan perintah untuk menginstal:

npm install react-native-rename -g

Di root proyek React Native Anda, jalankan perintah berikut:

react-native-rename "NewNameOfApp" -b com.companyname.newnameofapp
Waqar UlHaq
sumber
0

Anda dapat menggunakan paket react-native-rename yang akan mengambil semua perubahan yang diperlukan dari nama paket di bawah

app / mainapplication.java

AndroidManifest.xml

tetapi pastikan untuk secara manual mengubah nama paket semua file di bawah folder java / com. karena ketika saya membuat aktivitas layar splash, nama paket lama tidak diperbarui.

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

Geetha Tulasi Balam
sumber
0

Cukup menggunakan alat pencarian dan ganti IDE saya melakukan trik.

Tenesse
sumber
0

Setelah menjalankan ini:

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

Pastikan untuk juga kebagian Build.gradlebawah android/app/... dan ganti nama Id aplikasi seperti yang ditunjukkan di bawah ini:

defaultConfig {
        applicationId:com.appname.xxx
........
}
Newtoxton
sumber
-3

Buka file android / app / src / main / AndroidManifest.xml -

Perbarui:

attr android: label aplikasi Elemen sebagai:

Nilai lama - android: label = "@ string / app_name"

Nilai Baru - android: label = "(string yang ingin Anda masukkan)"

dan

attr android: label aktivitas Elemen sebagai:

Nilai lama - android: label = "@ string / app_name"

Nilai Baru - android: label = "(string yang ingin Anda masukkan)"

Bekerja untuk saya, semoga akan membantu.

Anshul Singh
sumber
2
Sejujurnya saya tidak berpikir jawaban ini seharusnya diturunkan sebanyak sebelumnya. Namun, jawaban ini tidak membahas apa yang ditanyakan dalam pertanyaan - bagaimana mengubah nama paket . Namun, itu menjawab pertanyaan "bagaimana mengubah judul aplikasi yang muncul di peluncur". Apakah ini jawaban yang relevan? Tidak juga. Apakah ini berisi informasi yang bermanfaat? Iya. Oleh karena itu, saya sarankan Anda menemukan pertanyaan yang menanyakan tentang judul peluncur dan memposting solusi Anda di sana, bukan di sini.
Dev-iL