Giriş
Cihaz üzerinde yapay zeka için Play, Android App Bundle'ın ve Google Play dağıtımının avantajlarını özel makine öğrenimi modeli dağıtımına getirir. Böylece, model performansını ek ücret ödemeden ve cihaz ekosisteminin karmaşıklığını azaltarak iyileştirebilirsiniz. Bu sayede, kodunuzu, öğelerinizi ve makine öğrenimi modellerinizi içeren tek bir yapıyı Play'de yayınlayabilir, çeşitli dağıtım modları ve hedefleme seçenekleri arasından seçim yapabilirsiniz.
Avantajları
- Google Play'e tek bir yayınlama yapıtı yükleyin ve ek ücret ödemeden barındırma, yayınlama, güncelleme ve hedefleme işlemlerini Play'e devredin.
- Makine öğrenimi modellerinizi yükleme zamanında, hızlı takipte veya isteğe bağlı olarak sunun.
- Yükleme zamanında teslimat, uygulamanız açıldığında çok büyük bir modelin mevcut olmasını garanti edebilir. 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 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, modelin yalnızca belirli kullanıcı akışları için gerekli olduğu durumlarda kullanışlıdır. Modeliniz, uygulamanızın dahili depolama alanına indirilir.
- Cihaz modeline, sistem özelliklerine veya RAM'e göre belirli cihazları hedefleyen makine öğrenimi modeli varyantları sunun.
- Play'in otomatik yama özelliği sayesinde uygulama güncellemelerini küçük ve optimize edilmiş halde tutun. Bu özellik sayesinde 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.
- Cihaz üzerinde yapay zeka için Play tarafından indirilen modeller yalnızca uygulamalarınız tarafından kullanılmalıdır. Modeller diğer uygulamalara sunulmamalıdır.
- Sıkıştırılmış indirme boyutlarına bağlı olarak, tek tek yapay zeka paketleri 1,5 GB'a kadar olabilir. Uygulama paketinizden oluşturulan uygulamanızın herhangi bir sürümünün kümülatif maksimum boyutu 4 GB olmalıdır.
- Boyutu 1 GB'tan büyük olan uygulamalar, minimum SDK düzeyini 21 veya daha yüksek bir değere ayarlamalıdır.
Play for On-device AI nasıl kullanılır?
Play for On-device AI, yapay zeka paketlerini kullanır. Uygulama paketinizdeki yapay zeka paketlerinde dağıtıma hazır özel modelleri paketlersiniz. Yapay zeka paketinin yükleme sırasında, hızlı takip veya isteğe bağlı olarak dağıtılıp dağıtılmayacağını seçebilirsiniz.
Uygulama paketinize yapay zeka paketleri ekleyerek, uygulamanızın dağıtımını özel modellerinizle yönetmek için Play'in mevcut tüm test ve yayın araçlarını (ör. test kanalları ve kademeli yayınlar) kullanabilirsiniz.
Yapay zeka paketleri, uygulama ikili dosyasıyla birlikte güncellenir. Yeni uygulama sürümünüzde bir yapay zeka paketinde değişiklik yapılmıyorsa Play'in otomatik yama süreci, kullanıcının paketi yeniden indirmesini engeller. Play, uygulamayı güncellerken yalnızca değişen kısımları indirir.
Yapay zeka paketleri yalnızca modelleri içerir. Java/Kotlin ve yerel kitaplıklara izin verilmez. Makine öğrenimi modelinizi çalıştırmak için kitaplık veya kod göndermeniz gerekiyorsa bunları temel modüle ya da ö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
Yapay zeka paketleriyle LiteRT ve MediaPipe'ı kullanabilirsiniz. Modelinizi bir yapay zeka paketine yerleştirin ve ardından yükleme zamanı paketleri veya hızlı takip ve isteğe bağlı paketler ile ilgili talimatları kullanarak modele erişin.
Daha fazla bilgi:
- LiteRT'yi kullanmaya başlama
- Örnek uygulama, LiteRT modelini bir 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'ı kullanmaya başlama
- Hızlı takip ve isteğe bağlı paketler için öğelerinizi (ör.
.binarypb
dosya) dosya yollarına göre. - Yükleme zamanı paketleri 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 olarak şu adımları uygulayabilirsiniz:
- Modellerinizi Android App Bundle'ınıza yapay zeka paketleri halinde paketleyin ve yapay zeka paketlerinin nasıl teslim edileceğini belirtin.
- [İsteğe bağlı] Farklı cihazlara farklı modeller sunmak 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 dağıtabilirsiniz. Diğer tüm cihazlar ise model almayabilir.
- [İsteğe bağlı] İsteğe bağlı veya hızlı takip yayınlama kullanıyorsanız yapay zeka paketlerinizi gerektiğinde indirmek için Play AI Delivery Kitaplığı'nı uygulamanıza entegre edin.
- Uygulama paketinizi test edin ve Google Play'de yayınlayın.
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 yapay zeka paketine çıkarma
Aşağıdaki adımlar için Android Studio gerekmez.
- Projenizin en ü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ıdır 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 teslimat 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ında, 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ında, aşağıdaki örnekte gösterildiği gibi projenize tüm yapay zeka paketlerini ekleyin:// In the settings.gradle file: include ':app' include ':ai-pack-name' include ':ai-pack2-name'
Yapay zeka paketinizin içinde bir
src/main/assets/
dizini oluşturun.Modellerinizi
src/main/assets
dizinine yerleştirin. Burada alt dizinler de oluşturabilirsiniz. Uygulamanızın dizin yapısı artık aşağıdaki gibi 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. Bu işlemi nasıl yapacağınız, yapay zeka paketlerinizin iletim moduna bağlıdır. Aşağıda yükleme zamanı ve hızlı takip/isteğe bağlı ile ilgili talimatları inceleyin.
[İsteğe bağlı] Farklı cihazlara farklı modeller sunmak için cihaz hedeflemeyi yapılandırın.
Gradle ile Android App Bundle'ı oluşturun. 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 çıkarır.
Yükleme zamanında teslimatı yapılandırma
Yükleme sırasında 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'sini 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ı dağıtımı yapılandırma
Play AI Delivery Library'yi kullanarak hızlı takip veya isteğe bağlı teslimat ile yapay zeka paketlerini indirebilirsiniz.
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 denetle
Her yapay zeka paketi, uygulamanın dahili depolama alanında ayrı bir klasörde saklanır. 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 paketleri hakkında indirme bilgileri edinme
İndirmenin boyutunu ve paketin zaten 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 Map<String, AiPackState>
döndürür. Bu harita, istenen her yapay zeka paketinin durumunu adıyla birlikte içerir:
Map<String, AiPackState> AiPackStates#packStates()
Son istek aşağıdakilerle 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öntemler, yapay zeka paketinin boyutunu, şu ana kadar indirilen miktarı (istenirse) 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üncellenmesini istemek için
fetch()
yöntemini kullanın.
Task<AiPackStates> fetch(List<String> packNames)
Bu yöntem, paketlerin listesini, 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
Yapay zeka paketlerinin yükleme sürecini izlemek için
AiPackStateUpdateListener
uygulamanız gerekir. Durum güncellemeleri, her bir yapay zeka paketinin durumunu takip etmenize yardımcı olmak için paket bazında sunulur. İ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 bağlantıya bağlı değilse indirme işlemi, kullanıcının mobil veri bağlantısı kullanarak indirme işlemine devam etme izni açıkça verilene kadar başlamaz. Benzer şekilde, indirme işlemi büyükse ve kullanıcı kablosuz bağlantısını kaybederse indirme işlemi duraklatılır ve mobil veri bağlantısı kullanılarak devam edilmesi için açık rıza gerekir. Duraklatılmış bir paketin durumu WAITING_FOR_WIFI
olur. Kullanıcıdan izin istemek 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ılacağını ve yalnızca kullanıcı tekrar kablosuz bağlantıya döndüğünde otomatik olarak devam edeceğini unutmayın.
Kullanıcı onayı gerekiyor
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, uygulamanın Play tarafından tanınmadığı zamanlarda (ör. uygulama başka cihazdan yüklendiyse) ortaya çıkabilir. Bu durumda arama yapmanın
showConfirmationDialog()
uygulamanın güncellenmesine neden olacağını unutmayın. Güncellemeden sonra yapay zeka paketlerini tekrar istemeniz gerekir.
Aşağıda, bir işleyicinin ö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 almak için
getPackStates()
yöntemini kullanabilirsiniz.
AiPackStates
İndirme ilerleme durumu, indirme durumu ve başarısızlık 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 bir 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 saklanır.
assets
dizininin yolunu kolaylık yöntemini kullanarak alabilirsiniz
assetsPath()
.
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
Uygulamanızda kullanmak isteyebileceğiniz bazı ek API yöntemlerini aşağıda bulabilirsiniz.
İsteği iptal et
Etkin bir yapay zeka paketi isteğini iptal etmek için
cancel()
işlemini kullanın. Bu isteğin, mümkün olan en iyi şekilde 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()
kullanın.
Birden fazla yapay zeka paketinin konumlarını alma
getPackLocations()
ile birden fazla yapay zeka paketinin durumunu toplu olarak sorgulayabilir, yapay zeka paketlerinin ve konumlarının haritasını döndürebilirsiniz. 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 teslim edileceğ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 gereklidir:
- Cihaz gruplarınızı bir XML dosyasında tanımlayın.
- Paketinizin hangi bölümlerinin hangi cihaz gruplarına gideceğ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) sürümünün en az 8.10.0 olduğundan emin olun. Bu, Android Studio (Meerkat 2 ve sonraki sürümler) ile birlikte paketlenir. En son kararlı Android Studio 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 bir cihaz grubu tanımlayabilirsiniz:
qti_v79
<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.
Bir cihaz seçicide bir veya daha fazla cihaz özelliği olabilir. Bir cihaz, seçicinin tüm cihaz özellikleriyle eşleşiyorsa seçilir.
Bir cihaz birden fazla grupla eşleşirse XML dosyasında ilk tanımlanan grubun içeriği sunulur. Grupları XML dosyasında 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 RAM'i gereksinimleri
- min_bytes (dahil): Gerekli minimum RAM (bayt cinsinden)
- max_bytes (exclusive): Gerekli maksimum RAM (bayt cinsinden)
- included_device_ids: Bu seçiciye dahil edilecek cihaz modelleri
(grup başına en fazla 10.000 device_id). Bu özellik, cihaz listedeki herhangi bir device_id ile eşleştiğinde 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). Bu özellik, cihaz listedeki hiçbir device_id ile eşleşmediğinde karşılanır.
- build_brand: Cihaz üreticisi
- build_device: Cihaz modeli kodu
required_system_features: Bu seçici tarafından dahil edilmesi için bir cihazda bulunması gereken özellikler (grup başına en fazla 100 özellik). Bir cihazın bu özelliği karşılaması için listedeki tüm sistem özelliklerine sahip olması gerekir.
Sistem özelliği referansı
- name: Bir sistem özelliği
forbidden_system_features: Bu seçici tarafından dahil edilmemesi için bir cihazda bulunmaması gereken özellikler (grup başına en fazla 100 özellik). Bu listedeki sistem özelliklerinden herhangi birine sahip olan cihazlar bu mülkü karşılamaz.
Sistem özelliği 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 listedeki çiplerden birine sahip olması gerekir.
- manufacturer: Çip üzerinde sistem üreticisi
- model: Çip üzerinde sistem modeli
Olası tüm cihaz özelliklerini gösteren bir örneği aşağıda bulabilirsiniz:
<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ı
Google Play Console'daki Cihaz Kataloğu'nu kullanarak cihaz üreticisi ve model kodu için doğru biçimlendirmeyi bulabilirsiniz. Bunun için:
Cihaz Kataloğu'nu kullanarak tek tek cihazları inceleme ve üretici ile model kodunu aşağıdaki örnekte gösterildiği gibi yerlerde bulma (Google Pixel 4a için üretici"Google", model kodu ise"sunfish"tir.)
Desteklenen cihazların CSV'sini indirme ve build_brand ile build_device alanları için sırasıyla Üretici ve Model Kodu'nu kullanma.
Cihaz hedefleme yapılandırma dosyanızı uygulama paketinize ekleyin
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 yolu. Bu işlem, yapılandırma dosyanızın uygulama paketinize dahil edilmesini sağlar.
deviceGroup
ifadesi, paketinizden oluşturulan APK'ların cihaz gruplarına göre ayrılmasını sağlar.
Yapay zeka paketleriniz için cihaz hedeflemeyi kullanma
Büyük modellerinizi yalnızca bunları çalıştırabilen cihazlara sunarak cihazlarda boyut optimizasyonunu koruyabilirsiniz.
Son adımda oluşturulan mevcut yapay zeka paketi dizinlerini alıp uygun klasörlere #group_myCustomGroup1, #group_myCustomGroup2 vb. ekleyerek (aşağıda açıklandığı gibi) yapay zeka paketlerinizi cihaz gruplarına göre alt bölümlere ayırın. Uygulamanızda yapay zeka paketlerini kullanırken klasörlere sonek kullanarak erişmeniz gerekmez (diğer bir deyişle, sonek derleme işlemi sırasında otomatik olarak kaldırılır).
Önceki adımdan sonra bu şöyle 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/
öğesini herhangi bir sonek olmadan referans olarak kullanırsınız.
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
'a ait olmayan cihazlar boş bir ai-pack-name
paketi alır.
Bunun nedeni, herhangi bir cihaz grubuyla eşleşmeyen cihazların yapay zeka paketinizin varsayılan varyantını almasıdır. #group_suffix
içeren bir dizinin içinde olmayan her şey buna dahildir.
Yapay zeka paketini indirdikten sonra, yükleme zamanı paketleri için AssetManager'ı, 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
Özellik modülleri için cihaz hedeflemeyi de kullanabilirsiniz. Özellik modüllerini cihaz grubuna göre alt gruplara ayırmak yerine, modülün tamamının cihaz grubu üyeliğine göre teslim edilip edilmeyeceğini belirtirsiniz.
Bir özellik modülünü myCustomGroup1
veya myCustomGroup2
cihazlarına 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 paketi kullanarak hızlıca bir URL oluşturmanıza olanak tanır. Bu URL'ye yerel bir cihazda dokunarak Google Play'in uygulamanın bu sürümü test veya üretim kanalında yayındayken o cihaz için yükleyeceği öğeleri tam olarak 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 yan yükleyebilirsiniz. Bundletool'u kullanarak uygulamanızı yerel olarak test etmek için aşağıdaki adımları uygulayın:
Uygulama paketinizi Android Studio veya bundletool ile oluşturun.
--local-testing
işaretini kullanarak APK 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ı yan yüklemek için
bundletool
komutunu ç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 yan yükleme yöntemiyle yüklendiğinde otomatik olarak getirilmezler. Geliştiricilerin, uygulama başladığında bunları manuel olarak istemesi gerekir. Bu işlem için uygulamanızda herhangi bir kod değişikliği yapılması gerekmez.- Paketler Play yerine harici depolama alanından getirildiğinden kodunuzun ağ hataları durumunda nasıl davrandığını test edemezsiniz.
- Yerel test, Wi-Fi'yi 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ğrulayın
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}
Aşağıdakine benzer bir ifade 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ın gösterileceğini 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ı sunumlar ile uygulama güncellemenizi üretimde kademeli olarak yayınlayabilirsiniz.
Play for On-device AI'yı kullanan örnek uygulama
Örnek uygulamayı indirin.
Her bir yayın modunun ve cihaz hedefleme yapılandırmasının nasıl kullanılacağını gösterir. 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 ile ilgili referansları okuyun.