سلام دوستان
یک پروژه ساده ای دارم که با رتروفیت نوشتم و یک سری اطلاعات از سرور دریافت میکند که شامل کلاس های زیر هست :
MainActivity
adapter
Model
ApiClient
ApiInterface
خواستم در این پروژه از پروگارد استفاده کنم برای همین :
buildTypes { release {
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
و داخل proguard-rules.pro باتوجه به مستندات خود رتروفیت کدهای زیر رو قرار دادم :
# Retrofit does reflection on generic parameters and InnerClass is required to use Signature.-keepattributes Signature, InnerClasses
# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirem ent
# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**
# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit
# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.-KotlinExtensions
-dontwarn okhttp3.**
پروژه رو وقتی دیباگ میکنم به راحتی اجرا میشه .
اما وقتی ریلیز میکنیم و با کلیدی که ساختم هم ساین میکنم متاسفانه هنگام اجرا همانطور که میبنید اطلاعات رو نمایش نمیده ! و هیچ خطایی هم در لاگ نمیاد که بدونیم مشکل از کجاست !
مساله ای که هست اینه که به احتمال زیاد وقتی پروگارد میکنیم یکی از این کلاس هایی که استفاده کردم رو چون به هم میریزه برای همین شاید این برنامه نمیتونه اطلاعات رو بخونه ..به نظرتون کدام کلاس ها رو باید در پروگارد تنظیم کنم که به اونا دست نزنه ؟! من این دستورات رو قرار دادم ولی نتیجه ای نداد :
-keep class com.samisoft.retrofit.adapter
-keep class com.samisoft.retrofit.Model
-keep class com.samisoft.retrofit.ApiClient
-keep class com.samisoft.retrofit.ApiInterface
-keep class com.samisoft.retrofit.MainActivity
اما وقتی دستور زیر رو مینویسیم به درستی اطلاعات نمایش داده میشه : (اما خب اشکال این کار هم اینه که در این حالت کلیه کلاس ها رو نادیده میگیره که دیگر مبهم نکنه)
-keep class com.samisoft.retrofit.** { *; }