Play for On-device AI (beta)

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:

Yapay zeka paketlerini kullanmaya başlama

Play for Cihaz Üzerinde Yapay Zeka'yı kullanmaya şu şekilde başlayabilirsiniz:

  1. Modellerinizi Android App Bundle'ınızdaki yapay zeka paketleri halinde paketleyin ve yapay zeka paketlerinin nasıl yayınlanacağını belirtin.
  2. [İ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.
  3. [İ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.
  4. 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.

  1. 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.
  2. 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ü 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 ]"
        }
    }
    
  3. Projenin uygulama build.gradle dosyası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"]
    }
    
  4. Projenin settings.gradle dosyası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'
    
  5. Yapay zeka paketinizde bir src/main/assets/ dizini oluşturun.

  6. 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
  7. 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.

  8. [İsteğe bağlı] Farklı cihazlara farklı modeller sunmak için cihaz hedeflemeyi yapılandırın.

  9. 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:

Gerekli adımlara genel bakış

Cihaz hedeflemeyi etkinleştirmek için aşağıdaki adımların uygulanması gerekir:

  1. Cihaz gruplarınızı bir XML dosyasında tanımlayın.
  2. Paketinizin hangi bölümlerinin hangi cihaz gruplarına gönderileceğini belirtin.
  3. [İsteğe bağlı] Yapılandırmanızı yerel olarak test edin.
  4. 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.

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)'

    Cihaz kataloğundaki Pixel 4a sayfası

    Cihaz kataloğundaki Pixel 4a sayfası

  • 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:

  1. Uygulama paketinizi Android Studio veya bundletool ile oluşturun.

  2. --local-testing işaretini kullanarak APK'lar oluşturun:

    java -jar bundletool-all.jar build-apks --bundle=path/to/your/bundle.aab \
      --output=output.apks --local-testing
    
  3. Bir cihaz bağlayın ve APK'ları başka bir cihazdan 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 test yapmanın sınırlamaları

bundletool ile yerel test yapmanın sınırlamaları şunlardır:

  • fast-follow paketleri, on-demand paketleri 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.

Android App Bundle'lar hakkında daha fazla bilgi edinin ve AI Delivery SDK'sı ile ilgili referansları okuyun.