เปลี่ยนชื่อแพ็คเกจสำหรับ Android ใน React Native


179

ฉันเคยreact-native init MyAppเริ่มต้นแอป React Native ใหม่ เรื่องนี้สร้างอื่น ๆ ในกลุ่มโครงการ Android com.myappที่มีแพคเกจ

เป็นวิธีที่ดีที่สุดที่จะเปลี่ยนชื่อแพคเกจนี้ตัวอย่างเช่น: com.mycompany.myapp?

ฉันลองเปลี่ยนมันAndroidManifest.xmlแต่มันสร้างข้อผิดพลาดอื่น ๆ ดังนั้นฉันจึงคิดว่ามันไม่ใช่วิธี

ความคิดใด ๆ


คลิกซ้ายที่ชื่อแพ็คเกจและไปที่ Refactor -> เปลี่ยนตัวเลือกเพื่อเปลี่ยนชื่อชื่อแพ็คเกจ
kunal

สิ่งที่ดีที่สุดสำหรับฉันตอนนี้เป็นเพียงการค้นหาและแทนที่
mllm

3
คุณสามารถลองsaumya.github.io/ray/articles/72
Andy Andy


สำหรับฉันค้นหาและแทนที่ทำงาน
shesh nath

คำตอบ:


411

ฉันได้เปลี่ยนชื่อโฟลเดอร์ย่อยของโครงการจาก: " android / app / src / main / java / MY / APP / OLD_ID / " เป็น: " android / app / src / main / java / MY / APP / NEW_ID / "

จากนั้นเปลี่ยนรหัสแพคเกจเก่าและใหม่ด้วยตนเอง:

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

package MY.APP.NEW_ID;

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

package MY.APP.NEW_ID;

ในandroid / app / src / main / AndroidManifest.xml :

package="MY.APP.NEW_ID"

และในandroid / app / build.gradle :

applicationId "MY.APP.NEW_ID"

( ไม่บังคับ ) ในandroid / app / BUCK :

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

การทำความสะอาดของ Gradle 'ในตอนท้าย (ในโฟลเดอร์/ android ):

./gradlew clean

23
ฉันต้องแก้ไขไฟล์ BUCK เพื่อแทนที่ค่าแพ็คเกจเก่าด้วยอันใหม่ BTW, ไฟล์ 2 ไฟล์ MainAcitivity.java และ MainApplication.java ควรถูกย้ายไปยังฟิสิคัลพา ธ ใหม่
Golden Thumb

4
ฉันเปลี่ยนชื่อไดเรกทอรีandroid/app/src/main/java/com/old_app_name/เป็น...com/new_app_name/และดูเหมือนว่าจะใช้งานได้
ลัส

ฉันมีข้อผิดพลาด "ล้มเหลวในการจบเซสชัน: INSTALL_FAILED_UPDATE_INCOMPATIBLE" จนกว่าฉันจะบังคับให้ทำความสะอาดอุปกรณ์จำลองด้วยตนเองด้วยตนเอง: adb ถอนการติดตั้ง my.package.name ... ดังนั้นทิศทางดี แต่หุ่นยนต์จำลองสามารถ "ยึดมั่น" กับข้อมูลเก่าใน วิธีที่ไม่ดีที่ทำให้ดูเหมือนว่าเส้นทางไม่ทำงาน (และเพียงแค่ถอนการติดตั้งแอปไม่ได้แก้ไขสิ่งนี้!)
Bill Patterson

ฉันกำลังอ่านเกี่ยวกับเรื่องนี้และฉันลองใช้ห้องสมุดนี้: npmjs.com/package/react-native-rename ดูเหมือนว่าจะทำงานได้ดีสำหรับเรื่องนี้มันไม่เพียง แต่เปลี่ยนชื่อแอป แต่มันยังสามารถเปลี่ยนตัวระบุกลุ่ม
fray88

1
ทำในandroid /โฟลเดอร์ @Anuj
Cherniv

76

ฉันใช้แพ็กเกจreact-native-rename * npm ติดตั้งผ่าน

npm install react-native-rename -g

จากนั้นจากรูทของโปรเจ็กต์ React Native ของคุณให้ดำเนินการดังต่อไปนี้:

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

นั่นเป็นเรื่องง่ายและยุ่งยากฉันเพียงแค่ต้องอัปเดต MainApplication.java ด้วยตนเอง
Gopal Devra

59
ขอบคุณทำลายโครงการ
Leap Hawk

@AkashRajput คุณแก้ไขปัญหาของคุณแล้วหรือยัง? โปรดแจ้งให้เราทราบหากคุณพบทางออกใด ๆ
Saleem Khan

@SaleemKhan ต้องสร้างโครงการอีกครั้ง ครั้งนี้มี init-native init .. เพียงแค่คัดลอกไฟล์
Leap Hawk

5
มันทำลายโครงการของฉันและต้องสร้างโครงการใหม่ :(
MujtabaFR

24

ในการเปลี่ยนชื่อแพ็คเกจจากcom.myappเป็น: com.mycompany.myapp(เช่น)

  1. สำหรับแอพ iOS ของแอพ react ให้ใช้ xcode - ภายใต้การใช้งานทั่วไป
  2. สำหรับแอพ android เปิด build.gradle ที่ระดับโมดูล หนึ่งในandroid/appโฟลเดอร์ คุณจะพบว่า
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

เปลี่ยนเป็นcom.myappสิ่งที่คุณต้องการ

หวังว่านี่จะช่วยได้


4
นี่เป็นวิธีที่ง่ายที่สุดในการเปลี่ยนชื่อแพ็คเกจ แม้ว่าจะไม่เปลี่ยนชื่อแพคเกจท้องถิ่นของคุณสิ่งนี้จะเปลี่ยนแพ็คเกจการสร้างถัดไปของคุณ ขอบคุณ! หลังจากทำเช่นนี้ทำแล้ว./gradlew clean ./gradlew app:assembleRelease
Michael Harley

2
"อย่างไรก็ตามชื่อapplicationIdท้องถิ่นและpackageชื่อเป็นอิสระจากกัน", " applicationIdระบุแอปของคุณบนอุปกรณ์และใน Google Play Store โดยไม่ซ้ำกัน" - developer.android.com/studio/build/app/-id
eightyfive

ไม่ทำงานสำหรับฉันNo matching client found for package name 'xxxxx'
MichaelMao

10

คุณสามารถใช้แพ็กเกจ NPM แบบโต้ตอบ

ติดตั้งโดยใช้

npm install react-native-rename -g

จากรากของโครงการ Native React ของคุณจะดำเนินการดังต่อไปนี้

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

react-native-rename on npm

แต่สังเกตเห็นว่านี้ Lib ลบของคุณและMainActivity.java MainApplication.javaก่อนที่จะเปลี่ยนชื่อแพ็คเกจให้สำรองข้อมูลจากไฟล์สองไฟล์นี้และหลังจากเปลี่ยนชื่อแพคเกจเพียงแค่นำมันกลับไปใช้แทน วิธีนี้ใช้ได้ผลสำหรับฉัน

ข้อมูลเพิ่มเติม: ตอบสนองการเปลี่ยนชื่อพื้นเมือง


1
ไม่มีผลหากคุณไม่เปลี่ยนชื่อแอป "โปรดลองชื่ออื่น"
ผลิตใน Moon

1
จริง ๆ แล้วฉันลองใช้ชื่ออื่นสำหรับโครงการของฉัน แต่เมื่อฉันเปลี่ยนชื่อโปรเจคของฉันตอบสนอง - เนทิฟ - การเปลี่ยนชื่อลบไฟล์นั้นสองไฟล์จากโปรเจ็กต์ของฉัน
Moein Hosseini

8

Goto Android studio

คลิกขวาที่แพ็คเกจของคุณ (ส่วนใหญ่อาจเป็น com) -> Refractor -> Rename -> ป้อนชื่อแพ็คเกจใหม่ในไดอะล็อก -> Do Refractor

มันจะเปลี่ยนชื่อแพคเกจของคุณทุกที่


มันจะไม่ส่งผลกระทบต่อโครงสร้างโครงการทั้งหมดที่ฉันเดา
Kishan Oza

จะทำอย่างไรกับโปรเจ็กต์ React-Native JS
Arifur Rahman

8

สคริปต์ init สร้างรหัสเฉพาะสำหรับ Android ตามชื่อที่คุณให้มัน (เช่นcom.acmeappสำหรับAcmeApp)

คุณสามารถมองเห็นสิ่งที่ชื่อถูกสร้างขึ้นโดยการมองหาคีย์ applicationId android/app/build.gradleใน

หากคุณต้องการเปลี่ยนตัวระบุที่ไม่ซ้ำให้ทำทันทีตามที่อธิบายไว้ด้านล่าง:

ใน/androidโฟลเดอร์ให้แทนที่การเกิดขึ้นทั้งหมดcom.acmeappด้วยcom.acme.app

จากนั้นเปลี่ยนโครงสร้างไดเร็กทอรีด้วยคำสั่งต่อไปนี้:

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

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

คุณต้องมีระดับโฟลเดอร์สำหรับแต่ละจุดในตัวระบุแอป

ที่มา: https://blog.elao.com/th/dev/from-react-native-init-to-app-stores-real-quick/


7

หากคุณใช้ Android Studio-

เปลี่ยนcom.myappเป็นcom.mycompany.myapp

  1. สร้างลำดับชั้นของแพ็คเกจใหม่ com.mycompany.myapp ภายใต้ android/app/src/main/java

  2. คัดลอกคลาสทั้งหมดจากcom.myappไปยังcom.mycompany.myappโดยใช้ Android studio GUI

  3. Android studio จะดูแลการใส่ชื่อแพ็กเกจที่เหมาะสมสำหรับคลาสที่คัดลอกทั้งหมด สิ่งนี้มีประโยชน์หากคุณมีโมดูลที่กำหนดเองและไม่ต้องการแทนที่ด้วยตนเองในไฟล์. java ทั้งหมด

  4. อัปเดตandroid/app/src/main/AndroidManifest.xmlและandroid/app/build.gradle(แทนที่com.myappเป็นcom.mycompany.myapp

  5. ซิงค์โปรเจ็กต์ (build gradle)


5

ฉันมีทางออกตามคำตอบของ @ Cherniv (ทำงานบน macOS สำหรับฉัน) ความแตกต่างสองอย่าง: ฉันมี Main2Activity.java ในโฟลเดอร์ java ที่ฉันทำสิ่งเดียวกันกับและฉันไม่ต้องโทร. / gradlew ทำความสะอาดเพราะดูเหมือนว่าผู้ทำปฏิกิริยาตอบสนองพื้นเมืองทำโดยอัตโนมัติ

อย่างไรก็ตามโซลูชันของฉันทำสิ่งที่ Cherniv ทำยกเว้นฉันสร้างสคริปต์ทุบตีเชลล์ขึ้นมาเพราะฉันสร้างแอพหลายตัวโดยใช้รหัสชุดเดียวและต้องการที่จะสามารถเปลี่ยนชื่อแพ็คเกจได้อย่างง่ายดายทุกครั้งที่ฉันเรียกใช้สคริปต์ npm

นี่คือสคริปต์ทุบตีที่ฉันใช้ คุณจะต้องแก้ไขชื่อแพ็คเกจที่คุณต้องการใช้และเพิ่มสิ่งอื่นที่คุณต้องการ ... แต่นี่คือพื้นฐาน คุณสามารถสร้างไฟล์. sh ให้สิทธิ์แล้วเรียกใช้จากโฟลเดอร์เดียวกันกับที่คุณเรียกใช้ 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

การปฏิเสธความรับผิด: คุณจะต้องแก้ไขความคิดเห็นของ MainApplication.java ใกล้กับด้านล่างของไฟล์ java ก่อน มันมีคำว่า 'แพ็คเกจ' ในความคิดเห็น เนื่องจากวิธีการทำงานของสคริปต์มันใช้บรรทัดใด ๆ กับคำว่า 'package' ในนั้นและแทนที่มัน ด้วยเหตุนี้สคริปต์นี้อาจไม่ได้รับการพิสูจน์ในอนาคตเนื่องจากอาจมีคำเดียวกันกับที่ใช้ในที่อื่น

ข้อสงวนสิทธิ์ที่สอง: คำสั่ง 3 คำสั่งแรกที่แก้ไขไฟล์ java จากไดเรกทอรีที่เรียกว่า javaFiles ฉันสร้างไดเรกทอรีนี้ด้วยตัวเองเนื่องจากฉันต้องการมีไฟล์ java หนึ่งชุดที่คัดลอกมาจากที่นั่น (เพราะฉันอาจเพิ่มแพ็คเกจใหม่ลงไปในอนาคต) คุณอาจต้องการทำสิ่งเดียวกัน ดังนั้นคัดลอกไฟล์ทั้งหมดจากโฟลเดอร์ java (ผ่านโฟลเดอร์ย่อยเพื่อค้นหาไฟล์ java จริง) และวางไว้ในโฟลเดอร์ใหม่ที่เรียกว่า javaFiles

ข้อสงวนสิทธิ์ประการที่สาม: คุณจะต้องแก้ไขตัวแปร packageName เพื่อให้สอดคล้องกับเส้นทางที่ด้านบนสุดของสคริปต์และด้านล่าง (com.MyWebsite.MyAppName เป็น com / MyWebsite / MyAppName)


2

ในรหัส VS กดCtrl + Shift + Fและใส่ชื่อแพคเกจเก่าของคุณใน 'ค้นหา' และป้อนแพคเกจใหม่ของคุณใน 'แทนที่' จากนั้นกด 'แทนที่เหตุการณ์ทั้งหมด'

ไม่ใช่วิธีที่จริงจัง แต่มันเป็นการหลอกลวงสำหรับฉัน


2

ใช้ npx react-native-rename <newName>

ด้วย Bundle Identifier ที่กำหนดเอง (Android เท่านั้นสำหรับ iOS โปรดใช้ Xcode)

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

ก่อนอื่นเปลี่ยนเป็นสาขาใหม่ (ไม่บังคับ แต่แนะนำ)

$ git checkout -b rename-app

จากนั้นเปลี่ยนชื่อแอปของคุณ $ npx ตอบโต้เปลี่ยนชื่อดั้งเดิมเป็น "Travel App"

ด้วย Bundle Identifier ที่กำหนดเอง

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

gradlew cleanหลังจากที่คุณเปลี่ยนชื่อโปรดให้แน่ใจว่าคุณไปที่โฟลเดอร์หุ่นยนต์และเรียกใช้ npx react-native run-androidจากนั้นกลับไปที่โครงการหลักและการทำงาน

นอกจากนี้หากคุณมีไฟล์ google-services.json ในโครงการก่อนหน้าของคุณให้เปลี่ยนไปตามไฟล์ใหม่ ... ถ้าอย่างนั้นคุณก็พร้อมแล้ว :)

ดูเพิ่มเติมได้ที่นี่https://github.com/junedomingo/react-native-rename#readme


1

ทำตามขั้นตอนง่าย ๆ เพื่อเปลี่ยนชื่อของคุณapp nameและPackage nameในกรณีที่คุณยังไม่ได้ทำการเปลี่ยนแปลงใด ๆ ที่กำหนดเองในโฟลเดอร์ Android (เช่น. สถานการณ์ที่คุณเพิ่งเริ่มต้นโครงการ)

  1. เพียงแค่เปลี่ยนnameในpackage.jsonไฟล์ที่คุณต้องการและบันทึกไว้
  2. ลบโฟลเดอร์ชื่อ android
  3. เรียกใช้คำสั่ง react-native upgrade

หมายเหตุ: ตามที่ivoteje50ระบุไว้ในความคิดเห็นอย่าลบโฟลเดอร์ android หากคุณได้ปฏิบัติตามคำแนะนำอย่างเป็นทางการเพื่อสร้างที่เก็บคีย์เนื่องจากจะลบที่เก็บคีย์และคุณไม่สามารถลงชื่อแอปใหม่ได้อีก


1
อย่าลบโฟลเดอร์ android หากคุณทำตามคำแนะนำอย่างเป็นทางการเพื่อสร้างที่เก็บคีย์เนื่องจากจะลบที่เก็บคีย์และคุณไม่สามารถลงชื่อแอปใหม่ได้อีก
Ivotje50

2
อย่าทำมัน! คุณอาจมีรหัสที่กำหนดเองมากมายในรหัส Android ที่จะไม่ถูกสร้างขึ้นมาใหม่
pie6k

1

ไปที่ Android Studio เปิดแอพคลิกขวาที่ java แล้วเลือกใหม่แล้วแพ็คเกจ

ตั้งชื่อที่คุณต้องการ (เช่น com.something)

ย้ายไฟล์จากแพ็คเกจอื่น (คุณต้องการเปลี่ยนชื่อ) เป็นแพ็คเกจใหม่ ลบแพ็คเกจเก่า

ไปที่โครงการของคุณในโปรแกรมแก้ไขและใช้ทางลัดในการค้นหาไฟล์ทั้งหมด (ใน mac คือ shift cmd F) พิมพ์ชื่อแพ็คเกจเก่าของคุณ เปลี่ยนการอ้างอิงทั้งหมดเป็นชื่อแพ็คเกจใหม่

ไปที่ Android Studio, Build, Clean Project, สร้างโครงการใหม่

ทำ!

Happy coding :)



0

คุณสามารถใช้แพ็คเกจการตอบสนองการเปลี่ยนชื่อพื้นเมืองซึ่งจะมีการเปลี่ยนแปลงที่จำเป็นทั้งหมดของชื่อแพคเกจภายใต้

app / mainapplication.java

AndroidManifest.xml

แต่ให้แน่ใจว่าเปลี่ยนชื่อแพ็กเกจของไฟล์ทั้งหมดด้วยตนเองภายใต้โฟลเดอร์ java / com เพราะเมื่อฉันสร้างกิจกรรมหน้าจอสแปลชชื่อแพ็กเกจเก่าจะไม่ถูกอัพเดต

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


0

เพียงแค่ใช้การค้นหาและแทนที่เครื่องมือของ IDE ของฉันก็ทำได้


0

หลังจากรันสิ่งนี้:

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

ให้แน่ใจว่าจะยังกลับไปข้างBuild.gradleใต้android/app/... และเปลี่ยนชื่อ Id แอพลิเคชันที่แสดงด้านล่าง:

defaultConfig {
        applicationId:com.appname.xxx
........
}

-3

ไปที่ไฟล์android / app / src / main / AndroidManifest.xml -

อัปเดต:

attr android: labelขององค์ประกอบแอปพลิเคชันเป็น:

ค่าเก่า - android: label = "@ string / app_name"

ค่าใหม่ - android: label = "(สตริงที่คุณต้องการใส่)"

และ

attr android: labelของกิจกรรม Element เป็น:

ค่าเก่า - android: label = "@ string / app_name"

ค่าใหม่ - android: label = "(สตริงที่คุณต้องการใส่)"

ทำงานให้ฉันหวังว่ามันจะช่วยได้


2
ฉันไม่คิดว่าคำตอบนี้ควรถูกลดระดับลงอย่างที่มันเป็น แต่คำตอบนี้ไม่ ได้อยู่ที่สิ่งที่ถูกถามในคำถาม - วิธีการเปลี่ยนชื่อแพคเกจ แต่จะตอบคำถาม "วิธีเปลี่ยนชื่อของแอพที่ปรากฏในตัวเรียกใช้งาน" มันเป็นคำตอบที่เกี่ยวข้องหรือไม่ ไม่ได้จริงๆ มันมีข้อมูลที่เป็นประโยชน์หรือไม่? ใช่. ดังนั้นฉันขอแนะนำให้คุณค้นหาคำถามที่ถามเกี่ยวกับชื่อตัวเรียกใช้และโพสต์โซลูชันของคุณที่นี่แทนที่จะเป็นที่นี่
Dev-iL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.