Android Studio Kaynak Kodlarını Gizleme veya Şifreleme

Android studio kaynak kodlarını gizleme ve şifreleme hakkında bilgi almak istiyorsanız doğru adrestesiniz demektir, Günlerce uğraşıp emek harcayarak yaptığınız uygulamalarınızın kaynak kodlarını gizlemek ve tersine mühendislik sistemi ile çalınmasını önlemek için bazı işlemler yapmak gerekir, android studio kaynak kodlarını gizleme, sıkıştırma ve şifreleme işlemlerini Android ProGuard eklentisi yapmaktadır.Bu konu hakkında detaylı bilgi aşağıdaki bölümde yer almaktadır.
android studio kaynak kodlarını gizleme, android studio kaynak kodlarını şifreleme, android studio kaynak kodlarını sıkıştırma

Android Studio Kaynak Kodlarını Gizleme veya Şifreleme


Android uygulama Geliştirme dersleri anlattığımız/yayınladığımız sozlerim.org sitemiz üzerinden bu dersimizde Android ProGuard kullanımı ile devam edeceğiz. En çok sorulan soruların başında gelen kişisel olarak Apk’mızı nasıl koruruz ,android kod güvenliği nasıl sağlarız sorularınızın cevabı bu sayfada. Sitemizin bu sayfasında siz değerli geliştiricilere Android SDK, Android Studio ProGuard kullanımından bahsedeceğiz.
Öncelikle ProGuard nedir ve ne işe yarar onlardan bahsedeceğim. ProGuard’ın 2 ana işlemi vardır.
1- Kod Sıkıştırma (Apk boyutu küçültme)
2- Kod karıştırma
Genel olarak uygulama yazdıktan sonra uygulamamızın gereksiz yere APK boyutunun büyük olduğunu farkederiz. APK boyutunun küçük olması her zaman bir avantajdır. APK boyutu yüksek olan uygulamalar Google Play kullanıcılarının uygulamanızı indirmesine engel olabilmektedir( Sınırlı internet paketleri). İşte burda ProGuard kullanmamız boyutu küçültebilir. Peki bunu nasıl yapıyor derseniz, ProGuard Run Time anında uygulamanın kaynak kodunda olan ama kullanılmayan method,class ve değişkenleri analiz edip otomatik olarak silmektedir. Özellikle uygulamamıza dahil ettiğimiz 3. parti kütüphanelerde kullanmadığımız çok fazla method ve class olabilmektedir. Proguard bunları silmekte ve oluşturduğumuz APK’ya bunları dahil etmemektedir.
Özellikle büyük projelerde çok fazla kullanılmayan method ve class olabilmektedir. Bunları tek tek bulup silmek yerine (ki genel olarak bu ilerde lazım olabilir mantığıyla silinmemektedir) ProGuard kullanıp otomatik silmesini, dolayısıyla Apk boyutunu küçültmesini sağlayabiliriz.
ProGuard Apk boyutunun küçültmesinin yanında Apk decompilerlar ile decompile edilen kodun direk açığa çıkmasına engel olmaktadır. Apk decompile işlemini yapan onlarca site bulunmaktadır. Eğer proguard kullanmıyorsak decompile işlemi ile direk yazdığımız kod açığa çıkmakta ve açığa çıkan kod tekrar compile edilip başkası tarafından farklı bir uygulama adı ile piyasaya sürülebilmektedir.
Örneğin bir uygulama yazdınız ve günlerinizi , hatta aylarınızı verdiniz. Google Play Store’a bu uygulamayı yüklediniz. Uygulamanızı indiren biri Apk’yı export edip herhangi bir decompile uygulaması veya sitesi ile decompile işlemini gerçekleştirip yazmış olduğunuz kodu elde edebilir ve tekrardan sanki kendisi yazmış gibi compile edip farklı bir paket adıyla store’a koyabilir. İşte bunun önüne geçebilmek için ProGuard kullanmamızı Android biz developer’lara önermektedir.
Gelelim ProGuard’ı projemizde nasıl kullanacağımıza.
build.gradle ‘ı açıyoruz ve aşağıdaki kodu ekliyoruz.
Android SDK ile birlikte default bir ProGuard dosyası gelmektedir. Bu dosyayı projemize getDefaultProguardFile methodu ile dahil etmekteyiz. Bu dosya Android SDK tools/proguard/ altında bulunmaktadır. Açıp inceleyebilirsiniz.minifyEnabled true ile sıkıştırmayı ve kod karıştırmayı aktif hale getirdik.
Bu işlemleri sadece release APK yani imzalı Apk alırken aktif hale getirdik. Çünkü debug Apk’da bu işlemleri yapmanın bir mantığı yoktur. Kod karıştırarak uygulamamızı test etmek daha zor olacağı için bu işlemi sadece release Apk alırken yapıyoruz. Ama diyelim ki bir sebepten dolayı debug Apk’da bu işlemi yapmak isterseniz kodu aşağıdaki şekilde revize etmeniz gerekecektir.
Artık hem debug Apk’da hemde release Apk’da kod sıkıştırma ve karıştırma aktif haldedir.
Peki biz kendi proguard ayarlarımızı yapmak istersek ne yapacağız. Çünkü bazı istisnai durumlarda ProGuard yanlış methodları silebilmektedir. Ayrıca bazı library’leri kullanırken o library’de kod karıştırma ve sıkıştırma yapmamamız gerekebilir. Aynı şekilde kullandığımız bazı Class’larda da ProGuard kullanmak istemeyebiliriz. İşte bu gibi durumlarda kendi ayarlarımızı yapacağımız ‘proguard-rules.pro’ dosyamızı açıyoruz.  (build.gradle ile aynı dizine, yoksa kendiniz oluşturabilirsiniz) .
Zaten yukarıdaki kodumuza bakarsak,
bu satırda o dosyayı çağırıyoruz. Bu dosyayı çağırdık ve oluşturduğumuz bir class’ın ProGuard dışında kalmasını istiyoruz.
proguard-rules.pro dosyamızı açıyoruz ve yukarıdaki kodu ekliyoruz. Böylelikle MyClass class’ı ProGuard dışı kalacaktır.
proguard-rules.pro’yu daha etkili kullanım örneği için bu linki ziyaret edebilirsiniz.
Not: ProGuard Android Studio’nun Instant Run özelliği ile birlikte çalışmamaktadır.
Uyarı:
————————————————————————————————
ProGuard kullanarak kod karıştırma işlemi yaptığımızda otomatik olarak method , class isimlerimiz değişecektir. Dolayısıyla Google Play developer hesabı üzerinden inceleyeceğimiz crash loglarında anlamsız methodlar , class’lar göreceğiz ve bu loglar anlaşılır halde olmayacaktır.Bunun önüne geçmek için şu adımları izleyeceğiz.
1-/build/outputs/mapping/release/ altında oluşan mapping.txt dosyasını alacağız.
2-Google Play Geliştirici Konsolunuzda oturum açın.
3-Uygulamanızı seçin
4-Soldaki menüde, Kilitlenmeler ve ANR’ler > Gizleme Kaldırma Dosyaları’nı tıklayın.
5-Uygulamanızın ilgili sürümünün yanındaki Yükle’yi tıklayın.
6-Uygulamanızın sürümüne ilişkin ProGuard eşleme dosyasını(mapping.txt) yükleyin.
Bu işlemleri her yeni Apk sürümü için yapmanız gerekmektedir. mapping.txt’ i içinde yapılan method ve class isim değişikliklerinin map’i tutulmaktadır.
Örneğin: methodumuz public void kitapekle(), ProGuard bunun adını a() olarak değiştirir ve bunun bilgisini mapping.txt ‘i içine yazar. Biz bu mapping.txt ‘yi Google Play’e ProGuard’ın yaptığı değişiklikleri söylüyoruz. Böylelikle oluşan crash raporları anlamlı hale geliyor.

Yorum Gönder

0 Yorumlar