Play for On-device AI (beta)

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:

Yapay zeka paketlerini kullanmaya başlama

Play for On-device AI'ı kullanmaya başlamak için genel olarak şu adımları uygulayabilirsiniz:

  1. Modellerinizi Android App Bundle'ınıza yapay zeka paketleri halinde paketleyin ve yapay zeka paketlerinin nasıl teslim edileceğini 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, 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.
  3. [İ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.
  4. 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.

  1. 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.
  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ü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 ]"
        }
    }
    
  3. 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"]
    }
    
  4. 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'
    
  5. Yapay zeka paketinizin içinde 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. 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.

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

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

Gerekli adımlara genel bakış

Cihaz hedeflemeyi etkinleştirmek için aşağıdaki adımlar gereklidir:

  1. Cihaz gruplarınızı bir XML dosyasında tanımlayın.
  2. Paketinizin hangi bölümlerinin hangi cihaz gruplarına gideceğ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 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.

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

    Cihaz kataloğundaki Pixel 4a sayfası

    Cihaz kataloğundaki Pixel 4a sayfası

  • 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>
Yapay zeka paketleri için hedeflemede, hedeflenmeyen cihazlar yapay zeka paketinin varsayılan ve boş bir varyantını alır.

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:

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

  2. --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
    
  3. 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.

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