• 24-01-2023, 12:36:00
    #1
    Merhabalar,

    Çok sık görülen app klonlama, tersine mühendislik ile uygulamaların kaynak kodlarına ulaşılabiliyor veya kötü niyetli işlemler yapılabiliyor.
    Kod güvenirliğini ve optimizasyonu sağlayabilmek adına küçük ve orta büyüklükteki projeler için ProGuard kullanacağız.

    ProGuard; (apk, aab) dosya boyutunu küçültme, kodları optimize ve karmaşık hale getirerek tersine mühendisliği zor bir hale getirmeye yarayan bir araçtır.

    Proguard aktif değil iken tersine mühendislik sonucu görünen kod;

    Proguard aktif iken tersine mühendislik sonucu görünen kod;


    ProGuard Nasıl Aktif Edilir?
    • Gradle Scripts > build.gradle (Module: *****.app) dosyasını açın.
      Default olarak sizlerde release kısmın olacaktır debug kısmı olmayacaktır.
      Debug kısmını eklememizin sebebi uygulamanızı Android Studio üzerinden test yaptığınızda hızlı olabilmesi için yani ProGuard işlemini yapmaması için ekledik. Çünkü ProGuard aracını aktif edersek her build sonucunda sıkıştırma, gizleme vb. işlemlerini yaptığı için biraz bekletecektir. Biz bunu sadece apk veya aab çıktısı aldığımızda yapmasını istediğimiz için release ve debug kısmı olarak ikiye ayırdık.
    • Aşağıdaki görselde gördüğünüz gibi debug ve release olarak düzenlemeleri yapın.
    (Dipnot: uygulamanızı mutlaka apk olarak deneyin.)


    buildTypes {
     release {
     minifyEnabled true
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
     }
     debug {
     minifyEnabled false
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
     }
       }


    MinifyEnabled özelliğini true yaptık yani aktif ettik bittimi ? Hayır tabii ki.
    Şuanda MinifyEnabled özelliğini aktif ederek kodların sıkıştırılmasını, optimizasyonunu ve kodların karmaşıklaştırarak karartmasını sağladık.

    Kaynak kodlarını küçültmek için yani kullanılmayan (resimler, xml dosyaları vb.) kaldırarak, kendini tekrar eden yani aynı kaynakları birleştirerek uygulama boyutunu küçültmeye yarayan kodumuz; shrinkResources
    Peki Bunu Nasıl Aktif Edeceğiz?
    • Gradle Scripts > build.gradle (Module: *****.app) dosyasını açın.
    • Görselde gördüğünüz gibi değişiklikleri yapın.

    buildTypes {
     release {
     minifyEnabled true
     shrinkResources true
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
     }
     debug {
     minifyEnabled false
     shrinkResources false
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
     }
      }


    Uygulamanın boyutu küçülttük, kodları sıkıştırdık, optimizasyonunu sağladık, kodları karmaşıklaştırarak karatma işlemini de yaptık.
    Karatma işlemi bazen uygulamada sorunlar çıkarabiliyor bu yüzden bunu sadece belirli dosyalar üzerine veya ekstra eklediğiniz kütüphaneler üzerine veya o dosyaların hariç tüm dosyalara veya hiç bir dosyaya yaptıramama gibi seçeneğimiz var.
    • Gradle Scripts > proguard-rules.pro dosyasını açın.
    • Yapmak istediğiniz özellikleri buraya ekleyin.
    Eğer kodlarınızın karmaşıklaştırarak karartma işlemini yaptırmak istemiyorsanız;
    proguard-rules.pro dosyasına -dontshrink eklemeniz yeterlidir.

    Eğer kodlarınızın optimize edilmesini istemiyorsanız;
    proguard-rules.pro dosyasına -dontoptimize eklemeniz yeterlidir.





    Eğer sadece belirli java dosyalarında optimizasyon, sıkıştırma ve karmaşıklaştırma işlemini yaptırmak isterseniz görseldeki gibi yapabilirsiniz.
    Örneğin ben MainActivity'de yapmasını istedim.



    Eğer bazı kütüphanelerde sorunlar yaşıyorsanız o kütüphaneyi sıkıştırma vb. işlemlerden hariç tutabilirsiniz.
    Örneğin; com.google.ads kütüphanesini hariç tuttum.



    Daha fazlasına buradan ulaşabilirsiniz.
  • 24-01-2023, 13:16:42
    #2
    Özellikle mobil uygulama geliştirme konusunda bir süredir bu kadar kaliteli bir konu görmemiştim.

    Paylaşımınız için teşekkür ederim.
  • 24-01-2023, 13:18:55
    #3
    enesutku adlı üyeden alıntı: mesajı görüntüle
    Özellikle mobil uygulama geliştirme konusunda bir süredir bu kadar kaliteli bir konu görmemiştim.

    Paylaşımınız için teşekkür ederim.
    Güzel yorumunuz için ben teşekkür ederim hocam
  • 24-01-2023, 16:38:00
    #4
    Güzel anlatım, ufak bir bilgilendirme yapayım. Eksik yazılan proguard kuralları uygulamanızın çökmesine yol açacaktır.
  • 24-01-2023, 17:03:45
    #5
    mixerdating adlı üyeden alıntı: mesajı görüntüle
    Güzel anlatım, ufak bir bilgilendirme yapayım. Eksik yazılan proguard kuralları uygulamanızın çökmesine yol açacaktır.
    Teşekkür ederim hocam, dediğiniz gibi çökmesine yol açabilir bu yüzden mutlaka apk olarak tüm uygulamayı denemeleri gerekiyor. Eğer çökmesine neden olan kütüphane veya java dosyası var ise onları ProGuard aracından hariç tutmaları gerekiyor.
  • 26-01-2023, 17:53:15
    #6
    Hocam smali her şeyi bozuyor artık proguard falan pek iş görmez oldu. Başka alternatifler varmı bildiğiniz.
  • 26-01-2023, 18:36:06
    #7
    DoganDeniz adlı üyeden alıntı: mesajı görüntüle
    Hocam smali her şeyi bozuyor artık proguard falan pek iş görmez oldu. Başka alternatifler varmı bildiğiniz.
    Birkaç ücretli alternatifi vardı tam isimlerini hatırlamıyorum. Eğer isimlerini hatırlarsam iletirim hocam.
  • 26-01-2023, 20:51:25
    #8
    memobeyle adlı üyeden alıntı: mesajı görüntüle
    Birkaç ücretli alternatifi vardı tam isimlerini hatırlamıyorum. Eğer isimlerini hatırlarsam iletirim hocam.
    Teşekkürler hocam
  • 01-02-2023, 15:23:06
    #9
    Elinize sağlık. Çok yararlı bir konu ancak Android R8 ile proguard a gerek kalmadı diye hatırlıyorum.