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


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

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

ก่อนเริ่มต้น

เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้ดำเนินการ

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

ขั้นตอนที่ 1 ตั้งค่าโปรเจ็กต์ Android

  1. ในไฟล์ Gradle ระดับรูท (ระดับโปรเจ็กต์) (<project>/build.gradle.kts หรือ <project>/build.gradle) ให้เพิ่ม App Distributionปลั๊กอิน Gradle เป็นทรัพยากร Dependency ดังนี้

    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.3" apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id("com.google.firebase.appdistribution") version "5.1.1" 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.3' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '5.1.1' 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 อย่างน้อย 1 ส่วน

เช่น หากต้องการเผยแพร่บิลด์ 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 ใน Product Flavor "demo" และ "full" ให้ทำตามวิธีการต่อไปนี้

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"
          }
      }
  }

  // ...
}

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

App Distribution สร้างพารามิเตอร์
appId

รหัสแอป Firebase ของแอป จำเป็นเฉพาะในกรณีที่ไม่ได้ติดตั้ง ปลั๊กอิน Gradle ของบริการ Google คุณดูรหัสแอปได้ใน ไฟล์ 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

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

คุณระบุกลุ่มเป็นรายการชื่อแทนกลุ่มที่คั่นด้วยคอมมาได้ดังนี้

groups="qa-team, android-testers"

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

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

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

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

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

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 และ appDistributionUploadBUILD-VARIANT ด้วย Gradle Wrapper ของโปรเจ็กต์ โดยที่ BUILD-VARIANT คือ Product Flavor และประเภทบิลด์ที่คุณกำหนดค่าไว้ในขั้นตอนก่อนหน้า (ไม่บังคับ) ดูข้อมูลเพิ่มเติมเกี่ยวกับรสชาติของผลิตภัณฑ์ได้ที่ กำหนดค่าตัวแปรบิลด์

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

    ./gradlew assembleRelease appDistributionUploadRelease
    

    หรือหากคุณตรวจสอบสิทธิ์ด้วยบัญชี Google และไม่ได้ระบุข้อมูลเข้าสู่ระบบในไฟล์บิลด์ Gradle ให้รวมตัวแปร 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) โดยตรง ลิงก์จะหมดอายุหลังจากผ่านไป 1 ชั่วโมง

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

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

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

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