Uygulama paketleri için kod şeffaflığı

Kod şeffaflığı, isteğe bağlı bir kod imzalama ve doğrulama mekanizmasıdır. Android App Bundle ile yayınlanan uygulamaların sayısı. Kod şeffaflığı kullanır yalnızca uygulama geliştiricisinde bulunan bir imza anahtarı.

Kod şeffaflığı, uygulama paketleri için kullanılan imzalama şemasından bağımsızdır ve APK'lar. Kod şeffaflığı anahtarı, uygulama imzalamadan ayrı ve farklıdır Play Uygulama İmzalama kullanılırken Google'ın güvenli altyapısında depolanan anahtarı.

Kod şeffaflığının işleyiş şekli

İşlem, pakete bir kod şeffaflığı dosyası ekleyerek yüklenmiştir, ancak dağıtılmak üzere Play Console'a yüklenmeden önce yer alır.

Kod şeffaflığı dosyası, DEX'in listesini içeren bir JSON Web Token'dır (JWT). dosyaları, yerel kitaplıklar ve karmaları. İşte o zaman yalnızca geliştiriciye ait olan kod şeffaflığı anahtarı kullanılarak imzalanmalıdır.

Kod şeffaflığı şeması

Bu kod şeffaflığı dosyası, uygulamadan oluşturulan temel APK'ya dağıtılır paketine (özellikle de temel modülün ana bölümüne) dahildir. Bu sayede, şunu doğruladı:

  • APK'larda bulunan tüm DEX ve yerel kod dosyalarında eşleşen karmalar vardır: kod şeffaflığı dosyasıdır.
  • Uygulamadaki kod şeffaflığı imzalama anahtarının ortak anahtar bileşeni Geliştiricinin ortak anahtarıyla eşleşir (bu anahtar, ayrı, güvenli bir kanal üzerinden gerçekleştirmeniz gerekir).

Bu bilgiler birlikte, APK'lar, geliştiricinin amaçladığıyla eşleşir ve değiştirilmemiştir.

Kod şeffaflığı dosyası; kaynakları, öğeleri, Android Manifest dosyası veya DEX dosyası ya da yerel kitaplık olmayan diğer dosyalar lib/ klasöründe yer alıyor.

Kod şeffaflığı doğrulaması yalnızca Google tarafından çalıştırdıkları kodun eşleştiğinden emin olmak isteyen geliştiriciler ve son kullanıcılar orijinal olarak uygulama geliştiricisi tarafından oluşturulan ve imzalanan kod.

Bilinen sınırlamalar

Kod şeffaflığının kullanılamayacağı belirli durumlar vardır:

  • sharedUserId belirten uygulamalar özelliğini gönderin. Bu tür başvurular, süreçlerini Google ile bu da programdaki değişikliklerin kontrol edilmesini zorlaştırır. bu kodu kullanabilirsiniz.
  • Kurcalama koruması kullanan uygulamalar veya kod değişiklikleri yapan başka hizmetler kod şeffaflığı dosyası oluşturulduktan sonra kod şeffaflığının olabileceğini unutmayın.
  • 21'in altındaki API düzeylerinde (Android 5.0) eski Multidex'i kullanan ve özellik modüllerinden yararlanın. Kod şeffaflığı, uygulama şu durumlarda da çalışmaya devam eder: Google Play tarafından Android 5.0 ve sonraki sürümlere sahip cihazlara yüklenir. Kod şeffaflığı: eski işletim sistemi sürümlerinde devre dışıdır.

Kod şeffaflığı nasıl eklenir?

Uygulamanıza kod şeffaflığı eklemeden önce kod şeffaflığı imzalamak için kullanabileceğiniz özel ve ortak anahtar çifti içerir. Bu kullandığınız uygulama imzalama anahtarından farklı benzersiz bir anahtar olmalıdır güvenli bir şekilde saklanmalı ve hiçbir zaman kuruluşunuzu tanımlayın.

Anahtarınız yoksa Uygulamanızı imzalama bölümündeki talimatları uygulayabilirsiniz oluşturma kılavuzundan yararlanabilirsiniz. Kod şeffaflığı standart bir keystore dosyası biçimindedir. Rehber uygulama imzalamaya ilişkin olsa da, aynıdır.

Android Gradle eklentisini kullanma

Kod şeffaflığı desteği için Android Gradle eklentisi 7.1.0-alpha03 sürümü gereklidir veya daha yeni olması gerekir. Kod şeffaflığı imzalaması için kullanılan anahtarı yapılandırmak için bundle blokunda takip ediliyor.

Eski

// In your app module's build.gradle file:
android {
    ...
    bundle {
        codeTransparency {
            signing {
                keyAlias = "ALIAS"
                keyPassword = "PASSWORD"
                storeFile = file("path/to/keystore")
                storePassword = "PASSWORD"
            }
        }
        ...
    }
}

Kotlin

// In your app module's build.gradle.kts file:
android {
    ...
    bundle {
        codeTransparency {
            signing {
                keyAlias = "ALIAS"
                keyPassword = "PASSWORD"
                storeFile = file("path/to/keystore")
                storePassword = "PASSWORD"
            }
        }
        ...
    }
}

Kullanılan anahtar, yalnızca kod şeffaflığı için kullanacağınız bir anahtar olmalıdır. değil, Play Uygulama İmzalama tarafından kullanılan uygulama imzalama anahtarı değil.

Komut satırında bundletool kullanma

Kod şeffaflığı desteği, araç paketinin 1.7.0 veya daha yeni bir sürümünü gerektirir. GitHub'dan indirebilirsiniz.

Android App Bundle'a kod şeffaflığı eklemek için aşağıdaki komutu çalıştırın. Kullanılan anahtar, yalnızca kod şeffaflığı için kullanacağınız bir anahtar olmalıdır. değil, Play Uygulama İmzalama tarafından kullanılan uygulama imzalama anahtarı değil.

bundletool add-transparency \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/my_app_with_transparency.aab \
  --ks=/MyApp/keystore.jks \
  --ks-pass=file:/MyApp/keystore.pwd \
  --ks-key-alias=MyKeyAlias \
  --key-pass=file:/MyApp/key.pwd

Alternatif olarak, kendi imzalama araçlarınızı kullanmak istiyorsanız Bundletool'u da kullanabilirsiniz oluşturmak için bu dosyayı başka bir ortama taşıyın ve imzayı pakete ekleyin:

# Generate code transparency file
bundletool add-transparency \
  --mode=generate_code_transparency_file \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/code_transparency_file.jwt \
  --transparency-key-certificate=/MyApp/transparency.cert

# Add code transparency signature to the bundle
bundletool add-transparency \
  --mode=inject_signature \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/my_app_with_transparency.aab \
  --transparency-key-certificate=/MyApp/transparency.cert \
  --transparency-signature=/MyApp/signature

Bir uygulamanın kod şeffaflığını doğrulama

Kodun kod şeffaflığını doğrulamak için çeşitli yöntemler bulunur. dosyası, APK'ların bir Android cihazda yüklü olup olmamasına veya yerel olarak bilgisayarınıza indirin.

Bir uygulama paketini veya APK grubunu kontrol etmek için Bundletool'u kullanma

Bir uygulama paketi veya APK'da kod şeffaflığını doğrulamak için Bundletool'u kullanabilirsiniz ayarlandı. Genel sertifika parmak izini yazdırmak için check-transparency komutunu kullanın:

# For checking a bundle:
bundletool check-transparency \
  --mode=bundle \
  --bundle=/MyApp/my_app_with_transparency.aab

No APK present. APK signature was not checked.
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.


# For checking a ZIP containing app's APK splits:
bundletool check-transparency \
  --mode=apk \
  --apk-zip=/MyApp/my_app_with_transparency.zip

APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.

İsteğe bağlı olarak, karmaları karşılaştırmanıza gerek kalmadan paket veya APK manuel olarak:

bundletool check-transparency \
  --mode=bundle \
  --bundle=/MyApp/my_app_with_transparency.aab \
  --transparency-key-certificate=/MyApp/transparency.cert

No APK present. APK signature was not checked.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.


bundletool check-transparency \
  --mode=apk \
  --apk-zip=/MyApp/my_app_with_transparency.zip \
  --apk-signing-key-certificate=/MyApp/apk.cert \
  --transparency-key-certificate=/MyApp/transparency.cert

APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.

Cihazda yüklü bir uygulamayı kontrol etmek için Bundletool'u kullanma

Android cihazda yüklü olan bir uygulamayı kontrol etmek için uygulamanın cihazınız ADB üzerinden bilgisayarınıza bağlandığında ve şu komutu verdiğinde:

bundletool check-transparency \
  --mode=connected_device \
  --package-name="com.my.app"

APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.

Bağlı cihaz şeffaflık kontrolü de isteğe bağlı olarak imzayı doğrulayabilir. (belirttiğiniz ortak anahtara karşılık gelecek şekilde)

bundletool check-transparency \
  --mode=connected-device \
  --package-name="com.my.app" \
  --apk-signing-key-certificate=/MyApp/apk.cert \
  --transparency-key-certificate=/MyApp/transparency.cert

APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.