ฉันจะสร้าง apk ที่สามารถทำงานโดยไม่มีเซิร์ฟเวอร์ที่มีปฏิกิริยาตอบสนองได้อย่างไร


210

ฉันได้สร้างแอพของฉันแล้วฉันสามารถรันมันได้ที่อีมูเลเตอร์ในเครื่องของฉัน (และบนอุปกรณ์ Android ของฉันภายในเครือข่ายเดียวกันโดยเปลี่ยนเซิร์ฟเวอร์ดีบั๊ก)

อย่างไรก็ตามฉันต้องการสร้าง APK ที่ฉันสามารถส่งถึงใครบางคนโดยไม่ต้องเข้าถึงเซิร์ฟเวอร์พัฒนาและฉันต้องการให้พวกเขาทดสอบแอปพลิเคชันได้

ฉันเห็นว่ามีส่วนหนึ่งที่ใช้การมัดแบบออฟไลน์บนส่วน iOS ของเอกสาร แต่ฉันไม่สามารถหาวิธีที่จะทำให้สำเร็จสำหรับ Android ได้ เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร

อัปเดต:ในคำตอบสำหรับคำถามนี้ ( Android ไม่สามารถโหลดชุดบันเดิล JS ) ได้มีการกล่าวว่าสามารถดาวน์โหลดชุดรวมแบบออฟไลน์ได้จากเซิร์ฟเวอร์การพัฒนา แต่เมื่อฉันได้รับบันเดิลจากเซิร์ฟเวอร์การพัฒนาไฟล์รูปภาพไม่สามารถโหลดได้


ตรวจสอบตัวอย่างง่ายๆนี้เพื่อสร้างไฟล์ APK: React พื้นเมืองสร้างออกข่าวเอพีเคผ่านทาง Windows Command Prompt Android
sumit kumar พรัด

คำตอบ:


202

การติดตามคำตอบของ Aditya Singh apk ที่สร้าง (ไม่ได้รับการลงชื่อ) จะไม่ติดตั้งในโทรศัพท์ของฉัน ผมต้องสร้าง APK ที่ลงชื่อโดยใช้คำแนะนำที่นี่

การทำงานต่อไปนี้สำหรับฉัน:

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

วางmy-release-key.keystoreไฟล์ภายใต้android/app ไดเรกทอรีในโฟลเดอร์โครงการของคุณ จากนั้นแก้ไขไฟล์ ~/.gradle/gradle.propertiesและเพิ่มสิ่งต่อไปนี้ (แทนที่ **** ด้วยรหัสผ่านที่เก็บคีย์ที่ถูกต้องนามแฝงและรหัสผ่านที่สำคัญ)

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****

หากคุณใช้ MacOS คุณสามารถจัดเก็บรหัสผ่านของคุณในพวงกุญแจโดยใช้คำแนะนำที่นี่แทนที่จะเก็บไว้ในรูปแบบธรรมดา

จากนั้นแก้ไขแอพ / build.gradle และตรวจสอบให้แน่ใจว่ามีสิ่งต่อไปนี้ (ส่วนที่มีการลงนามConfigsอาจต้องมีการเพิ่มลงนาม)

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

จากนั้นเรียกใช้คำสั่งcd android && ./gradlew assembleRelease,

สำหรับ Windows 'cd android' จากนั้นเรียกใช้gradlew assembleReleaseคำสั่งและค้นหาapk ที่ลงชื่อของคุณภายใต้android/app/build/outputs/apk/app-release.apk


10
นี่คือคำตอบล่าสุดและถูกต้องที่สุด ขอบคุณ
Gokhan Sari

2
app-release.apk ไม่ได้ติดตั้ง สิ่งที่จะเป็นปัญหาหรือไม่
Balasubramanian

1
ฉันสร้าง apk อัปโหลดไปยัง Google Play แต่มันไม่ทำงาน ... คำใบ้บางอย่าง?
Italo Rodrigo

2
ฉันหาโฟลเดอร์ android / app ไม่พบที่ตั้งนี้อยู่ที่ไหน
DHLopez

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

193

คุณจะต้องสร้างรหัสเพื่อลงชื่อ apk ใช้ด้านล่างเพื่อสร้างคีย์ของคุณ:

 keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000

ใช้รหัสผ่านเมื่อได้รับแจ้ง

เมื่อสร้างคีย์แล้วให้ใช้เพื่อสร้างบิลด์ที่ติดตั้งได้:

 react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

สร้างการสร้างโดยใช้การไล่ระดับสี

 cd android && ./gradlew assembleRelease

อัปโหลด APK ไปยังโทรศัพท์ของคุณ การ-rตั้งค่าสถานะจะแทนที่แอปที่มีอยู่ (ถ้ามี)

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

มีการอธิบายรายละเอียดเพิ่มเติมที่นี่: https://facebook.github.io/react-native/docs/signed-apk-android.html

อัปเดต : ขึ้นอยู่กับความคิดเห็นโดย @shashuec และ @Fallen

ถ้าคุณได้รับข้อผิดพลาด

ENOENT: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวเปิด 'android / app / src / main / assets / index.android.bundle'

เรียกใช้ mkdir android / app / src / main / asset


4
ขอบคุณมากสำหรับสิ่งนี้มันใช้งานได้สำหรับฉัน ปัญหาเดียวที่ฉันได้รับคือข้อความนี้: "ไม่มีข้อโต้แย้งที่จำเป็น: มัด - เอาท์พุท" ในส่วนปฏิกิริยามัดพื้นเมือง แต่แก้ไขได้ด้วยการลบสัญลักษณ์ 2 "\"
guinunez

58
ฉันประหลาดใจกับเอกสารที่ไม่ดีของ Facebook ที่พวกเขาละเว้นreact-native bundleส่วนนี้โดยสิ้นเชิง ขอบคุณสำหรับคำตอบ!
technophyle

2
ฉันกำลังทำงานกับ windows ทำงานกับสิ่งนี้gradlew.bat assembleReleaseเช่นกัน
Tabares

12
ฉันได้รับข้อผิดพลาดFailure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] นี้ เมื่อฉันพยายามติดตั้ง apk
developernaren

18
ถ้าคุณได้รับข้อผิดพลาดENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' การทำงานmkdir android/app/src/main/assets
shashuec

31

คุณควรใช้ android studio สำหรับกระบวนการนี้ มันง่ายกว่า แต่ก่อนอื่นให้เรียกใช้คำสั่งนี้ในไดเรกทอรีแอปที่ตอบสนองของคุณก่อน:

สำหรับเวอร์ชันที่ตอบสนองที่ใหม่กว่า (เช่นทำปฏิกิริยาพื้นเมือง 0.49.0 และอื่น ๆ ... )

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

สำหรับเวอร์ชั่นที่เก่ากว่าของ react-native (0.49.0 และด้านล่าง)

react-native bundle --platform android --dev false --entry-file index.android.js   --bundle-output android/app/src/main/assets/index.android.bundle   --assets-dest android/app/src/main/res/

จากนั้นใช้ android studio เพื่อเปิดโฟลเดอร์ 'android' ในการตอบสนองไดเรกทอรีแอพของคุณมันจะขออัพเกรดเกรดและสิ่งอื่น ๆ ไปที่ build-> สร้าง APK ที่ลงชื่อแล้วและทำตามคำแนะนำจากที่นั่น มันตรงไปตรงมาจริงๆ


ฉันยังใช้ Android Studio และ Xcode เพื่อสร้างรุ่นวางจำหน่ายสำหรับแอป React Native ของฉัน ... แต่การสร้าง android สามารถทำได้ด้วยสคริปต์ตามที่อธิบายโดย @Aditya Singh
WiRa

ไม่จำเป็นต้องใช้proandroiddev.com/
onmyway133

30

เรียกใช้คำสั่งนี้:

react-native run-android --variant=release

โปรดทราบว่าจะใช้ได้เฉพาะเมื่อคุณได้ตั้งค่าการลงนามกับ--variant=releasecd android && ./gradlew assembleRelease


@jasan ฉันพบปัญหาอื่นเช่นคุณที่นี่: github.com/facebook/react-native/issues/11586 สิ่งนี้อาจแก้ไขปัญหา: cd android && ./gradlew installRelease
Ahmed Ashraf

ฉันลองcd android && ./gradlew installReleaseและได้รับข้อผิดพลาดนี้Task 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
ThomasReggi

ใช่คุณต้องสร้างไฟล์ Keystore และแก้ไขไฟล์ gradle ทำตามคำแนะนำเหล่านั้นเพื่อแก้ไขปัญหานี้ facebook.github.io/react-native/docs/signed-apk-android.html
Ahmed Ashraf

21

สำหรับ React Native 0.49 ขึ้นไป

คุณควรไปที่ไดเรกทอรีโครงการบนเทอร์มินัลแล้วรันคำสั่งนั้น

1 - mkdir android/app/src/main/assets
2 - react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

ถ้าต่ำกว่า 0.49

  1 - mkdir android/app/src/main/assets
  2 - react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

จากนั้นใช้ android studio เพื่อเปิดโฟลเดอร์ 'android' ในการตอบสนองไดเรกทอรีแอพของคุณมันจะขออัพเกรดเกรดและสิ่งอื่น ๆ ไปที่ build-> สร้าง APK ที่ลงชื่อแล้วและทำตามคำแนะนำจากที่นั่น ไม่เป็นไร


นี่เป็นวิธีที่ง่ายในการทำถ้าคุณติดตั้ง Android Studio (ซึ่งจะดูแลการใช้หรือสร้าง Keystore) ขอบคุณ
leosok

เฮ้ .. มีคำถามด่วน .. มีขั้นตอนข้างต้นหรือไม่ เอกสารเนทีฟแบบตอบโต้ไม่ได้กล่าวถึงในที่นี้ ..
Pravin

1
@ Pravin ไม่จำเป็นต้องใช้มันเป็นหนึ่งในวิธีการสร้าง apk
Yasin Ugurlu

12

ถ้าคุณได้รับ Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]ถ้าคุณได้รับ

ฉันลองใช้วิธีการของ @ Aditya ในการสร้างไฟล์ APK ที่ไม่ได้ลงชื่อและติดตั้ง แต่เมื่อฉันไปติดตั้งบนแท็บเล็ต Android ของฉันมันทำให้ฉันมีข้อผิดพลาด Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]แต่เมื่อผมไปติดตั้งบนแท็บเล็ตของฉันมันทำให้ผมเกิดข้อผิดพลาดของ

ฉันคิดว่านี่เป็นเพราะไฟล์ APK ไม่ได้ลงนามและแท็บเล็ตไม่มีความสุขกับสิ่งนี้ ดังนั้นหลังจากสร้างไฟล์บันเดิล React Native ฉันสามารถสร้างไฟล์ APK ที่ลงชื่อแล้วตามปกติผ่านทาง Android Studio

อย่างไรก็ตามแอพของเราเป็นแอพ Android ที่ทำงานได้อย่างสมบูรณ์ที่มีอยู่แล้วใน Play Store และเราเพิ่งจะเพิ่ม React Native เข้าไปในชิ้นที่มีขนาดพอดีคำเพราะมันยอดเยี่ยม

เพื่อสรุปนี่คือขั้นตอนของฉัน:

1) สร้าง React Native มัด:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/<your-package-name>/src/main/assets/index.android.bu‌​ndle --assets-dest android/<your-package-name>/src/main/res/ 

2) สร้างไฟล์ APK ที่ลงชื่อแล้วจาก Android Studio

3) ติดตั้งไฟล์ APK ลงนามในอุปกรณ์ USB:

adb -d install -r <path_to_signed_apk> 

-dธงเพียงแค่บอกว่าadbจะติดตั้งบนอุปกรณ์ USB ที่แนบมาในกรณีที่คุณมีโปรแกรมจำลองการทำงานได้เป็นอย่างดี หากคุณต้องการติดตั้งบนอีมูเลเตอร์ใด ๆ ให้วาง-dแฟล็ก

4) กำไร!


11

ลองด้านล่างมันจะสร้าง app-debug.apk ในโฟลเดอร์ root / android / app / build / outputs / apk / debug ของคุณ

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

จากนั้นไปที่โฟลเดอร์ android และเรียกใช้

./gradlew assembleDebug


APK ที่สร้างที่นี่ต้องการ Metro เพื่อให้ทำงาน ... ดังนั้นฉันคิดว่ายังคงใช้เซิร์ฟเวอร์ dev อยู่
nerdlinger

11

หากผู้ใดต้องการสร้างโดยไม่ใช้คีย์ playstore คำสั่งนี้จะมีประโยชน์มาก

# react-native run-android --variant=release

หลังจาก build เสร็จสมบูรณ์คุณสามารถค้นหา apk ในไฟล์ build build


7

ไปที่ไดเรกทอรีโครงการและเรียกใช้คำสั่ง:

cd android && ./gradlew assembleRelease

สิ่งนี้จะสร้าง apk ที่ไม่ได้ลงชื่อถ้าคุณไม่ได้ทำการกำหนดค่าที่ต้องการ (เช่น Pedram บอก)
Gokhan Sari

มันจะสร้าง debug, release และ unsigned apk ในโฟลเดอร์ที่สร้างขึ้น ความตั้งใจของฉันคือแบ่งปัน apk ที่เป็นอิสระ
Sidharth Taneja

6

หากคุณได้รับข้อผิดพลาดที่เกี่ยวข้องกับ index.android.js นี่เป็นเพราะคุณกำลังใช้รุ่น React-native ใหม่ (ฉันใช้ 0.55.4) เพียงแค่แทนที่ "index.android.js" เป็น "index.js"

react-native bundle --platform android --dev false --entry-file index.js   --bundle-output android/app/src/main/assets/index.android.bundle   --assets-dest android/app/src/main/res/

5

ฉันมีวิธีแก้ไขปัญหาอื่น: - การสร้างรหัสการเซ็นชื่อคุณสามารถสร้างคีย์การลงนามส่วนตัวโดยใช้ keytool บน Windows keytool จะต้องเรียกใช้จาก C: \ Program Files \ Java \ jdkx.x.x_x \ bin

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

วางไฟล์ my-release-key.keystore ภายใต้ไดเรกทอรี android / app ในโฟลเดอร์โครงการของคุณ

แก้ไขไฟล์ android / app / build.gradle ในโฟลเดอร์โครงการของคุณและเพิ่มการตั้งค่าการเซ็นชื่อ

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

และเรียกใช้

gradlew assembleRelease

สิ่งนี้จะให้ไฟล์สองไฟล์แก่คุณที่ android \ app \ build \ outputs \ apk app-release.apk และ app-release-unsigned.apk ตอนนี้ติดตั้ง app-release.apk ในอุปกรณ์ Android ของคุณ


โฟลเดอร์ android \ app อยู่ที่ไหน ฉันไม่เห็นมันภายใต้โครงการของฉัน (ฉันเห็นเฉพาะ node_modules และข้างในนั้นไม่มี android / app)
DHLopez

1
@DLLopez คุณต้องใช้โปรเจ็กต์ React Native เพื่อเข้าถึงโฟลเดอร์ android หากคุณกำลังใช้งาน Expo คุณต้องแยกออกงานเอ็กซ์โปโดยใช้การเปิดงานเอ็กซ์โป
fxbayuanggara

5

หวังว่ามันจะช่วยผู้เริ่มต้นใหม่

เอกสารทางการที่นี่

หากคุณไม่มี keystore มากกว่าการใช้ก่อนที่คำสั่งอื่นจะข้ามไป

การสร้างคีย์การลงนาม / ไฟล์ Keystore คุณสามารถสร้างคีย์การลงนามส่วนตัวโดยใช้ keytool บน Windows keytool จะต้องเรียกใช้จาก C: \ Program Files \ Java \ jdkx.x.x_x \ bin

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

คุณจะได้รับไฟล์เช่นmy-release-key.keystore

การตั้งค่าตัวแปร gradle วางไฟล์ my-release-key.keystore ภายใต้ไดเรกทอรี android / app ในโฟลเดอร์โครงการของคุณ แก้ไขไฟล์ Android / gradle.properties และเพิ่มต่อไปนี้ (แทนที่ ***** ด้วยรหัสผ่านที่ถูกต้อง keystore นามแฝงและรหัสผ่านที่สำคัญ) enableAapt2 ชุดเท็จเป็นวิธีแก้ปัญหาที่เป็นหุ่นยนต์รุ่น gradle 3.0 ปัญหา

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

android.enableAapt2=false

จากนั้นเพิ่มแอปเหล่านี้ / buid.gradle (แอป)

ด้านล่างการกำหนดค่าเริ่มต้น

signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }

และรีลีสชนิดบิวด์ Inside {}

 signingConfig signingConfigs.release

จากนั้นเพียงเรียกใช้คำสั่งนี้ในเทอร์มินัลสตูดิโอ Android ด้านล่างคำสั่งจะดำเนินการโดยอัตโนมัติเหนือคำตอบทั้งหมด

ถ้า windows

cd android
gradlew assembleRelease

ถ้า linux / mac

$ cd android
$ ./gradlew assembleRelease

หากคุณมีข้อผิดพลาดให้ลบโฟลเดอร์บิลด์ทั้งหมดและรันคำสั่ง

gradlew clean

กว่าอีกครั้ง

gradlew assembleRelease

1
OMG gradle clean... ฉันได้รับการดิ้นรนกับเรื่องนี้ในขณะที่ได้รับการสร้างข้อผิดพลาดที่ขอขอบคุณมากสำหรับคำตอบนี้ !!
nerdlinger

5

สำหรับเวอร์ชันเนทีฟแบบตอบสนองล่าสุดเพื่อรวมโปรเจ็กต์

Android

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

iOS

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios


3

วิธี GUI ใน Android Studio

  • เปิดส่วนแอป Android ของแอป React Native ไว้ใน Android Studio (นี่หมายถึงการเปิดโฟลเดอร์ android ของโปรเจ็กต์ตอบโต้ภายในเครื่องของคุณด้วย Android Studio)
  • ไปที่แท็บ "สร้าง" ที่ด้านบน
  • ลงไปที่ "Build Bundle (s) / APK (s)"
  • จากนั้นเลือก "สร้าง APK (s)"
  • สิ่งนี้จะนำคุณไปสู่ขั้นตอนการหากุญแจของคุณเพื่อลงนาม APK หรือสร้างคีย์ของคุณหากคุณยังไม่มีคีย์ซึ่งตรงไปตรงมามาก หากคุณเพิ่งฝึกฝนคุณสามารถสร้างคีย์เหล่านี้และบันทึกไว้ในเดสก์ท็อปของคุณ
  • เมื่อกระบวนการนั้นเสร็จสิ้นและหากการสร้างสำเร็จจะมีป๊อปอัปด้านล่างใน Android Studio คลิกลิงก์ภายในที่มีข้อความว่า "ค้นหา" (APK)
  • ที่จะพาคุณไปยังไฟล์ apk เลื่อนไปที่อุปกรณ์ Android ของคุณ จากนั้นไปที่ไฟล์นั้นบนอุปกรณ์ Android และติดตั้ง

0

การใช้ android studio เพื่อสร้าง apk ที่ลงชื่อสำหรับโครงการ android ของ react ก็เป็นตัวเลือกที่ดีและง่ายโครงการ android ของ open react ใน android studio และสร้างการกดแป้นและ apk ที่ลงชื่อ


-2

อ้างอิงเอกสารทางการของเจ้าของภาษาเกี่ยวกับการสร้าง APK ที่ลงชื่อแล้ว

APK ที่ลงนามแล้ว


นี่ไม่ใช่คำตอบที่ดีแม้ว่าจะตอบคำถามของผู้ใช้ที่ไม่ได้ตอบก็ตาม พวกเขาต้องการสร้าง APK ดีบักแบบสแตนด์อโลนไม่ใช่รุ่นที่วางจำหน่าย
user37309
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.