Cihaz üzerinde yapay zeka için Play erken erişim programı (EAP)

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:

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:

  1. EAP'ye katılmak için Play geliştirici hesabı kimliğinizi Google Play'e sağlayın.
  2. Android uygulama paketinize modellerinizi yapay zeka paketleri halinde paketleyin ve yapay zeka paketlerinin nasıl yayınlanacağını belirtin.
  3. [İ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.
  4. [İ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.
  5. 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.

  1. 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.
  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 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 ]"
        }
    }
    
  3. 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"]
    }
    
  4. 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'
    
  5. Yapay zeka paketinizde bir src/main/assets/ dizini oluşturun.

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

  8. [İsteğe bağlı] Farklı modelleri farklı cihazlara yayınlamak 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ınlama modunu yapılandırır
    • ai-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:

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

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

    cihaz kataloğundaki Pixel 4a sayfası

    cihaz kataloğundaki Pixel 4a sayfası

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

  1. Uygulama paketinizi Android Studio veya bundletool ile derleyin.

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

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