Giriş
Cihaz Üzerinde Yapay Zeka için Google Play, Android App Bundle'ın ve Google Play dağıtımının avantajlarını özel ML modeli dağıtımına getirir. Böylece, ek ücret ödemeden daha az cihaz ekosistemi karmaşıklığıyla model performansını artırabilirsiniz. Bu özellik sayesinde kodunuzu, öğelerinizi ve makine öğrenimi modellerinizi içeren tek bir yapıyı Google Play'de yayınlayabilir, çeşitli yayınlama modları ve hedefleme seçenekleri arasından seçim yapabilirsiniz.
Avantajları
- Google Play'e tek bir yayınlama yapısı yükleyin ve barındırma, yayınlama, güncelleme ve hedefleme işlemlerini ek ücret ödemeden Play'e devredin.
- ML modellerinizi yükleme sırasında, hızlı indirme veya seç-izle yöntemiyle sunun.
- Yükleme sırasında yayınlama, uygulamanız açıldığında çok büyük bir modelin mevcut olmasını garanti edebilir. Modeliniz APK olarak yüklenir.
- Hızlı takip teslimatı, uygulamanız yüklendikten sonra arka planda otomatik olarak gerçekleşir. Kullanıcılar, modeliniz tamamen indirilmeden önce uygulamanızı açabilir. Modeliniz, uygulamanızın dahili depolama alanına indirilir.
- İsteğe bağlı yayınlama, modeli çalışma zamanında istemenize olanak tanır. Bu, model yalnızca belirli kullanıcı işlemleri akışları için gerekliyse kullanışlıdır. Modeliniz, uygulamanızın dahili depolama alanına indirilir.
- ML modellerinizin, cihaz modeline, sistem özelliklerine veya RAM'e göre belirli cihazları hedefleyen varyantlarını yayınlayın.
- Google Play'in otomatik yama özelliği sayesinde uygulama güncellemelerini küçük ve optimize edilmiş halde tutun. Bu özellik, yalnızca dosyalardaki farklılıkların indirilmesini sağlar.
Dikkat edilmesi gereken noktalar
- Cihaz üzerinde yapay zeka için Google Play'i kullanarak Google Play Geliştirici Dağıtım Sözleşmesi ve Play Core Yazılım Geliştirme Kiti Hizmet Şartları'nı kabul etmiş olursunuz.
- Google Play'in cihaz üzerinde yapay zeka için indirdiği modeller yalnızca uygulamalarınız tarafından kullanılmalıdır. Modeller diğer uygulamalara sunulmamalıdır.
- Yapay zeka paketlerinin sıkıştırılmış indirme boyutları 1, 5 GB'a kadar çıkabilir. Uygulama paketinizden oluşturulan herhangi bir uygulama sürümünün kümülatif boyutu en fazla 4 GB olabilir.
- Boyutu 1 GB'tan büyük uygulamalar, minimum SDK düzeyini 21 veya daha yüksek bir değere ayarlamalıdır.
Play for cihaz üzerinde yapay zeka nasıl kullanılır?
Play for cihaz üzerinde yapay zeka, yapay zeka paketlerini kullanır. Dağıtıma hazır özel modelleri, uygulama paketinizdeki yapay zeka paketlerinde paketlersiniz. Yapay zeka paketinin yükleme sırasında, hızlı takip yöntemiyle veya isteğe bağlı olarak sunulmasını seçebilirsiniz.
Yapay zeka paketlerini uygulama paketinizle birlikte paketleyerek uygulamanızın özel modellerinizle dağıtımını yönetmek için Google Play'in mevcut tüm test ve sürüm araçlarını (ör. test kanalları ve aşamalı sunumlar) kullanabilirsiniz.
Yapay zeka paketleri, uygulama ikili programıyla birlikte güncellenir. Yeni uygulama sürümünüz bir yapay zeka paketinde değişiklik yapmıyorsa Google Play'in otomatik yama işlemi, kullanıcının paketi yeniden indirmesine gerek kalmamasını sağlar. Play, uygulamayı güncellerken yalnızca değişen kısımları indirir.
Yapay zeka paketleri yalnızca modeller içerir. Java/Kotlin ve yerel kitaplıklara izin verilmez. ML modelinizi çalıştırmak için kitaplıklar veya kod göndermeniz gerekiyorsa bunları temel modüle ya da bir özellik modülüne taşıyın. Özellik modülünüzü, yapay zeka paketiyle aynı indirme ve hedefleme ayarlarına sahip olacak şekilde yapılandırabilirsiniz.
Yapay zeka paketleriyle LiteRT ve MediaPipe'ı kullanma
LiteRT ve MediaPipe'ı yapay zeka paketleriyle kullanabilirsiniz. Modelinizi bir yapay zeka paketine ekleyin ve ardından yükleme sırasında indirilen paketler veya hızlı indirme ve seç-izle paketleri ile ilgili talimatları uygulayarak pakete erişin.
Daha fazla bilgi:
- LiteRT'yi kullanmaya başlama
- Örnek uygulama, bir LiteRT modelini yapay zeka paketinde nasıl paketleyebileceğinizi ve çalışma zamanında nasıl yükleyebileceğinizi gösterir.
- Yapay zeka paketlerinde kullanmaya başlayabileceğiniz birçok önceden eğitilmiş LiteRT modeli vardır.
- MediaPipe'ı kullanmaya başlama
- Hızlı indirme ve seç-izle paketlerinde öğelerinizi yüklemek için AssetCache.java dosyasını kullanabilirsiniz (ör.
.binarypbdosya) dosya yollarına göre gruplandırın. - Yükleme zamanı paketleri için AndroidAssetUtil.java dosyasını kullanabilirsiniz.
- Hızlı indirme ve seç-izle paketlerinde öğelerinizi yüklemek için AssetCache.java dosyasını kullanabilirsiniz (ör.
Yapay zeka paketlerini kullanmaya başlama
Play for Cihaz Üzerinde Yapay Zeka'yı kullanmaya şu şekilde başlayabilirsiniz:
- Modellerinizi Android App Bundle'ınızdaki yapay zeka paketleri halinde paketleyin ve yapay zeka paketlerinin nasıl yayınlanacağını belirtin.
- [İsteğe bağlı] Farklı cihazlara farklı modeller sunmak istiyorsanız yapay zeka paketleriniz için cihaz hedeflemeyi yapılandırabilirsiniz. Örneğin, yapay zeka paketi A'yı belirli bir cihaz modeline, yapay zeka paketi B'yi en az 6 GB RAM'e sahip cihazlara gönderebilir, diğer tüm cihazlara ise model göndermeyebilirsiniz.
- [İsteğe bağlı] Seç-izle veya hızlı takip yayınlama yöntemini kullanıyorsanız yapay zeka paketlerinizi gerektiğinde indirmek için Play AI Delivery Library'yi uygulamanıza entegre edin.
- Uygulama paketinizi test edip Google Play'de yayınlayın.
Android Gradle eklentisi sürümünü kontrol etme
Yapay zeka paketlerini kullanmak için Android Gradle eklentisi (AGP) sürümünüzün en az 8.8 olduğundan emin olun. Bu sürüm, Android Studio Ladybug 2 ile birlikte sunulur.
Modelinizi yapay zeka paketine dönüştürme
Aşağıdaki adımlar için Android Studio gerekli değildir.
- Projenizin üst düzey dizininde AI paketi için bir dizin oluşturun. Bu dizin adı, yapay zeka paketi adı olarak kullanılır. Yapay zeka paketi adları bir harfle başlamalı ve yalnızca harf, sayı ve alt çizgi içermelidir.
Yapay zeka paketi dizininde bir
build.gradledosyası oluşturun ve aşağıdaki kodu ekleyin. Yapay zeka paketinin adını ve yalnızca bir teslimat türü belirttiğinizden emin olun:// In the AI pack's build.gradle file: plugins { id 'com.android.ai-pack' } aiPack { packName = "ai-pack-name" // Directory name for the AI pack dynamicDelivery { deliveryType = "[ install-time | fast-follow | on-demand ]" } }Projenin uygulama
build.gradledosyasında, projenizdeki her AI paketinin adını aşağıda gösterildiği gibi ekleyin:// In the app build.gradle file: android { ... assetPacks = [":ai-pack-name", ":ai-pack2-name"] }Projenin
settings.gradledosyasında, projenizdeki tüm yapay zeka paketlerini aşağıda gösterildiği gibi ekleyin:// In the settings.gradle file: include ':app' include ':ai-pack-name' include ':ai-pack2-name'Yapay zeka paketinizde bir
src/main/assets/dizini oluşturun.Modellerinizi
src/main/assetsdizinine yerleştirin. Burada alt dizinler de oluşturabilirsiniz. Uygulamanızın dizin yapısı artık aşağıdaki gibi görünmelidir:build.gradlesettings.gradleapp/ai-pack-name/build.gradleai-pack-name/src/main/assets/your-model-directories
Modellerinizi yükleyip çalıştırmak için kod ekleyin. Bunu nasıl yapacağınız, yapay zeka paketlerinizin yayınlanma moduna bağlıdır. Yükleme sırasında ve hızlı indirme/seç-izle ile ilgili talimatları aşağıda bulabilirsiniz.
[İsteğe bağlı] Farklı cihazlara farklı modeller sunmak için cihaz hedeflemeyi yapılandırın.
Android App Bundle'ı Gradle ile derleyin. Oluşturulan uygulama paketinde, kök düzeyindeki dizin artık şunları içerir:
ai-pack-name/manifest/AndroidManifest.xml: Yapay zeka paketinin tanımlayıcısını ve yayın modunu yapılandırır.ai-pack-name/assets/your-model-directories: Yapay zeka paketi kapsamında sunulan tüm öğeleri içeren dizin
Gradle, her yapay zeka paketi için manifest oluşturur ve
assets/dizinini sizin için oluşturur.
Yükleme sırasında yayınlamayı yapılandırma
Yükleme sırasında kullanılacak şekilde yapılandırılan yapay zeka paketleri, uygulama başlatıldığında hemen kullanılabilir. Bu modda sunulan yapay zeka paketlerine erişmek için Java AssetManager API'yi kullanın:
import android.content.res.AssetManager; ... Context context = createPackageContext("com.example.app", 0); AssetManager assetManager = context.getAssets(); InputStream is = assetManager.open("model-name");
Hızlı takip ve isteğe bağlı yayınlamayı yapılandırma
Hızlı indirme veya seç-izle yayınlama ile yapay zeka paketlerini indirmek için Play AI Delivery Library'yi kullanın.
Play AI Delivery Library'ye bağımlılığı bildirme
Uygulamanızın build.gradle dosyasında Play AI Delivery Library'ye bağımlılık beyan edin:
dependencies {
...
implementation "com.google.android.play:ai-delivery:0.1.1-alpha01"
}
Durumu kontrol et
Her yapay zeka paketi, uygulamanın dahili depolama alanında ayrı bir klasörde saklanır. Bir yapay zeka paketinin kök klasörünü belirlemek için getPackLocation() yöntemini kullanın. Bu yöntem aşağıdaki değerleri döndürür:
| Döndürülen değer | Durum |
|---|---|
Geçerli bir AiPackLocation nesnesi |
Yapay zeka paketi kök klasörüne assetsPath() adresinden hemen erişebilirsiniz. |
null |
Bilinmeyen yapay zeka paketi veya yapay zeka paketleri kullanılamıyor |
Yapay zeka paketleriyle ilgili indirme bilgilerini alma
İndirme boyutunu ve paketin indirilip indirilmediğini belirlemek için
getPackStates()
yöntemini kullanın.
Task<AiPackStates> getPackStates(List<String> packNames)
getPackStates(), Task<AiPackStates> döndüren eşzamansız bir yöntemdir.
Bir AiPackStates nesnesinin packStates() yöntemi, bir Map<String, AiPackState> döndürür. Bu harita, istenen her yapay zeka paketinin durumunu içerir ve adı anahtar olarak kullanılır:
Map<String, AiPackState> AiPackStates#packStates()
Nihai istek aşağıdaki gibi görünür:
final String aiPackName = "myAiPackName"; aiPackManager .getPackStates(Collections.singletonList(aiPackName)) .addOnCompleteListener(new OnCompleteListener<AiPackStates>() { @Override public void onComplete(Task<AiPackStates> task) { AiPackStates aiPackStates; try { aiPackStates = task.getResult(); AiPackState aiPackState = aiPackStates.packStates().get(aiPackName); } catch (RuntimeExecutionException e) { Log.d("MainActivity", e.getMessage()); return; });
Aşağıdaki AiPackState yöntemleri, yapay zeka paketinin boyutunu, şu ana kadar indirilen miktarı (istenirse) ve uygulamaya aktarılan miktarı sağlar:
Bir yapay zeka paketinin durumunu öğrenmek için status() yöntemini kullanın. Bu yöntem, durumu AiPackStatus sınıfındaki sabit bir alana karşılık gelen tam sayı olarak döndürür. Henüz yüklenmemiş bir yapay zeka paketinin durumu AiPackStatus.NOT_INSTALLED şeklindedir.
Bir istek başarısız olursa dönüş değeri AiPackErrorCode sınıfındaki sabit bir alana karşılık gelen errorCode() yöntemini kullanın.
Yükle
Bir yapay zeka paketini ilk kez indirmek veya bir yapay zeka paketinin güncellemesini tamamlamak için fetch() yöntemini kullanın:
Task<AiPackStates> fetch(List<String> packNames)
Bu yöntem, paketlerin listesini ve ilk indirme durumları ile boyutlarını içeren bir AiPackStates nesnesi döndürür.
fetch() üzerinden istenen bir yapay zeka paketi zaten indiriliyorsa indirme durumu döndürülür ve ek indirme işlemi başlatılmaz.
İndirme durumlarını izleme
Yapay zeka paketlerinin yükleme ilerleme durumunu izlemek için AiPackStateUpdateListener uygulamanız gerekir. Durum güncellemeleri, her bir yapay zeka paketinin durumunun takip edilmesini desteklemek için paket bazında ayrılır. İsteğinizle ilgili diğer tüm indirme işlemleri tamamlanmadan önce mevcut yapay zeka paketlerini kullanmaya başlayabilirsiniz.
void registerListener(AiPackStateUpdateListener listener) void unregisterListener(AiPackStateUpdateListener listener)
Büyük boyutlu indirmeler
İndirme işlemi 200 MB'tan büyükse ve kullanıcı kablosuz ağa bağlı değilse indirme işlemi, kullanıcı mobil veri bağlantısı kullanarak indirme işlemine devam etmek için açıkça izin verene kadar başlamaz. Benzer şekilde, indirme işlemi büyükse ve kullanıcının kablosuz bağlantısı kesilirse indirme işlemi duraklatılır ve mobil veri bağlantısı kullanılarak devam etmek için açık izin gerekir. Duraklatılmış bir paketin durumu WAITING_FOR_WIFI olur. Kullanıcıdan izin istemek üzere kullanıcı arayüzü akışını tetiklemek için
showConfirmationDialog()
yöntemini kullanın.
Uygulama bu yöntemi çağırmazsa indirme işlemi duraklatılır ve yalnızca kullanıcı tekrar kablosuz bağlantıya geçtiğinde otomatik olarak devam eder.
Kullanıcı onayı gereklidir
Bir paketin durumu REQUIRES_USER_CONFIRMATION ise kullanıcı showConfirmationDialog() ile gösterilen iletişim kutusunu kabul edene kadar indirme işlemi devam etmez.
Bu durum, uygulama Google Play tarafından tanınmadığında (ör. uygulama başka cihazdan yüklendiyse) ortaya çıkabilir. Bu durumda showConfirmationDialog() yöntemini çağırmanın uygulamanın güncellenmesine neden olacağını unutmayın. Güncellemeden sonra yapay zeka paketlerini tekrar talep etmeniz gerekecek.
Aşağıda, dinleyici uygulamasına dair bir örnek verilmiştir:
AiPackStateUpdateListener aiPackStateUpdateListener = new AiPackStateUpdateListener() { private final ActivityResultLauncher<IntentSenderRequest> activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartIntentSenderForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if (result.getResultCode() == RESULT_OK) { Log.d(TAG, "Confirmation dialog has been accepted."); } else if (result.getResultCode() == RESULT_CANCELED) { Log.d(TAG, "Confirmation dialog has been denied by the user."); } } }); @Override public void onStateUpdate(AiPackState aiPackState) { switch (aiPackState.status()) { case AiPackStatus.PENDING: Log.i(TAG, "Pending"); break; case AiPackStatus.DOWNLOADING: long downloaded = aiPackState.bytesDownloaded(); long totalSize = aiPackState.totalBytesToDownload(); double percent = 100.0 * downloaded / totalSize; Log.i(TAG, "PercentDone=" + String.format("%.2f", percent)); break; case AiPackStatus.TRANSFERRING: // 100% downloaded and assets are being transferred. // Notify user to wait until transfer is complete. break; case AiPackStatus.COMPLETED: // AI pack is ready to use. Run the model. break; case AiPackStatus.FAILED: // Request failed. Notify user. Log.e(TAG, aiPackState.errorCode()); break; case AiPackStatus.CANCELED: // Request canceled. Notify user. break; case AiPackStatus.WAITING_FOR_WIFI: case AiPackStatus.REQUIRES_USER_CONFIRMATION: if (!confirmationDialogShown) { aiPackManager.showConfirmationDialog(activityResultLauncher); confirmationDialogShown = true; } break; case AiPackStatus.NOT_INSTALLED: // AI pack is not downloaded yet. break; case AiPackStatus.UNKNOWN: Log.wtf(TAG, "AI pack status unknown") break; } } }
Alternatif olarak, mevcut indirme işlemlerinin durumunu öğrenmek için
getPackStates()
yöntemini kullanabilirsiniz.
AiPackStates
indirme işleminin ilerleme durumunu, indirme durumunu ve tüm hata kodlarını içerir.
Yapay zeka paketlerine erişme
İndirme isteği COMPLETED durumuna ulaştıktan sonra dosya sistemi çağrılarını kullanarak yapay zeka paketine erişebilirsiniz. Yapay zeka paketinin kök klasörünü almak için getPackLocation() yöntemini kullanın.
Yapay zeka paketleri, yapay zeka paketi kök dizinindeki assets dizininde depolanır.
assetsPath() kolaylık yöntemini kullanarak assets dizininin yolunu alabilirsiniz.
Belirli bir öğenin yolunu almak için aşağıdaki yöntemi kullanın:
private String getAbsoluteAiAssetPath(String aiPack, String relativeAiAssetPath) { AiPackLocation aiPackPath = aiPackManager.getPackLocation(aiPack); if (aiPackPath == null) { // AI pack is not ready return null; } String aiAssetsFolderPath = aiPackPath.assetsPath(); // equivalent to: FilenameUtils.concat(aiPackPath.path(), "assets"); String aiAssetPath = FilenameUtils.concat(aiAssetsFolderPath, relativeAiAssetPath); return aiAssetPath; }
Cihaz hedeflemeyi yapılandırma
Yapay zeka paketlerinizi alması gereken cihazları veya cihaz gruplarını belirtmek için cihaz hedefleme talimatlarını uygulayabilirsiniz.
Diğer Google Play AI Delivery API yöntemleri
Aşağıda, uygulamanızda kullanmak isteyebileceğiniz bazı ek API yöntemleri verilmiştir.
İsteği iptal et
Etkin bir yapay zeka paketi isteğini iptal etmek için
cancel()
komutunu kullanın. Bu isteğin, en iyi çaba ilkesine göre gerçekleştirilen bir işlem olduğunu unutmayın.
Yapay zeka paketini kaldırma
Yapay zeka paketinin kaldırılmasını planlamak için
removePack()
komutunu kullanın.
Birden fazla yapay zeka paketinin konumunu alma
Birden fazla yapay zeka paketinin durumunu toplu olarak sorgulamak için getPackLocations() kullanın. Bu işlem, yapay zeka paketlerinin ve konumlarının haritasını döndürür. getPackLocations() tarafından döndürülen harita, şu anda indirilmiş ve güncel olan her paket için bir giriş içerir.
Cihaz hedefleme
Cihaz hedefleme, uygulama paketinizin hangi bölümlerinin belirli cihazlara gönderileceği konusunda daha ayrıntılı kontrol sağlar. Örneğin, büyük bir modelin yalnızca yüksek RAM'e sahip cihazlara yayınlanmasını sağlayabilir veya bir modelin farklı sürümlerini farklı cihazlara yayınlayabilirsiniz.
Aşağıdaki gibi cihaz özelliklerini hedefleyebilirsiniz:
- Çip üzerinde sistem
- Cihaz modeli
- Cihaz RAM'i
- Sistem özellikleri
Gerekli adımlara genel bakış
Cihaz hedeflemeyi etkinleştirmek için aşağıdaki adımların uygulanması gerekir:
- Cihaz gruplarınızı bir XML dosyasında tanımlayın.
- Paketinizin hangi bölümlerinin hangi cihaz gruplarına gönderileceğini belirtin.
- [İsteğe bağlı] Yapılandırmanızı yerel olarak test edin.
- Paketinizi (XML dosyasını içeren) Google Play'e yükleyin.
Android Gradle eklentisi sürümünü kontrol etme
Cihaz hedeflemeyi kullanmak için Android Gradle eklentisi (AGP) sürümünüzün en az 8.10.0 olduğundan emin olun. Bu özellik, Android Studio (Meerkat 2 ve sonraki sürümler) ile birlikte sunulur. Android Studio'nun en son kararlı sürümünü indirin.
Bu özelliği Android Gradle eklentisinde etkinleştirme
Cihaz hedefleme, gradle.properties dosyanızda açıkça etkinleştirilmelidir:
android.experimental.enableDeviceTargetingConfigApi=true
Cihaz hedefleme yapılandırması XML dosyası oluşturma
Cihaz hedefleme yapılandırma dosyası, özel cihaz gruplarınızı tanımladığınız bir XML dosyasıdır. Örneğin, Qualcomm SM8750 çip üzerinde sistemine sahip tüm cihazları içeren qti_v79 adlı bir cihaz grubu tanımlayabilirsiniz:
<config:device-targeting-config
xmlns:config="http://schemas.android.com/apk/config">
<config:device-group name="qti_v79">
<config:device-selector>
<config:system-on-chip manufacturer="QTI" model="SM8750"/>
</config:device-selector>
</config:device-group>
</config:device-targeting-config>
Cihaz grubu, en fazla 5 cihaz seçiciden oluşur. Cihaz seçicilerden herhangi birini karşılayan cihazlar cihaz grubuna dahil edilir.
Bir cihaz seçicide bir veya daha fazla cihaz özelliği bulunabilir. Seçicinin tüm cihaz özellikleriyle eşleşen cihazlar seçilir.
Bir cihaz birden fazla grupla eşleşirse XML dosyasında ilk tanımlanan grubun içeriği sunulur. XML dosyasında grupları tanımladığınız sıra, öncelik sıranızdır.
Hiçbir grupla eşleşmeyen cihazlar varsayılan "diğer" grubuna atanır. Bu grup otomatik olarak oluşturulur ve açıkça tanımlanmamalıdır.
Kullanılabilir cihaz özellikleri
- device_ram: Cihaz RAM gereksinimleri
- min_bytes (dahil): Gerekli minimum RAM (bayt cinsinden)
- max_bytes (hariç): Gerekli maksimum RAM (bayt cinsinden)
- included_device_ids: Bu seçiciye dahil edilecek cihaz modelleri
(grup başına en fazla 10.000 device_id). Cihaz, listedeki herhangi bir device_id ile eşleşirse bu özellik karşılanır.
- build_brand: Cihaz üreticisi
- build_device: Cihaz modeli kodu
- excluded_device_ids: Bu seçicide hariç tutulacak cihaz modelleri
(grup başına en fazla 10.000 device_id). Cihaz, listedeki hiçbir device_id ile eşleşmiyorsa bu özellik karşılanır.
- build_brand: Cihaz üreticisi
- build_device: Cihaz modeli kodu
required_system_features: Bu seçiciye dahil edilmesi için bir cihazın sahip olması gereken özellikler (grup başına en fazla 100 özellik). Bir cihazın bu özelliği karşılaması için bu listedeki tüm sistem özelliklerine sahip olması gerekir.
Sistem özellik referansı
- name: Bir sistem özelliği
forbidden_system_features: Bu seçici tarafından dahil edilmesi için bir cihazda bulunmaması gereken özellikler (grup başına en fazla 100 özellik). Bir cihazda bu listedeki sistem özelliklerinden herhangi biri varsa bu özellik karşılanmaz.
Sistem özellik referansı
- name: Bir sistem özelliği
system-on-chip: Bu seçiciye dahil edilecek çip üzerinde sistemler. Bir cihazın bu özelliği karşılaması için bu listedeki çiplerden birine sahip olması gerekir.
- manufacturer: Çip üzerinde sistem üreticisi
- model: Çip üzerinde sistem modeli
Aşağıda, olası tüm cihaz özelliklerini gösteren bir örnek verilmiştir:
<config:device-targeting-config
xmlns:config="http://schemas.android.com/apk/config">
<config:device-group name="myCustomGroup1">
<config:device-selector ram-min-bytes="8000000000">
<config:included-device-id brand="google" device="redfin"/>
<config:included-device-id brand="google" device="sailfish"/>
<config:included-device-id brand="good-brand"/>
<config:excluded-device-id brand="google" device="caiman"/>
<config:system-on-chip manufacturer="Sinclair" model="ZX80"/>
<config:system-on-chip manufacturer="Commodore" model="C64"/>
</config:device-selector>
<config:device-selector ram-min-bytes="16000000000"/>
</config:device-group>
<config:device-group name="myCustomGroup2">
<config:device-selector ram-min-bytes="4000000000" ram-max-bytes="8000000000">
<config:required-system-feature name="android.hardware.bluetooth"/>
<config:required-system-feature name="android.hardware.location"/>
<config:forbidden-system-feature name="android.hardware.camera"/>
<config:forbidden-system-feature name="mindcontrol.laser"/>
</config:device-selector>
</config:device-group>
</config:device-targeting-config>
Resmi cihaz üreticisi ve cihaz modeli kodları
Cihaz üreticisi ve model kodu için doğru biçimlendirmeyi Google Play Console'daki Cihaz Kataloğu'nu kullanarak bulabilirsiniz. Bunun için:
Cihaz Kataloğu'nu kullanarak cihazları tek tek inceleme ve üretici ile model kodunu aşağıdaki örnekte gösterilen konumlarda bulma (Google Pixel 4a için üretici "Google" ve model kodu "sunfish"tir)'


Desteklenen cihazların CSV dosyasını indirin ve build_brand ile build_device alanları için sırasıyla Manufacturer ve Model Code değerlerini kullanın.
Cihaz hedefleme yapılandırma dosyanızı uygulama paketinize ekleme
Ana modülünüzün build.gradle dosyasına aşağıdakileri ekleyin:
android {
...
bundle {
deviceTargetingConfig = file('device_targeting_config.xml')
deviceGroup {
enableSplit = true // split bundle by #group
defaultGroup = "other" // group used for standalone APKs
}
}
...
}
device_targeting_config.xml, yapılandırma dosyanızın ana modüle göre yoludur. Bu sayede yapılandırma dosyanız, uygulama paketinizle birlikte paketlenir.
deviceGroup ifadesi, paketinizden oluşturulan APK'ların cihaz gruplarına göre bölünmesini sağlar.
Yapay zeka paketleriniz için cihaz hedeflemeyi kullanma
Büyük modellerinizi yalnızca bunları çalıştırabilecek cihazlara yayınlayarak cihazlarda boyut optimizasyonu yapabilirsiniz.
Son adımda oluşturulan mevcut AI paketi dizinlerini alıp uygun klasörleri #group_myCustomGroup1, #group_myCustomGroup2 vb. ile son ekleyerek (aşağıda açıklandığı gibi) AI paketlerinizi cihaz gruplarına göre alt bölümlere ayırın. Uygulamanızda AI paketlerini kullanırken klasörleri son ekle adreslemeniz gerekmez (başka bir deyişle, son ek, derleme işlemi sırasında otomatik olarak kaldırılır).
Önceki adımdan sonra bu, şuna benzeyebilir:
...
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup1/
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup2/
...
Bu örnekte, herhangi bir son ek olmadan ai-pack-name/assets/image-classifier/ değerine referans verirsiniz.
myCustomGroup1 içindeki cihazlar image-classifier#group_myCustomGroup1/ altındaki tüm öğeleri, myCustomGroup2 içindeki cihazlar ise image-classifier#group_myCustomGroup2/ altındaki tüm öğeleri alır.
myCustomGroup1 veya myCustomGroup2'e ait olmayan cihazlar boş bir ai-pack-name paketi alır.
Bunun nedeni, hiçbir cihaz grubuyla eşleşmeyen cihazların yapay zeka paketinizin varsayılan varyantını almasıdır. #group_suffix içeren bir dizinde bulunmayan her şey buna dahildir.
Yapay zeka paketini indirdikten sonra, yükleme zamanı paketleri için AssetManager'ı, hızlı takip ve seç-izle paketler için ise AiPackManager'ı kullanarak modelinizin mevcut olup olmadığını kontrol edebilirsiniz. Bunun nasıl yapılacağına dair örnekler, örnek uygulamadaki tüm yayınlama modları için gösterilir.
Özellik modülleriniz için cihaz hedeflemeyi kullanma
Özellik modülleri için cihaz hedeflemeyi de kullanabilirsiniz. Özellik modüllerini cihaz grubuna göre alt bölümlere ayırmak yerine, modülün tamamının cihaz grubu üyeliğine göre yayınlanıp yayınlanmayacağını belirtirsiniz.
Bir özellik modülünü myCustomGroup1 veya myCustomGroup2'ya ait cihazlara yayınlamak için AndroidManifest.xml öğesini değiştirin:
<manifest ...>
...
<dist:module dist:title="...">
<dist:delivery>
<dist:install-time>
<dist:conditions>
<dist:device-groups>
<dist:device-group dist:name="myCustomGroup1"/>
<dist:device-group dist:name="myCustomGroup2"/>
</dist:device-groups>
...
</dist:conditions>
</dist:install-time>
</dist:delivery>
</dist:module>
...
</manifest>
Yerel olarak test etme
Yeni paketiniz için sürüm oluşturmadan önce dahili uygulama paylaşımı veya paketleme aracı ile yerel olarak test edebilirsiniz.
Dahili Uygulama Paylaşımı
Dahili uygulama paylaşımı, bir uygulama paketi kullanarak hızlı bir şekilde URL oluşturmanıza olanak tanır. Bu URL'ye yerel bir cihazda dokunarak, uygulamanın bu sürümü bir test veya üretim kanalında yayında olsaydı Google Play'in o cihaz için yükleyeceği her şeyi yükleyebilirsiniz.
Dahili uygulama paylaşımı talimatlarına göz atın.
Bundletool
Alternatif olarak, bundletool (1.18.0 veya sonraki sürümler) kullanarak APK'lar oluşturabilir ve bunları cihazınıza yükleyebilirsiniz. Uygulamanızı paketleme aracını kullanarak yerel olarak test etmek için aşağıdaki adımları uygulayın:
Uygulama paketinizi Android Studio veya bundletool ile oluşturun.
--local-testingişaretini kullanarak APK'lar oluşturun:java -jar bundletool-all.jar build-apks --bundle=path/to/your/bundle.aab \ --output=output.apks --local-testing
Bir cihaz bağlayın ve APK'ları başka bir cihazdan yüklemek için
bundletoolkomutunu çalıştırın:# Example without Device Targeting Configuration java -jar bundletool.jar install-apks --apks=output.apks
# Example with Device Targeting Configuration (you must specify which groups the connected device belongs to) java -jar bundletool.jar install-apks --apks=output.apks --device-groups=myCustomGroup1,myCustomGroup2
bundletool ile yerel test yapmanın sınırlamaları
bundletool ile yerel test yapmanın sınırlamaları şunlardır:
fast-followpaketleri,on-demandpaketleri gibi davranır. Yani uygulama başka bir kaynaktan yüklendiğinde otomatik olarak getirilmezler. Geliştiricilerin, uygulama başlatıldığında bunları manuel olarak istemesi gerekir. Bu işlem, uygulamanızda herhangi bir kod değişikliği gerektirmez.- Paketler, Play yerine harici depolama alanından getirilir. Bu nedenle, ağ hataları durumunda kodunuzun nasıl davrandığını test edemezsiniz.
- Yerel test, kablosuz bağlantı bekleme senaryosunu kapsamaz.
- Güncellemeler desteklenmez. Derlemenizin yeni bir sürümünü yüklemeden önce önceki sürümü manuel olarak kaldırın.
Doğru APK'ların yüklendiğini doğrulama
Cihaza yalnızca doğru APK'ların yüklendiğinden emin olmak için aşağıdaki yöntemi kullanın.
adb shell pm path {packageName}
Şuna benzer bir şey görürsünüz:
package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_ai-pack-name.apk
package:{...}/split_main_ai-pack-name.config.group_myCustomGroup1.apk
Bu listede yalnızca özellik modüllerinden ve yükleme sırasında yapay zeka paketlerinden oluşturulan APK'ları göreceğinizi unutmayın. Seç-izle ve hızlı indirme yapay zeka paketleri APK olarak yüklenmez.
Google Play'de test etme ve yayınlama
Uygulamanızı Google Play'de dahili test kanalı ile uçtan uca test etmenizi öneririz.
Bunu yaptıktan sonra aşamalı kullanıma sunma ile uygulama güncellemenizi kademeli olarak yayına alabilirsiniz.
Play for cihaz üzerinde yapay zeka kullanan örnek uygulama
Örnek uygulamayı indirin.
Bu bölümde, her bir yayınlama modunun ve cihaz hedefleme yapılandırmasının nasıl kullanılacağı gösterilmektedir. Başlamak için yerel test bölümüne bakın.
İlgili içerik
Android App Bundle'lar hakkında daha fazla bilgi edinin ve AI Delivery SDK'sı ile ilgili referansları okuyun.