ใช้ขั้นตอนในคู่มือนี้เพื่อเข้าถึง Asset Pack ของแอปจาก C และ C++ โค้ด
ตัวอย่าง รหัสการผสานรวม มีใน GitHub
สร้างมาเพื่อโฆษณาเนทีฟ
ใช้ขั้นตอนต่อไปนี้เพื่อสร้างการนำส่งเนื้อหา Play ลงใน Android ของโปรเจ็กต์ App Bundle คุณไม่จำเป็นต้องใช้ Android Studio ในการทำตามขั้นตอนเหล่านี้
อัปเดตเวอร์ชันของปลั๊กอิน Android Gradle ในโปรเจ็กต์
build.gradle
ไฟล์ไปยัง4.0.0
ขึ้นไปในไดเรกทอรีระดับบนสุดของโปรเจ็กต์ ให้สร้างไดเรกทอรีสำหรับเนื้อหา แพ็ก ชื่อไดเรกทอรีนี้จะใช้เป็นชื่อ Asset Pack ชื่อ Asset Pack ต้องขึ้นต้นด้วยตัวอักษรและประกอบด้วยตัวอักษร ตัวเลข และ ขีดล่าง
ในไดเรกทอรี Asset Pack ให้สร้างไฟล์
build.gradle
แล้วเพิ่มเมธอด โค้ดต่อไปนี้ อย่าลืมระบุชื่อ Asset Pack และระบุเพียงชื่อเดียว ประเภทการนำส่ง:// In the asset pack’s build.gradle file: plugins { id 'com.android.asset-pack' } assetPack { packName = "asset-pack-name" // Directory name for the asset pack dynamicDelivery { deliveryType = "[ install-time | fast-follow | on-demand ]" } }
เพิ่มชื่อ Asset Pack ทั้งหมดในไฟล์
build.gradle
ของแอปของโปรเจ็กต์ ในโปรเจ็กต์ของคุณตามที่แสดงด้านล่าง// In the app build.gradle file: android { ... assetPacks = [":asset-pack-name", ":asset-pack2-name"] }
ในไฟล์
settings.gradle
ของโปรเจ็กต์ ให้ใส่ Asset Pack ทั้งหมดไว้ในไฟล์ ตามที่แสดงด้านล่าง// In the settings.gradle file: include ':app' include ':asset-pack-name' include ':asset-pack2-name'
ในไดเรกทอรี Asset Pack ให้สร้างไดเรกทอรีย่อยต่อไปนี้
src/main/assets
วางเนื้อหาไว้ในไดเรกทอรี
src/main/assets
คุณสามารถสร้าง ในไดเรกทอรีย่อยด้วย โครงสร้างไดเรกทอรีสำหรับแอปควร ซึ่งจะมีลักษณะดังนี้build.gradle
settings.gradle
app/
asset-pack-name/build.gradle
asset-pack-name/src/main/assets/your-asset-directories
สร้าง Android App Bundle ด้วย Gradle ใน App Bundle ที่สร้างขึ้น ตอนนี้ไดเรกทอรีระดับรูทได้รวม ดังต่อไปนี้:
asset-pack-name/manifest/AndroidManifest.xml
: กำหนดค่าตัวระบุและโหมดการนำส่งของ Asset Packasset-pack-name/assets/your-asset-directories
: ไดเรกทอรีที่มีการนำส่งเนื้อหาทั้งหมดซึ่งเป็นส่วนหนึ่งของ Asset Pack
Gradle สร้างไฟล์ Manifest สำหรับ Asset Pack แต่ละรายการและเอาต์พุต
assets/
ไดเรกทอรีให้กับคุณ(ไม่บังคับ) กำหนดค่า App Bundle ให้รองรับพื้นผิวต่างๆ รูปแบบการบีบอัด
ผสานรวมกับไลบรารีการนำส่งเนื้อหา Play
คุณใช้ API นี้ตามประเภทการนำส่งของ Asset Pack ที่ต้องการเข้าถึง ขั้นตอนเหล่านี้จะปรากฏในส่วนต่อไปนี้ โฟลว์ชาร์ต
Play Core Native SDK มีส่วนหัว C
ไฟล์ play/asset_pack.h
เพื่อขอ Asset Pack จัดการการดาวน์โหลด และ
การเข้าถึงชิ้นงาน
ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์สําหรับ Play Core Native SDK
Download Play Core Native SDK
Before downloading, you must agree to the following terms and conditions.
Terms and Conditions
Last modified: September 24, 2020- By using the Play Core Software Development Kit, you agree to these terms in addition to the Google APIs Terms of Service ("API ToS"). If these terms are ever in conflict, these terms will take precedence over the API ToS. Please read these terms and the API ToS carefully.
- For purposes of these terms, "APIs" means Google's APIs, other developer services, and associated software, including any Redistributable Code.
- “Redistributable Code” means Google-provided object code or header files that call the APIs.
- Subject to these terms and the terms of the API ToS, you may copy and distribute Redistributable Code solely for inclusion as part of your API Client. Google and its licensors own all right, title and interest, including any and all intellectual property and other proprietary rights, in and to Redistributable Code. You will not modify, translate, or create derivative works of Redistributable Code.
- Google may make changes to these terms at any time with notice and the opportunity to decline further use of the Play Core Software Development Kit. Google will post notice of modifications to the terms at https://developer.android.com/guide/playcore/license. Changes will not be retroactive.
เลือกดำเนินการอย่างหนึ่งดังต่อไปนี้
- ติดตั้ง Android Studio เวอร์ชัน 4.0 ขึ้นไป ใช้ SDK UI ของ Manager เพื่อติดตั้งแพลตฟอร์ม Android SDK เวอร์ชัน 10.0 (API ระดับ 29)
- ติดตั้งเครื่องมือบรรทัดคำสั่ง Android SDK
และใช้
sdkmanager
เพื่อติดตั้ง แพลตฟอร์ม Android SDK เวอร์ชัน 10.0 (API ระดับ 29)
เตรียม Android Studio สำหรับการพัฒนาในตัวโดยใช้ SDK Manager เพื่อติดตั้งเวอร์ชันล่าสุด CMake และ Android Native Development Kit (NDK) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ การสร้างหรือการนำเข้าโปรเจ็กต์เนทีฟ โปรดดู เริ่มต้นใช้งาน NDK
ดาวน์โหลดไฟล์ ZIP และแตกข้อมูลควบคู่ไปกับโปรเจ็กต์ของคุณ
ลิงก์ดาวน์โหลด ขนาด ผลรวมตรวจสอบ SHA-256 36 MiB 782a8522d937848c83a715c9a258b95a3ff2879a7cd71855d137b41c00786a5e อัปเดตไฟล์
build.gradle
ของแอปตามที่แสดงด้านล่างดึงดูด
// App build.gradle plugins { id 'com.android.application' } // Define a path to the extracted Play Core SDK files. // If using a relative path, wrap it with file() since CMake requires absolute paths. def playcoreDir = file('../path/to/playcore-native-sdk') android { defaultConfig { ... externalNativeBuild { cmake { // Define the PLAYCORE_LOCATION directive. arguments "-DANDROID_STL=c++_static", "-DPLAYCORE_LOCATION=$playcoreDir" } } ndk { // Skip deprecated ABIs. Only required when using NDK 16 or earlier. abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } buildTypes { release { // Include Play Core Library proguard config files to strip unused code while retaining the Java symbols needed for JNI. proguardFile '$playcoreDir/proguard/common.pgcfg' proguardFile '$playcoreDir/proguard/gms_task.pgcfg' proguardFile '$playcoreDir/proguard/per-feature-proguard-files' ... } debug { ... } } externalNativeBuild { cmake { path 'src/main/CMakeLists.txt' } } } dependencies { // Import these feature-specific AARs for each Google Play Core library. implementation 'com.google.android.play:app-update:2.1.0' implementation 'com.google.android.play:asset-delivery:2.2.2' implementation 'com.google.android.play:integrity:1.4.0' implementation 'com.google.android.play:review:2.0.1' // Import these common dependencies. implementation 'com.google.android.gms:play-services-tasks:18.0.2' implementation files("$playcoreDir/playcore-native-metadata.jar") ... }
Kotlin
// App build.gradle plugins { id("com.android.application") } // Define a path to the extracted Play Core SDK files. // If using a relative path, wrap it with file() since CMake requires absolute paths. val playcoreDir = file("../path/to/playcore-native-sdk") android { defaultConfig { ... externalNativeBuild { cmake { // Define the PLAYCORE_LOCATION directive. arguments += listOf("-DANDROID_STL=c++_static", "-DPLAYCORE_LOCATION=$playcoreDir") } } ndk { // Skip deprecated ABIs. Only required when using NDK 16 or earlier. abiFilters.clear() abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64") } } buildTypes { release { // Include Play Core Library proguard config files to strip unused code while retaining the Java symbols needed for JNI. proguardFile("$playcoreDir/proguard/common.pgcfg") proguardFile("$playcoreDir/proguard/gms_task.pgcfg") proguardFile("$playcoreDir/proguard/per-feature-proguard-files") ... } debug { ... } } externalNativeBuild { cmake { path = "src/main/CMakeLists.txt" } } } dependencies { // Import these feature-specific AARs for each Google Play Core library. implementation("com.google.android.play:app-update:2.1.0") implementation("com.google.android.play:asset-delivery:2.2.2") implementation("com.google.android.play:integrity:1.4.0") implementation("com.google.android.play:review:2.0.1") // Import these common dependencies. implementation("com.google.android.gms:play-services-tasks:18.0.2") implementation(files("$playcoreDir/playcore-native-metadata.jar")) ... }
อัปเดตไฟล์
CMakeLists.txt
ของแอปตามที่แสดงด้านล่างcmake_minimum_required(VERSION 3.6) ... # Add a static library called “playcore” built with the c++_static STL. include(${PLAYCORE_LOCATION}/playcore.cmake) add_playcore_static_library() // In this example “main” is your native code library, i.e. libmain.so. add_library(main SHARED ...) target_include_directories(main PRIVATE ${PLAYCORE_LOCATION}/include ...) target_link_libraries(main android playcore ...)
การรวบรวมข้อมูล
Play Core Native SDK อาจรวบรวมข้อมูลที่เกี่ยวข้องกับเวอร์ชันเพื่อให้ Google ดำเนินการต่อไปนี้ได้ เพื่อปรับปรุงผลิตภัณฑ์ รวมถึง
- ชื่อแพ็กเกจของแอป
- เวอร์ชันแพ็กเกจของแอป
- เวอร์ชันของ Play Core Native SDK
ข้อมูลนี้จะรวบรวมเมื่อคุณอัปโหลดแพ็กเกจแอป
ไปยัง Play Console หากต้องการเลือกไม่ใช้กระบวนการเก็บรวบรวมข้อมูลนี้ ให้นำ
นำเข้า $playcoreDir/playcore-native-metadata.jar
ในไฟล์build.gradle
โปรดทราบว่าการรวบรวมข้อมูลนี้เกี่ยวข้องกับการใช้ Play Core Native SDK และ การใช้ข้อมูลที่เก็บรวบรวมของ Google แยกต่างหาก และเป็นอิสระจาก คอลเล็กชันของทรัพยากร Dependency ของไลบรารีที่ประกาศใน Gradle เมื่อคุณอัปโหลดแอป ลงใน Play Console ได้
การนำส่งเวลาติดตั้ง
Asset Pack ที่กำหนดค่าเป็น install-time
จะพร้อมใช้งานในแอปทันที
เปิดใช้งาน ใช้ NDK AAssetManager API เพื่อเข้าถึง
เนื้อหาที่แสดงในโหมดนี้:
#include <android/asset_manager.h> #include <android_native_app_glue.h> ... AAssetManager* assetManager = app->activity->assetManager; AAsset* asset = AAssetManager_open(assetManager, "asset-name", AASSET_MODE_BUFFER); size_t assetLength = AAsset_getLength(asset); char* buffer = (char*) malloc(assetLength + 1); AAsset_read(asset, buffer, assetLength);
นำส่งสินค้าตามคำสั่งซื้ออย่างรวดเร็ว
ส่วนต่อไปนี้จะแสดงวิธีเริ่มต้นใช้งาน API รวมถึงวิธีรับข้อมูล
เกี่ยวกับ Asset Pack ก่อนที่จะดาวน์โหลด วิธีเรียกใช้ API เพื่อเริ่มต้น
ดาวน์โหลด และวิธีเข้าถึงชุดไฟล์ที่ดาวน์โหลดไว้ ส่วนเหล่านี้ใช้กับ
Asset Pack fast-follow
และ on-demand
การเปิดแอป
โทรหา AssetPackManager_init()
เสมอ
เพื่อเริ่มต้น Asset Pack API ก่อนที่จะเรียกใช้ API
ตรวจหา
รหัสข้อผิดพลาดของ Asset Pack
#include "play/asset_pack.h" ... AssetPackErrorCode AssetPackManager_init(JavaVM* jvm, jobject android_context);
และอย่าลืมเรียกใช้ฟังก์ชันต่อไปนี้ใน onPause()
และ onResume()
จาก
ANativeActivityCallbacks
ดูข้อมูลการดาวน์โหลดเกี่ยวกับ Asset Pack
แอปต้องเปิดเผยขนาดของการดาวน์โหลดก่อนดึงข้อมูลเนื้อหา
แพ็ก ใช้เมนู
AssetPackManager_requestInfo()
เพื่อเริ่มคำขอแบบอะซิงโครนัสสำหรับขนาดของการดาวน์โหลดและ
ดาวน์โหลดแพ็คนั้นๆ หรือไม่ จากนั้นใช้
AssetPackManager_getDownloadState()
ในการสร้างแบบสำรวจสำหรับสถานะการดาวน์โหลด (เช่น เรียกใช้ฟังก์ชันนี้ 1 ครั้งต่อเฟรม)
ใน Game Loop ของคุณ) หากคำขอล้มเหลว ให้ตรวจสอบ
รหัสข้อผิดพลาดของ Asset Pack
AssetPackErrorCode AssetPackManager_requestInfo(); // Call once AssetPackErrorCode AssetPackManager_getDownloadState(); // Call once per frame in your game loop
ฟังก์ชัน AssetPackManager_getDownloadState()
แสดงผลประเภททึบแสง
AssetPackDownloadState
เป็นตัวชี้เอาต์พุต ใช้ตัวชี้นี้เพื่อเรียกฟังก์ชันต่อไปนี้
AssetPackDownloadState* state; AssetPackErrorCode error_code = AssetPackManager_getDownloadState(asset-pack-name, &state); AssetPackDownloadStatus status = AssetPackDownloadState_getStatus(state); uint64_t downloadedBytes = AssetPackDownloadState_getBytesDownloaded(state); uint64_t totalBytes = AssetPackDownloadState_getTotalBytesToDownload(state)); AssetPackDownloadState_destroy(state);
ติดตั้ง
ใช้
AssetPackManager_requestDownload()
เพื่อเริ่มดาวน์โหลด Asset Pack เป็นครั้งแรกหรือขอเนื้อหา
การอัปเดตแพ็กเพื่อให้เสร็จสมบูรณ์:
AssetPackErrorCode AssetPackManager_requestDownload(); // Call once AssetPackErrorCode AssetPackManager_getDownloadState(); // Call once per frame in your game loop
ฟังก์ชัน AssetPackManager_getDownloadState()
แสดงผลประเภททึบแสง
AssetPackDownloadState
สำหรับข้อมูลเกี่ยวกับวิธีใช้ประเภทนี้ โปรดดูที่
รับข้อมูลการดาวน์โหลด
การดาวน์โหลดขนาดใหญ่
หากการดาวน์โหลดมีขนาดใหญ่กว่า 200 MB และผู้ใช้ไม่ได้ใช้ Wi-Fi ระบบจะดาวน์โหลด
จะไม่เริ่มต้นจนกว่าผู้ใช้จะให้ความยินยอมอย่างชัดแจ้งในการดำเนินการต่อ
ดาวน์โหลดโดยใช้การเชื่อมต่ออินเทอร์เน็ตมือถือ ในทำนองเดียวกัน หากไฟล์ดาวน์โหลดมีขนาดใหญ่และ
ผู้ใช้ขาด Wi-Fi การดาวน์โหลดหยุดลงชั่วคราว และได้รับการยินยอมอย่างชัดเจนเพื่อ
ดำเนินการต่อโดยใช้การเชื่อมต่ออินเทอร์เน็ตมือถือ แพ็กที่หยุดชั่วคราวมีสถานะ
WAITING_FOR_WIFI
หากต้องการทริกเกอร์โฟลว์ UI เพื่อแสดงข้อความแจ้งขอคำยินยอม ให้ใช้
ดังต่อไปนี้
ต้องมีการยืนยันผู้ใช้
หากแพ็กมีสถานะ REQUIRES_USER_CONFIRMATION
การดาวน์โหลดจะไม่
ดำเนินการจนกว่าผู้ใช้จะยอมรับกล่องโต้ตอบที่ปรากฏพร้อมกับ
AssetPackManager_showConfirmationDialog()
สถานะนี้อาจเกิดขึ้นหาก
Play ไม่รู้จักแอปนี้ โปรดทราบว่าการโทร
AssetPackManager_showConfirmationDialog()
ในกรณีนี้ทำให้แอป
อัปเดตแล้ว หลังจากอัปเดตแล้ว ให้ขอชิ้นงานอีกครั้ง
เข้าถึง Asset Pack
คุณสามารถเข้าถึง Asset Pack ได้โดยใช้การเรียกระบบไฟล์หลังจากคำขอดาวน์โหลด
มาถึงสถานะ COMPLETED
Asset Pack แต่ละรายการจะเก็บอยู่ในไดเรกทอรีแยกต่างหาก
ในที่จัดเก็บข้อมูลภายในของแอป ใช้
AssetPackManager_getAssetPackLocation()
เพื่อรับ
AssetPackLocation
สำหรับ Asset Pack ที่ระบุ ใช้
AssetPackLocation_getStorageMethod()
ที่ตำแหน่งนั้นเพื่อกำหนดวิธีการจัดเก็บข้อมูล
ASSET_PACK_STORAGE_APK
: Asset Pack ติดตั้งเป็น APK โปรดดู การนำส่งเมื่อติดตั้งเพื่อเข้าถึงเนื้อหาเหล่านี้ASSET_PACK_STORAGE_FILES
: ใช้AssetPackLocation_getAssetsPath()
เพื่อรับเส้นทางของไฟล์ไปยังไดเรกทอรีที่มีเนื้อหา หรือไม่มีข้อมูลหาก ยังไม่ได้ดาวน์โหลดเนื้อหา ไม่ต้องแก้ไขไฟล์ที่ดาวน์โหลดในไฟล์นี้ เส้นทาง
AssetPackLocation* location; AssetPackErrorCode error_code = AssetPackManager_getAssetPackLocation(asset-pack-name, &location); if (error_code == ASSET_PACK_NO_ERROR) { AssetPackStorageMethod storage_method = AssetPackLocation_getStorageMethod(location); const char* assets_path = AssetPackLocation_getAssetsPath(location); AssetPackLocation_destroy(location); }
เมื่อพบเนื้อหาแล้ว ให้ใช้ฟังก์ชัน เช่น fopen
หรือ ifstream
เพื่อเข้าถึง
ในไฟล์
เมธอด API ของ Play Core อื่นๆ
เมธอด API เพิ่มเติมบางส่วนที่คุณอาจต้องการใช้ในแอปมีดังนี้
ยกเลิกคำขอ
ใช้
AssetPackManager_cancelDownload()
เพื่อยกเลิกคำขอ Asset Pack ที่ใช้งานอยู่ โปรดทราบว่าคำขอนี้เป็นวิธีที่ดีที่สุด
ขอให้นำออก
ใช้
AssetPackManager_requestRemoval()
เพื่อกำหนดเวลาการนำ Asset Pack ออก
ขั้นตอนถัดไป
ทดสอบ Play Asset Delivery ในเครื่องและจาก Google Play