APK'nın yapısı nasıl işler ve test için res'i güvenli şekilde düzenleme
APK; AndroidManifest.xml, classes.dex, res/, assets/, lib/ ve META-INF dosyalarından oluşan bir ZIP arşividir. Yalnızca değerleri (metinler, renkler, görseller) değiştirip adları/ID'leri dokunmadan bırakırsanız kaynakları güvenle düzenleyebilirsiniz; herhangi bir değişiklikten sonra APK'yı cihaza kurulum için doğru şekilde derlemeniz ve imzalamanız gerekir.
APK'nın iç yapısı ve res'in rolü
APK = temel öğeleri içeren bir ZIP:
- AndroidManifest.xml — uygulama meta verileri (package, permissions, activities).
- classes*.dex — Dalvik/ART için Java/Kotlin bytecode'u.
- res/ — XML kaynakları: layout/, values/ (strings, colors, dimens), drawable/, mipmap/, menu/, anim/ vb.
- assets/ — olduğu gibi okunan keyfi dosyalar.
- lib/ — farklı mimariler için .so dosyaları.
- META-INF/ — imza ve sertifikalar.
res/ içindeki kaynaklara R.
APK'yı ZIP olarak açabilirsiniz, ancak herhangi bir değişiklik yeniden derleme ve imzalama gerektirir — aksi takdirde uygulama kurulmaz veya mağazadan gelen güncellemeleri kaybeder.
Pratik düzenleme senaryoları ve adım adım süreç
Aşağıda, test için güvenli olan yaygın görevler ve işlem sırası yer almaktadır.
- Metni/yerelleştirmeyi değiştirme
- APK'yı apktool ile çıkarın: apktool d app.apk
- res/values/strings.xml dosyasını düzenleyin (varsa values-ru, values-en de dahil).
- name özniteliğini ve format yer tutucularını (%1$s, %d) değiştirmeyin.
- Derleyin: apktool b app -o modified.apk
- İmzalayın ve hizalayın (bkz. Araçlar bölümü).
- Simge/görseli değiştirme
- Aynı adlara ve uygun boyutlara/yoğunluklara (mdpi/hdpi/xhdpi) sahip görseller hazırlayın.
- res/drawable*/ veya mipmap*/ içindeki dosyaları değiştirin.
- Yukarıdaki gibi derleme ve imzalama.
- Uyumluluğu kontrol etmeden formatı (png ↔ webp) değiştirmeyin.
- Renkleri veya temayı değiştirme
- res/values/colors.xml dosyasını düzenleyin ve styles.xml ile karşılaştırın.
- layout/*.xml içinde sabit kodlanmış renkleri kontrol edin — bunları da düzenleyebilirsiniz ancak daha risklidir.
- Çeşitli yoğunluklarda ve Android sürümlerinde test edin.
- Küçük layout düzenlemeleri
- Özellikleri değiştirin, android:id'leri yeniden adlandırmayın ve mantığın bağlı olduğu view'ları silmeyin.
- Gizleme/gösterme için android:visibility="gone"/"visible" kullanın.
Emin değilseniz metin veya renk değişikliğiyle başlayın. Olası etkileri ortaya çıkarmak için en güvenli yol budur.
Araçlar, derleme ve imzalama (kısa)
- apktool — kaynakları ve smali'yi çıkarma/derleme.
- jadx/jd-gui — Java sözde kodunu görüntüleme (mantığı anlamak için).
- apksigner (Android SDK) veya jarsigner — APK imzalama.
- zipalign — imzalama öncesi hizalama (önerilir). Süreç:
- apktool d app.apk
- res/... içinde değişiklik yap
- apktool b app -o unsigned.apk
- zipalign -v -p 4 unsigned.apk aligned.apk
- apksigner sign --ks mykeystore.jks --out signed.apk aligned.apk
İmzalar ve çakışmalar hakkında ipuçları:
- Orijinal keystore'unuz yoksa yeni imza, mağazadan otomatik güncellemeleri engeller. Test yapıları için ayrı bir applicationId kullanın.
- Modern uygulamalar App Bundle / split APK olabilir — tek bir APK'yı düzenlemek yeterli olmayabilir. Karmaşık durumlar için kaynak kodlarla çalışmak veya bundle araçlarını kullanmak daha iyidir.
Sık yapılan hatalar
- Kodun beklediği bir kaynağı yeniden adlandırma veya silme — çökmeye neden olur.
- Dizelerdeki yer tutucuları değiştirme (%1$s → %s) — RuntimeException tetikler.
- Bazı yoğunluklardaki simgeleri değiştirip diğerlerinde değiştirmeme — farklı cihazlarda hatalı görünüm.
- zipalign olmadan veya yanlış anahtarla imzalama — kurulum/güncelleme sorunları.
SSS
- Kaynak kodları olmadan APK düzenlenebilir mi? Evet — apktool/jadx aracılığıyla, ancak daha risklidir ve yeniden derleme ile imzalama gerektirir.
- Değiştirilmiş APK Play Store üzerinden güncellenir mi? Hayır, imza farklıysa; test için ayrı bir packageName kullanın.
- .so kütüphaneleri değiştirilebilir mi? Evet, ancak genellikle ABI ve uyumluluk kontrolü ile yeniden derleme gerekir — bu yüksek karmaşıklıktır.
Kopyalar kullanın, değişiklikleri belgeleyin ve birkaç cihazda test edin — bu, riskleri en aza indirir ve çalışan bir test ortamını korur.