เผยแพร่แอป Android ให้กับผู้ทดสอบโดยใช้ Gradle

คุณสามารถรวม App Distribution เข้ากับกระบวนการสร้าง Android ของคุณได้โดยใช้ปลั๊กอิน App Distribution Gradle ปลั๊กอินช่วยให้คุณระบุผู้ทดสอบและบันทึกประจำรุ่นในไฟล์ Gradle ของแอป ทำให้คุณสามารถกำหนดค่าการแจกจ่ายสำหรับประเภทบิลด์และเวอร์ชันต่างๆ ของแอปของคุณได้

คู่มือนี้จะอธิบายวิธีเผยแพร่ APK ให้กับผู้ทดสอบโดยใช้ปลั๊กอิน App Distribution Gradle

ก่อนที่คุณจะเริ่ม

หากคุณยังไม่ได้ เพิ่ม Firebase ในโครงการ Android ของคุณ

หากคุณไม่ได้ใช้ผลิตภัณฑ์ Firebase อื่นๆ คุณเพียงแค่ต้องสร้างโปรเจ็กต์และลงทะเบียนแอปของคุณเท่านั้น อย่างไรก็ตาม หากคุณตัดสินใจที่จะใช้ผลิตภัณฑ์เพิ่มเติมในอนาคต โปรดแน่ใจว่าได้ทำตามขั้นตอนทั้งหมดในหน้าที่ลิงก์ด้านบนแล้ว

ขั้นตอนที่ 1 ตั้งค่าโครงการ Android ของคุณ

  1. ในไฟล์ Gradle ระดับราก (ระดับโครงการ) ของคุณ ( <project>/build.gradle.kts หรือ <project>/build.gradle ) ให้เพิ่มปลั๊กอิน App Distribution Gradle เป็นการพึ่งพา:

    Kotlin

    plugins {
        // ...
        id("com.android.application") version "7.3.0" apply false
    
        // Make sure that you have the Google services Gradle plugin dependency
        id("com.google.gms.google-services") version "4.4.1" apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id("com.google.firebase.appdistribution") version "4.2.0" apply false
    }
    

    Groovy

    plugins {
        // ...
        id 'com.android.application' version '7.3.0' apply false
    
        // Make sure that you have the Google services Gradle plugin dependency
        id 'com.google.gms.google-services' version '4.4.1' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '4.2.0' apply false
    }
    
  2. ในไฟล์ Gradle ของ โมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle ) ให้เพิ่มปลั๊กอิน App Distribution Gradle:

    Kotlin

    plugins {
      id("com.android.application")
    
      // Make sure that you have the Google services Gradle plugin
      id("com.google.gms.google-services")
    
      // Add the App Distribution Gradle plugin
      id("com.google.firebase.appdistribution")
    }
    

    Groovy

    plugins {
      id 'com.android.application'
    
      // Make sure that you have the Google services Gradle plugin
      id 'com.google.gms.google-services'
    
      // Add the App Distribution Gradle plugin
      id 'com.google.firebase.appdistribution'
    }
    
  3. หากคุณอยู่หลังพร็อกซีหรือไฟร์วอลล์ของบริษัท ให้เพิ่ม คุณสมบัติระบบ Java ต่อไปนี้ที่เปิดใช้งาน App Distribution เพื่ออัปโหลดการแจกจ่ายของคุณไปยัง Firebase:

    -Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=password
    

ขั้นตอนที่ 2 ตรวจสอบสิทธิ์กับ Firebase

ก่อนที่คุณจะสามารถใช้ปลั๊กอิน Gradle ได้ คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ของคุณก่อนด้วยวิธีใดวิธีหนึ่งต่อไปนี้ ตามค่าเริ่มต้น ปลั๊กอิน Gradle จะค้นหาข้อมูลรับรองจาก Firebase CLI หากไม่มีการใช้วิธีตรวจสอบสิทธิ์แบบอื่น

ขั้นตอนที่ 3 กำหนดค่าคุณสมบัติการกระจายของคุณ

ในไฟล์ Gradle ของ โมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle ) กำหนดค่า App Distribution โดยเพิ่มอย่างน้อย ส่วน firebaseAppDistribution หนึ่งส่วน

ตัวอย่างเช่น หากต้องการเผยแพร่บิล release รุ่นให้กับผู้ทดสอบ ให้ทำตามคำแนะนำเหล่านี้::

Kotlin

import com.google.firebase.appdistribution.gradle.firebaseAppDistribution

android {

  // ...

  buildTypes {
      getByName("release") {
          firebaseAppDistribution {
              artifactType = "APK"
              releaseNotesFile = "/path/to/releasenotes.txt"
              testers = "ali@example.com, bri@example.com, cal@example.com"
          }
      }
  }

  // ...
}

Groovy

android {

  // ...

  buildTypes {
      release {
          firebaseAppDistribution {
              artifactType="APK"
              releaseNotesFile="/path/to/releasenotes.txt"
              testers="ali@example.com, bri@example.com, cal@example.com"
          }
      }
  }

  // ...
}

คุณสามารถกำหนดค่า App Distribution สำหรับ ประเภทบิวด์และรสชาติของผลิตภัณฑ์ ได้

ตัวอย่างเช่น หากต้องการเผยแพร่ debug และ release ตัวบิลด์ในเวอร์ชันผลิตภัณฑ์ "สาธิต" และ "เต็มรูปแบบ" ให้ทำตามคำแนะนำเหล่านี้:

Kotlin

import com.google.firebase.appdistribution.gradle.firebaseAppDistribution

android {

  // ...

  buildTypes {
      getByName("debug") {...}
      getByName("release") {...}
  }

  flavorDimensions += "version"
  productFlavors {
      create("demo") {
          dimension = "version"
          firebaseAppDistribution {
              releaseNotes = "Release notes for demo version"
              testers = "demo@testers.com"
          }
      }
      create("full") {
          dimension = "version"
          firebaseAppDistribution {
              releaseNotes = "Release notes for full version"
              testers = "full@testers.com"
          }
      }
  }

  // ...
}

Groovy

android {

  // ...

  buildTypes {
      debug {...}
      release {...}
  }

  flavorDimensions "version"
  productFlavors {
      demo {
          dimension "version"
          firebaseAppDistribution {
              releaseNotes="Release notes for demo version"
              testers="demo@testers.com"
          }
      }
      full {
          dimension "version"
          firebaseAppDistribution {
              releaseNotes="Release notes for full version"
              testers="full@testers.com"
          }
      }
  }

  // ...
}

ใช้พารามิเตอร์ต่อไปนี้เพื่อกำหนดค่าการกระจาย:

พารามิเตอร์บิลด์การเผยแพร่แอป
appId

รหัสแอป Firebase ของแอปของคุณ จำเป็นเฉพาะในกรณีที่คุณไม่ได้ติดตั้งปลั๊กอิน Google Services Gradle คุณสามารถค้นหารหัสแอปได้ในไฟล์ google-services.json หรือในคอนโซล Firebase ใน หน้าการตั้งค่าทั่วไป ค่าในไฟล์ build.gradle จะแทนที่ค่าที่ส่งออกจากปลั๊กอิน google-services

appId="1:1234567890:android:321abc456def7890"
serviceCredentialsFile

เส้นทางไปยังไฟล์ JSON คีย์ส่วนตัวของบัญชีบริการ จำเป็นเฉพาะเมื่อคุณใช้การรับรองความถูกต้องของบัญชีบริการ

artifactType

ระบุประเภทไฟล์ของแอปของคุณ สามารถตั้งค่าเป็น "AAB" หรือ "APK" ได้

artifactPath

เส้นทางที่แน่นอนไปยังไฟล์ APK หรือ AAB ที่คุณต้องการอัปโหลด

releaseNotes หรือ releaseNotesFile

บันทึกประจำรุ่นสำหรับรุ่นนี้

คุณสามารถระบุบันทึกประจำรุ่นโดยตรงหรือระบุเส้นทางไปยังไฟล์ข้อความธรรมดาก็ได้

testers หรือ testersFile

ที่อยู่อีเมลของผู้ทดสอบที่คุณต้องการแจกจ่ายบิลด์ให้

คุณสามารถระบุผู้ทดสอบเป็นรายการที่อยู่อีเมลที่คั่นด้วยเครื่องหมายจุลภาค:

testers="ali@example.com, bri@example.com, cal@example.com"

หรือคุณสามารถระบุเส้นทางไปยังไฟล์ที่มีรายการที่อยู่อีเมลที่คั่นด้วยเครื่องหมายจุลภาค:

testersFile="/path/to/testers.txt"
groups หรือ groupsFile

กลุ่มผู้ทดสอบที่คุณต้องการแจกจ่ายบิลด์ให้ (ดู จัดการผู้ทดสอบ ) มีการระบุกลุ่มโดยใช้ นามแฝงของกลุ่ม ซึ่งคุณจะพบได้ในแท็บ ผู้ทดสอบ ในคอนโซล Firebase App Distribution

คุณสามารถระบุกลุ่มเป็นรายการนามแฝงกลุ่มที่คั่นด้วยเครื่องหมายจุลภาค:

groups="qa-team, android-testers"

หรือคุณสามารถระบุเส้นทางไปยังไฟล์ที่มีรายการนามแฝงกลุ่มที่คั่นด้วยเครื่องหมายจุลภาค:

groupsFile="/path/to/tester-groups.txt"
testDevices หรือ testDevicesFile

ประเภทการเผยแพร่ต่อไปนี้เป็นส่วนหนึ่งของ ฟีเจอร์ผู้ทดสอบอัตโนมัติรุ่นเบต้า

อุปกรณ์ทดสอบที่คุณต้องการกระจายบิวด์ไปให้ (ดู การทดสอบอัตโนมัติ )

คุณสามารถระบุอุปกรณ์ทดสอบเป็นรายการข้อกำหนดของอุปกรณ์โดยคั่นด้วยเครื่องหมายอัฒภาค:

testDevices="model=shiba,version=34,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait"

หรือคุณสามารถระบุเส้นทางไปยังไฟล์ที่มีรายการข้อกำหนดอุปกรณ์ที่คั่นด้วยเครื่องหมายอัฒภาค:

testDevicesFile="/path/to/testDevices.txt"
testUsername

ชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่าง การทดสอบอัตโนมัติ

testPassword หรือ testPasswordFile

รหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่าง การทดสอบอัตโนมัติ

หรือคุณสามารถระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มีรหัสผ่าน:

testPasswordFile="/path/to/testPassword.txt"
testUsernameResource

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

testPasswordResource

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

testNonBlocking

เรียกใช้ การทดสอบอัตโนมัติ แบบอะซิงโครนัส ไปที่คอนโซล Firebase เพื่อดูผลการทดสอบอัตโนมัติ

stacktrace

พิมพ์ stacktrace สำหรับข้อยกเว้นของผู้ใช้ สิ่งนี้มีประโยชน์เมื่อทำการดีบักปัญหา

ขั้นตอนที่ 4 เผยแพร่แอปของคุณให้กับผู้ทดสอบ

  1. สุดท้าย หากต้องการจัดแพ็กเกจแอปทดสอบและเชิญผู้ทดสอบ ให้สร้างเป้าหมาย BUILD-VARIANT และ appDistributionUpload BUILD-VARIANT ด้วย Gradle wrapper ของโปรเจ็กต์ของคุณ โดยที่ BUILD-VARIANT คือรสชาติของผลิตภัณฑ์เสริมและประเภทบิลด์ที่คุณกำหนดค่าไว้ในขั้นตอนก่อนหน้า สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรสชาติของผลิตภัณฑ์ โปรดดู ที่ กำหนดค่าตัวแปรรุ่น

    ตัวอย่างเช่น หากต้องการเผยแพร่แอปของคุณโดยใช้เวอร์ชันบิวด์ release ให้รันคำสั่งต่อไปนี้:

    ./gradlew assembleRelease appDistributionUploadRelease
    

    หรือหากคุณตรวจสอบสิทธิ์กับ บัญชี Google ของคุณและไม่ได้ระบุข้อมูลรับรองในไฟล์ Gradle build ให้รวมตัวแปร FIREBASE_TOKEN ด้วย:

    export FIREBASE_TOKEN=1/a1b2c3d4e5f67890
    ./gradlew --stop // Only needed for environment variable changes
    ./gradlew assembleRelease appDistributionUploadRelease
    
  2. คุณยังสามารถแทนที่ค่าที่ตั้งไว้ในไฟล์ build.gradle ของคุณได้โดยส่งอาร์กิวเมนต์บรรทัดคำสั่งในรูปแบบ --<property-name>=<property-value> ตัวอย่างเช่น:

    • หากต้องการอัปโหลดบิลด์แก้ไขข้อบกพร่องไปยัง App Distribution:

      ./gradlew bundleDebug appDistributionUploadDebug
          --artifactType="APK"
      
    • หากต้องการเชิญผู้ทดสอบเพิ่มเติมหรือลบผู้ทดสอบที่มีอยู่ออกจากโปรเจ็กต์ Firebase ของคุณ ให้ทำดังนี้

      ./gradlew appDistributionAddTesters
          --projectNumber=<project_number>
          --emails="anothertester@email.com, moretesters@email.com"
      ./gradlew appDistributionRemoveTesters
          --projectNumber=<project_number>
          --emails="anothertester@email.com, moretesters@email.com"
      

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

    คุณยังสามารถระบุผู้ทดสอบโดยใช้ --file="/path/to/testers.txt" แทน --emails ได้

    งาน appDistributionAddTesters และ appDistributionRemoveTesters ยังยอมรับอาร์กิวเมนต์ต่อไปนี้ด้วย:

    • projectNumber : หมายเลขโปรเจ็กต์ Firebase ของคุณ

    • serviceCredentialsFile : เส้นทางไปยังไฟล์ข้อมูลรับรองบริการ Google ของคุณ นี่เป็นอาร์กิวเมนต์เดียวกับที่ใช้โดยการดำเนินการอัปโหลด

ปลั๊กอิน Gradle จะแสดงลิงก์ต่อไปนี้หลังจากอัปโหลดแล้ว ลิงก์เหล่านี้ช่วยคุณจัดการไบนารีและรับรองว่าผู้ทดสอบและนักพัฒนารายอื่นมีรุ่นที่ถูกต้อง:

  • firebase_console_uri - ลิงก์ไปยังคอนโซล Firebase ที่แสดงรุ่นเดียว คุณสามารถแชร์ลิงก์นี้กับนักพัฒนาคนอื่นๆ ในองค์กรของคุณได้
  • testing_uri - ลิงก์ไปยังการเปิดตัวในประสบการณ์ของผู้ทดสอบ (แอปเนทิฟ Android) ที่ให้ผู้ทดสอบดูบันทึกประจำรุ่นและติดตั้งแอปลงในอุปกรณ์ของตน ผู้ทดสอบจำเป็นต้องเข้าถึงรุ่นเพื่อใช้ลิงก์
  • binary_download_uri - ลิงก์ที่ลงนามซึ่งดาวน์โหลดและติดตั้งไบนารีของแอปโดยตรง (ไฟล์ APK หรือ AAB) ลิงก์จะหมดอายุหลังจากหนึ่งชั่วโมง

เมื่อคุณเผยแพร่รุ่นของคุณแล้ว รุ่นนั้นจะพร้อมใช้งานในแดชบอร์ด App Distribution ของคอนโซล Firebase เป็นเวลา 150 วัน (ห้าเดือน) เมื่อบิลด์มีอายุ 30 วันนับจากวันหมดอายุ ข้อความแจ้งการหมดอายุจะปรากฏทั้งในคอนโซลและรายการบิลด์ของผู้ทดสอบบนอุปกรณ์ทดสอบ

ผู้ทดสอบที่ไม่ได้รับเชิญให้ทดสอบแอปจะได้รับคำเชิญทางอีเมลเพื่อเริ่มต้นใช้งาน และผู้ทดสอบที่มีอยู่จะได้รับการแจ้งเตือนทางอีเมลว่ามีบิลด์ใหม่พร้อมที่จะทดสอบ (อ่าน คู่มือการตั้งค่าผู้ทดสอบ เพื่อดูคำแนะนำในการติดตั้งแอปทดสอบ) คุณสามารถตรวจสอบสถานะของผู้ทดสอบแต่ละคนได้ว่าพวกเขายอมรับคำเชิญหรือไม่และดาวน์โหลดแอปในคอนโซล Firebase หรือไม่

ผู้ทดสอบมีเวลา 30 วันในการตอบรับคำเชิญให้ทดสอบแอปก่อนที่จะหมดอายุ เมื่อคำเชิญเหลือเวลา 5 วันนับจากวันหมดอายุ การแจ้งการหมดอายุจะปรากฏในคอนโซล Firebase ถัดจากผู้ทดสอบในรุ่นหนึ่ง คุณสามารถต่ออายุคำเชิญได้โดยส่งอีกครั้งโดยใช้เมนูแบบเลื่อนลงในแถวผู้ทดสอบ

ขั้นตอนถัดไป