Giriş
Cihaz üzerinde yapay zeka için Play, Android App Bundles ve Google Play yayınlamanın avantajlarını özel makine öğrenimi modeli dağıtımına getirerek ek maliyet yansıtılmaksızın daha az ekosistem karmaşıklığıyla model performansını artırmanızı sağlar. Bu araç, kodunuzu, öğelerinizi ve makine öğrenimi modellerinizi içeren tek bir yapıyı Play'de yayınlamanıza ve çeşitli yayınlama modları ile hedefleme seçenekleri arasından seçim yapmanıza olanak tanır.
Avantajları
- Google Play'e tek bir yayınlama yapısını yükleyin ve barındırma, yayınlama, güncelleme ve hedeflemeyi ek ücret ödemeden Play'e devredin.
- Makine öğrenimi modellerinizi yükleme zamanında, hızlı takipte veya isteğe bağlı olarak dağıtın.
- Yükleme sırasında teslimat, uygulamanız açıldığında çok büyük bir modelin mevcut olmasını sağlayabilir. Modeliniz APK olarak yüklenir.
- Hızlı takip şeklinde yayınlama, 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 özellik, model yalnızca belirli kullanıcı 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.
- Play'in otomatik yaması sayesinde uygulama güncellemelerini küçük ve optimize edilmiş halde tutun. Bu sayede yalnızca dosyalardaki farklılıkların indirilmesi gerekir.
Dikkat edilmesi gereken noktalar
- Cihaz Üzerinde Yapay Zeka için Play'i kullanarak Google Play Geliştirici Dağıtım Sözleşmesi ve Play Core Yazılım Geliştirme Kiti Hizmet Şartları'ndaki şartları kabul etmiş olursunuz.
- Erken erişim programına katılan geliştiricilerin, cihaz üzerinde yapay zeka için Play'i değerlendirmesi ve Google Play'e geri bildirim vermesi beklenir.
- Cihaz üzerinde yapay zeka için Play tarafından indirilen modeller yalnızca modeli indiren uygulama tarafından kullanılabilir. Modeller, hizmet bağlantısı üzerinden diğer uygulamalara sunulmamalıdır.
- Sıkıştırılmış indirme boyutlarına bağlı olarak, yapay zeka paketlerinin boyutu 1,5 GB'a kadar çıkabilir. Uygulama paketinizden oluşturulan uygulamanızın herhangi bir sürümünün maksimum kümülatif uygulama boyutu 4 GB'tır.
- 1 GB'tan büyük uygulamalarda minimum SDK düzeyi 21 veya daha yüksek olmalıdır.
- Erken erişim programı sırasında Play'de Cihaz Üzerinde Yapay Zeka özelliği değişebilir.
Play for On-device AI'ı kullanma
Play for On-device AI, yapay zeka paketlerini kullanır. Yapay zeka paketlerinde dağıtılmaya hazır özel modelleri uygulama paketinize paketlersiniz. AI paketinin yükleme sırasında, hızlı takip sırasında veya isteğe bağlı olarak yayınlanmasını seçebilirsiniz.
AI paketlerini uygulama paketinizle paketleyerek uygulamanızın dağıtımını özel modellerinizle yönetmek için Play'in mevcut tüm test ve sürüm araçlarını (ör. test kanalları ve aşamalı kullanıma sunma) kullanabilirsiniz.
Yapay zeka paketleri, uygulama ikili programıyla birlikte güncellenir. Yeni uygulama sürümünüzde yapay zeka paketinde değişiklik yapılmadıysa Play'in otomatik yamalar süreci, kullanıcının paketi yeniden indirmesini önler. Play, uygulamayı güncellerken yalnızca değişenleri indirir.
Yapay zeka paketleri yalnızca modelleri 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 veya 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.
LiteRT ve MediaPipe'i yapay zeka paketleriyle kullanma
LiteRT ve MediaPipe'i yapay zeka paketleriyle kullanabilirsiniz. Modelinizi bir yapay zeka paketinde paketleyin ve ardından yükleme zamanı paketleri veya hızlı takip ve isteğe bağlı paketler ile ilgili talimatları kullanarak modelinize erişin.
Daha fazla bilgi:
- LiteRT'i 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.
- Başlamak için yapay zeka paketlerinde kullanabileceğiniz birçok önceden eğitilmiş LiteRT modeli vardır.
- MediaPipe'i kullanmaya başlama
- Hızlı takip ve isteğe bağlı paketler için öğelerinizi (ör.
.binarypb
dosyaları) dosya yollarına göre filtreleyin. - Yükleme sırasındaki paketler için AndroidAssetUtil.java'yı kullanabilirsiniz.
- Hızlı takip ve isteğe bağlı paketler için öğelerinizi (ör.
Yapay zeka paketlerini kullanmaya başlama
Play for On-device AI'ı kullanmaya başlamak için genel hatlarıyla aşağıdaki adımları uygulayabilirsiniz:
- EAP'ye katılmak için Play geliştirici hesabı kimliğinizi Google Play'e sağlayın.
- Android uygulama paketinize modellerinizi yapay zeka paketleri halinde paketleyin ve yapay zeka paketlerinin nasıl yayınlanacağını belirtin.
- [İsteğe bağlı] Farklı cihazlara farklı modeller yayınlamak istiyorsanız yapay zeka paketleriniz için cihaz hedeflemeyi yapılandırabilirsiniz. Örneğin, A yapay zeka paketini belirli bir cihaz modeline, B yapay zeka paketini en az 6 GB RAM'e sahip cihazlara sunabilirsiniz. Diğer tüm cihazlar ise hiçbir model almaz.
- [İsteğe bağlı] İsteğe bağlı veya hızlı takip yayınlama kullanıyorsanız yapay zeka paketlerinizi gerektiği gibi indirmek için Play Yapay Zeka Yayınlama Kitaplığı'nı uygulamanıza entegre edin.
- Uygulama paketinizi test edin ve Google Play'de yayınlayın.
Play geliştirici hesabı kimliğinizi girin
Bu özellik erken erişim aşamasında olduğundan, cihaz üzerinde yapay zeka için Play'e erişebilmek üzere geliştirici hesabınızın izin verilenler listesine eklenmiş olması gerekir. Play geliştirici hesabı kimliklerini ve uygulama paket adlarını Google Play iş ortağı yöneticinize veya Play for On-Device AI ekip üyesine onaylayın. Modellerinizi belirli cihazlara göre mi yoksa tüm cihazlara göre mi hedefleyeceğinizi belirtin (bu, önceki bölümdeki 3. adımdır). Şu anda belirli Play iş ortaklarını bu özelliği test etmeye davet ediyoruz.
Android Gradle eklentisi sürümünü kontrol etme
Yapay zeka paketlerini kullanmak için Android Gradle Plugin (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 paketlenmiştir.
Modelinizi bir yapay zeka paketine ayıklayın
Aşağıdaki adımlar için Android Studio gerekli değildir.
- Projenizin üst düzey dizininde yapay zeka paketi için bir dizin oluşturun. Bu dizin adı, yapay zeka paketi adı olarak kullanılır. Yapay zeka paketi adları harfle başlamalı ve yalnızca harf, rakam ve alt çizgi içerebilir.
Yapay zeka paketi dizininde bir
build.gradle
dosyası oluşturun ve aşağıdaki kodu ekleyin. Yapay zeka paketinin adını ve yalnızca bir yayınlama türünü 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.gradle
dosyasına, projenizdeki her yapay zeka paketinin adını aşağıdaki gibi ekleyin:// In the app build.gradle file: android { ... assetPacks = [":ai-pack-name", ":ai-pack2-name"] }
Projenin
settings.gradle
dosyasına, projenize aşağıdaki gibi tüm yapay zeka paketlerini 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/assets
dizinine yerleştirin. Burada da alt dizinler oluşturabilirsiniz. Uygulamanızın dizin yapısı şu şekilde görünmelidir:build.gradle
settings.gradle
app/
ai-pack-name/build.gradle
ai-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ınlama moduna bağlıdır. install-time ve fast-follow/on-demand için talimatları aşağıda bulabilirsiniz.
[İsteğe bağlı] Farklı modelleri farklı cihazlara yayınlamak 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ınlama modunu yapılandırırai-pack-name/assets/your-model-directories
: Yapay zeka paketi kapsamında yayınlanan tüm öğeleri içeren dizin
Gradle, her yapay zeka paketi için manifest dosyasını 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 yapılandırılmış yapay zeka paketleri, uygulama başlatılırken 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ı takip veya isteğe bağlı yayınlama özelliğine sahip yapay zeka paketlerini indirmek için Play Yapay Zeka Dağıtım Kitaplığı'nı kullanın.
Play AI Delivery Library'ye bağımlılık beyan etme
Uygulamanızın build.gradle
dosyasında Play AI Yayınlama Kitaplığı'na bağımlılık beyan edin:
dependencies {
...
implementation "com.google.android.play:ai-delivery:0.1.1-alpha01"
}
Durumu denetle
Her yapay zeka paketi, uygulamanın dahili depolama alanında ayrı bir klasörde depolanı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ü, assetsPath() adresinde hemen erişime hazırdır. |
null |
Bilinmeyen yapay zeka paketi veya yapay zeka paketleri kullanılamıyor |
Yapay zeka paketleri hakkında indirme bilgileri 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.
AiPackStates
nesnesinin packStates()
yöntemi bir Map<String, AiPackState>
döndürür. Bu harita, istenen her yapay zeka paketinin durumunu adını temel alan bir anahtarla içerir:
Map<String, AiPackState> AiPackStates#packStates()
Nihai istek aşağıdaki şekilde gösterilir:
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, indirilen miktarı (isterseniz) ve uygulamaya aktarılan miktarı sağlar:
Bir yapay zeka paketinin durumunu almak için status()
yöntemini kullanın. Bu yöntem, durumu AiPackStatus
sınıfındaki sabit bir alana karşılık gelen bir tam sayı olarak döndürür. Henüz yüklenmemiş bir yapay zeka paketinin durumu AiPackStatus.NOT_INSTALLED
olur.
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ını ve 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 başlatılmaz.
İndirme durumlarını izleme
AI paketlerinin yükleme ilerleme durumunu izlemek için bir AiPackStateUpdateListener
uygulamanız gerekir. Durum güncellemeleri, her bir yapay zeka paketinin durumunu takip etmeyi desteklemek için paket başına ayrılır. İsteğinizle ilgili diğer tüm indirmeler tamamlanmadan önce mevcut yapay zeka paketlerini kullanmaya başlayabilirsiniz.
void registerListener(AiPackStateUpdateListener listener) void unregisterListener(AiPackStateUpdateListener listener)
Büyük boyutlu indirme işlemleri
İndirme 200 MB'tan büyükse ve kullanıcı kablosuz ağa bağlı değilse kullanıcı mobil veri bağlantısı kullanarak indirme işlemine devam etmek için açıkça izin verene kadar indirme işlemi başlamaz. Benzer şekilde, indirme işlemi büyükse ve kullanıcının kablosuz bağlantısı kesilirse indirme duraklatılır ve mobil veri bağlantısı kullanılarak devam etmek için açık izin gerekir. Duraklatılmış paketin durumu WAITING_FOR_WIFI
olur. Kullanıcıdan izin isteğinde bulunmasını sağlamak için kullanıcı arayüzü akışını tetiklemek üzere showConfirmationDialog()
yöntemini kullanın.
Uygulama bu yöntemi çağırmazsa indirme işleminin duraklatıldığını ve yalnızca kullanıcı kablosuz ağa geri döndüğünde otomatik olarak devam edeceğini unutmayın.
Kullanıcı onayı gerekli
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 Play tarafından tanınmadığında (ör. uygulama başka cihazdan yüklendiğinde) ortaya çıkabilir. Bu durumda showConfirmationDialog()
çağrısının uygulamanın güncellenmesine neden olacağını unutmayın. Güncellemeden sonra yapay zeka paketlerini tekrar istemeniz gerekir.
Aşağıda, bir dinleyicinin örnek uygulaması 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 indirmelerin durumunu öğrenmek için getPackStates()
yöntemini de kullanabilirsiniz.
AiPackStates
indirme 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 dizininde 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
AI paketlerinizi alması gereken cihazları veya cihaz gruplarını belirtmek için cihaz hedefleme talimatlarını uygulayabilirsiniz.
Diğer 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()
simgesini kullanın. Bu isteğin mümkün olan en iyi şekilde işlendiğini unutmayın.
Yapay zeka paketini kaldırma
Bir yapay zeka paketinin kaldırılmasını planlamak için removePack()
seçeneğini kullanın.
Birden fazla yapay zeka paketinin konumlarını alma
Birden fazla yapay zeka paketinin durumunu toplu olarak sorgulamak için getPackLocations()
simgesini 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 yayınlanacağı konusunda daha ayrıntılı kontrol sahibi olmanızı 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ğıdakiler 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 gereklidir:
- 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 eklentinizin (AGP) en az 8.10.0-alpha01 sürümüne sahip olduğundan emin olun. Bu, canary sürümündeki Android Studio Meerkat 2 ile birlikte paketlenmiştir.
Android Gradle eklentisinde bu özelliği etkinleştirme
Cihaz hedefleme, gradle.properties
dosyanızda açıkça etkinleştirilmiş olmalıdır:
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 sistem çipi bulunan 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. Bir cihaz, cihaz seçicilerinden herhangi birini karşılıyorsa cihaz grubuna dahil edilir.
Cihaz seçicide bir veya daha fazla cihaz özelliği olabilir. Bir cihaz, seçicinin tüm cihaz özellikleriyle eşleşirse 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" grubunu alır. Bu grup otomatik olarak oluşturulur ve açıkça tanımlanmamalıdır.
Kullanılabilir cihaz özellikleri
- device_ram: Cihazın RAM gereksinimleri
- min_bytes (dahildir): Gerekli minimum RAM (bayt cinsinden)
- max_bytes (yalnızca): 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 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şmezse bu özellik karşılanır.
- build_brand: Cihaz üreticisi
- build_device: Cihaz modeli kodu
required_system_features: Bu seçici tarafından dahil edilmesi gereken özellikler (grup başına en fazla 100 özellik). Bu özelliği karşılamak için cihazın bu listedeki tüm sistem özelliklerine sahip olması gerekir.
Sistem özellik referansı
- ad: Sistem özelliği
forbidden_system_features: Bu seçici tarafından cihaza dahil edilmesi gerekmeyen özellikler (grup başına en fazla 100 özellik). Bu listedeki sistem özelliklerinden herhangi birine sahip olan cihazlar bu özelliği karşılamıyordur.
Sistem özellik referansı
- ad: Sistem özelliği
system-on-chip: Bu seçiciye eklenecek çip üzerinde sistemler. Bu özelliği karşılamak için cihazın bu listedeki bir çipe sahip olması gerekir.
- manufacturer: Çip üzerinde sistem üreticisi
- model: Çip üzerinde sistem modeli
Olası tüm cihaz özelliklerini gösteren bir örnek aşağıda 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>
Resmî cihaz üreticisi ve cihaz modeli kodları
Google Play Console'daki cihaz kataloğunu kullanarak cihaz üreticisi ve model kodu için doğru biçimlendirmeyi aşağıdaki yöntemlerden birini kullanarak bulabilirsiniz:
Cihaz Kataloğu'nu kullanarak cihazları tek tek inceleyin ve aşağıdaki örnekte gösterilen konumlarda üretici ile model kodunu bulun (Google Pixel 4a için üretici"Google", model kodu ise"sunfish"tir).
Desteklenen cihazların CSV dosyasını indirip build_brand ve build_device alanları için sırasıyla Üretici ve Model Kodu'nu 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 işlem, yapılandırma dosyanızın uygulama paketinizle birlikte paketlenmesini sağlar.
deviceGroup
yan tümcesi, 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 çalıştırabilecek cihazlara sunarak cihazlarda boyutu optimize edilmiş halde tutabilirsiniz.
Son adımda oluşturulan mevcut yapay zeka paketi dizinlerini kullanarak ve uygun klasörlere (aşağıda açıklandığı gibi) #group_myCustomGroup1, #group_myCustomGroup2 vb. son ek ekleyerek yapay zeka paketlerinizi cihaz gruplarına göre alt bölümlere ayırın. Uygulamanızda yapay zeka paketlerini kullanırken klasörleri son eke göre adlandırmanız gerekmez (yani son ek, derleme işlemi sırasında otomatik olarak kaldırılır).
Önceki adımın ardından aşağıdaki gibi görünebilir:
...
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup1/
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup2/
...
Bu örnekte, ai-pack-name/assets/image-classifier/
değerine herhangi bir son ek olmadan referans verirsiniz.
myCustomGroup1
bölgesindeki cihazlar image-classifier#group_myCustomGroup1/
altındaki tüm öğeleri, myCustomGroup2
bölgesindeki cihazlar ise image-classifier#group_myCustomGroup2/
altındaki tüm öğeleri alır.
myCustomGroup1
veya myCustomGroup2
'ye ait olmayan cihazlara boş bir ai-pack-name
paketi gönderilir.
Bunun nedeni, herhangi bir cihaz grubuyla eşleşmeyen cihazların yapay zeka paketinizin varsayılan varyantını alması. Buna, #group_suffix
içeren bir dizinde olmayan her şey dahildir.
AI paketini indirdikten sonra, yükleme sırasındaki paketler için AssetManager'ı veya hızlı takip ve isteğe bağlı paketler için AiPackManager'ı kullanarak modelinizin mevcut olup olmadığını kontrol edebilirsiniz. Bunu yapmayla ilgili örnekler, örnek uygulamada tüm yayınlama modları için gösterilmektedir.
Özellik modülleriniz için cihaz hedeflemeyi kullanma
Cihaz hedeflemeyi özellik modülleri için 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
'a ait cihazlara yayınlamak için AndroidManifest.xml
özelliğini 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 Bundletool ile yerel olarak test edebilirsiniz.
Dahili Uygulama Paylaşımı
Dahili uygulama paylaşımı, bir uygulama paketini kullanarak yerel bir cihazda dokunarak Google Play'in uygulamanın ilgili sürümü test veya üretim kanalında yayınlanmış olsaydı o cihaza tam olarak ne yükleyeceğini yükleyebileceğiniz bir URL'yi hızlıca oluşturmanıza olanak tanır.
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ı bundletool'u kullanarak yerel olarak test etmek için aşağıdaki adımları uygulayın:
Uygulama paketinizi Android Studio veya bundletool ile derleyin.
--local-testing
işaretiyle APK oluşturma: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ı harici olarak yüklemek için
bundletool
'ü ç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 testin sınırlamaları
bundletool ile yerel testin sınırlamaları şunlardır:
fast-follow
paketleri,on-demand
paketleri gibi davranır. Yani uygulama harici olarak yüklendiğinde otomatik olarak getirilmezler. Geliştiricilerin, uygulama başladığında bunları manuel olarak istemesi gerekir. Bu işlem için uygulamanızda kod değişikliği yapmanız gerekmez.- 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 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üklenmesini sağlamak için aşağıdaki yöntemi kullanın
adb shell pm path {packageName}
Aşağıdakine 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 yayınlanan yapay zeka paketlerinden oluşturulan APK'ları göreceğinizi unutmayın. İsteğe bağlı ve hızlı takip 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ı yayınlama ile uygulama güncellemenizi üretime aşamalı olarak yayınlayabilirsiniz.
Play for On-device AI'ı kullanan örnek uygulama
Örnek uygulamamıza erişmek için Google Play iş ortağı yöneticinizle iletişime geçin.
Bu makalede, yayın modlarının her birinin yanı sıra 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.
Geri bildirim gönder
Erken erişim programına katılan kullanıcılar sorunları bildirmeli ve geri bildirimde bulunmalıdır. Google Play iş ortağı yöneticinizle veya Play for On-Device AI Ekibi ile iletişime geçebilirsiniz.
İlgili içerik
Android App Bundle'lar hakkında daha fazla bilgi edinin ve AI Delivery SDK ile ilgili referansları okuyun.