PDA

View Full Version : آموزش استفاده از ProGurd در اندروید از Lynda.com



slr560
دوشنبه 12 خرداد 1393, 17:14 عصر
سلام دوستان
یه سرچی تو انجمن کردم دیدم بعضی از دوستان مشکل حفاظت از کدهاشون رو دارن تو پروژه
دوستمون rubiks.kde توضیح کامل دادن تو یکی از تاپیک ها ولی بعضی از دوستان بازم مشکل دارن
تو آرشیوم ۳تا کلیپ از استفاده Progurd توی اندروید داشتم که توسط David Gassner دوست داشتنی تهیه شده که به صورت RAR شده توی DropBox خودم آپلود کردم
فیلم ها به زبان اصلی هست .

دانلود (http://goo.gl/7MwNpW). حجم : ۲۱ مگابایت

poorman
دوشنبه 12 خرداد 1393, 17:19 عصر
قول میدم اگه تونستم پیاده سازیش کنم و مشکلی باهاش نداشتم، حتما یک آموزش فارسی بذارم :چشمک:

مرسی

shahin bahari
دوشنبه 12 خرداد 1393, 18:05 عصر
سلام
دوستان مگه فعال کردن پروگارد بیشتر از uncomment کردن دستور اون توی فایل پروژه هست؟!
من این کار رو میکنم دی کامپایل هم میکنم اسم همه کلاس ها تبدیل به حروف شده.

poorman
دوشنبه 12 خرداد 1393, 18:09 عصر
سلام
دوستان مگه فعال کردن پروگارد بیشتر از uncomment کردن دستور اون توی فایل پروژه هست؟!
من این کار رو میکنم دی کامپایل هم میکنم اسم همه کلاس ها تبدیل به حروف شده.

درسته در حالت عادی باید همین کار رو کرد

اما مشکل من این بود که چه کلاس هایی رو باید keep کنیم، لایبری ها رو چکار کنیم

این آموزشی که دوستمون گذاشتن خیلی مختصر بود، بازم چیز خاصی دستگیرم نشد

poorman
دوشنبه 12 خرداد 1393, 18:32 عصر
جالبه پروژه رو با تنظیمات پیش فرض proguard پکیج کردم، یک مگابایت اضافه شد !!! :متعجب:

برنامه درست مبهم سازی شد، اما نمیدونم روی گوشی ها کار میکنه حالا یا نه ...

روی genymotion که بعد از مبهم سازی کار میکنه، حالا نمیدونم روی گوشی قراره فرقی کنه یا نه

slr560
دوشنبه 12 خرداد 1393, 18:38 عصر
قطعا کار میکنه اگه روی genymotion کار کرده
فقط اگه کسی بتونه سایر تنظیماتشو یاد بگیره و اینجا هم مطرح کنه عالی میشه
جناب پورمن ببینید میشه تنظیمات دیگش رو برای بهتر شدن امنیت و حجم اعمال کرد

poorman
دوشنبه 12 خرداد 1393, 18:48 عصر
خیلی دنبالشم که تنظیمات دیگه پروگارد رو یاد بگیرم و بفهمم

ایشالا وقتی فهمیدم دقیق چی به چیه، میام زکات علمم رو میدم :لبخندساده:

rubiks.kde
دوشنبه 12 خرداد 1393, 20:37 عصر
خیلی دنبالشم که تنظیمات دیگه پروگارد رو یاد بگیرم و بفهمم

ایشالا وقتی فهمیدم دقیق چی به چیه، میام زکات علمم رو میدم :لبخندساده:

تنظیمات پروگارد که بیشتر مورد استفاده قرار میگیره همونی هست که توی مثال خود SDK وجود داره.البته یه برنامه گرافیکی هم برای کار داره که میشه ازش استفاده کرد.

تنظیماتش هم طوری هست که شما بر اساس پروژت باید بیایی تنظیم کنی (در واقع مثل نوشتن یه برنامه کوچیکه) اگه توی پروژت شما View های کاستم شده داری که در xml استفاده کردی حتما باید مشخص کنی که این کلاسها تغییر نکنه.یا اسم اکتیویتی ها (چون پروگارد تنها روی .java اعمال میشه و اگه مثلا اسم اکتیویتی تغییر کنه توی مانیفست خطا میده) ؛ یا اگه از تابع های native استفاده میکنید باز باید مانع از تغییرش بشید.

در کل به قول معروف حساس نشو حساس نشو و همون تنظیمات پیش فرض کافی هست.
بیشتر کتابخونه ها میگن که تنظیمات پروگاردشون چی هست مثل عدد و ...

من حدود یک سال پیش روی این مسئله خیلی کار کردم ولی آخرش به این نتیجه رسیدم که یک برنامه هرچقدم روی امنیتش کار بشه بازم امن نمیشه.
اول روی پروگارد کار کردم تنظیمات مختلف رو اعمال کردم ولی همون طور که خیلی جا ها هم گفتن اگه میزان مبهم سازی از یه حدی بیشتر بشه دستگاه میزبان توی اجرا دچار مشکل میشه چون به هم ریختگی کد زیاد میشه زمان اجرا بسیار طولانی میشه ، اگه کدهای مبهم شده رو دیده باشید جایی حلقه های اضافی وارد شده اسم متغییرها عوض شده توابع در جای مختلف قرار گرفتن و همین عمل مخصوصا در گوشی موبایل باعث پایین اومدن کارایی میشه. دقیقا مثل استفاده از goto در زبان های برنامه نویسی که بااینکه وجود داره و گاهی هم خیلی مفیده ولی استفادش رو پیشنهاد نمیدن)

یه روش دیگه هم که پیشنهاد میشه استفاده از jni است ، یعنی بیایید قسمتهای محاسباتی امنیتی را توی این قسمت بنویسید و بعد در java استفاده کنید.خودم از این روش استفاده کردم و حتی مکانیزمی هم براش پیدا کردم که محدودیت خیلی بیشتر بشه ولی خب این هم دارای مشکلات خودش بود.
البته هک کردن این برنامه ها هم امکان داره . خیلی وقت پیش دنبال کتابخانه ایی برای کار با pdf بودم که هیچ مورد به درد بخوری به صورت رایگان پیدا نکردم ولی کتابخانه androidpdf.mobi وجود داره که هم پولی بود و هم حسابی امکانات داره و خیلی هم کار با اون رو راحت کردن.

این کتابخونه تمام کارهای مربوط به pdf رو در C++ انجام میده و تنها java یه اینترفیسه برای استفاده ، از طرفی اگه برید سایتش کدش رو در اختیارتون میزاره (البته تنها کد جاوا و کدهایی c++ رو به صورت کامپایل شده بهتون میده و محدودیتی هم که داره اینه شما از این کد تریال با تمام امکاناتش میتونید استفاده کنید تا زمانی که اسم پکیج رو تغییر ندید و به محض تغییر دیگه کار نمیکنه)
روش کارشم اینه که context برنامه رو به C++ میفرسته تا بررسی بشه.

توی نگاه اول شما هر کاری بکنید متوجه میشه و نمیشه گولش زد ولی با یکم وقت گذاشتن و گشتن داکیونت های آندروید متوجه میشید که میشه Context تقلبی ساخت در واقع یه رپر برای context میشه نوشت که هروقت context.getname فراخونی بشه اسم پکیج تقلبی برگشت داده بشه نه اسم پکیج اصلی.حالا به این طریق به راحتی میشه کتابخانه ایی که قیمتش 1,270.00$ است رو کرک کرد.
البته من نامردی نکردم و بهشون ایمیل زدم که این مشکل داره (البته ناگفته نمونه که چون نمیتونستم بخرم بهشون ایمیل زدم که من به دلایلی قادر به خرید نیستم اگه میشه مرامی بهم بدید به کسی نمیدمش :قهقهه: اونام هم گفتن .... ) به همین خاطر هزینش شد یه هفته وقت گذاشتن تا استفاده رایگان از کتابخونه.

هدفم از این حرف ها این بود که ببینید نمیشه امنیت مطلق ایجاد کرد اونم واسه برنامه های تولیدی ما ، از طرفی کاربرای ما هم توی این سطح نیستن که بیان دل و روده برنامه رو بریزن بیرون.
بهترین راه استفاده از این روش های درون پرداخت است حالا چه بازار چه اینگه خودتون پیاده کنید.
جدیدن سیستم اشتراک بازار هم وارد شده که خیلی خوبه به راحتی میشه جلوی این چیزا رو گرفت مثلا اشتراک های کوتاه مدت میفروشید .

poorman
دوشنبه 12 خرداد 1393, 20:56 عصر
خیلی ممنون سعید جان

درسته اینو میدونم که نمیشه امنیت مطلق ایجاد کرد، منم میخواستم فقط کار رو سخت تر کنم

چون واقعا خنده داره سایت هست شما APK رو آپلود میکنی، به صورت آنلاین فایل دیکامپایل شده رو مثل باقلوا تحویلت میده

کاربر که مسلما نمیخواد بیاد دل و روده برنامه منو بریزه به هم، من ترسم از امثال خودمونه :لبخند:

دوستان زحمت میکشن حاصل 3-4 ماه مارو به باد میدن

حالا منم فعلا کارم با همین تنظیمات پیش فرض راه افتاده، امیدوارم فقط توی گوشی ها مشکل ساز نباشه

slr560
دوشنبه 12 خرداد 1393, 21:46 عصر
دوستان یه سوال
مثلا ما داریم واسه یه جایی مث دانشگاه برنامه مینویسیم که دیتابیسش خیلی امنیتی هست
از برنامه درخواست ها رو به وب سرویس میدیم و وبسرویس بهمون جواب میده.
حالا اگه یکی بیاد این وسط برنامه رو کدهاشو دربیاره و دیکامپایل کنه به محتوای اون درخواست هایی که میره به وبسرویس دسترسی پیدا میکنه
و دیگه هیچی دیگه :لبخند: . خودش درخواست میفرسته به وب سرویس و ....
اینجور سیستم ها رو باید چیکار کرد؟ باید وبسرویس رو تقویت کرد یا برنامه؟ یا همین progurd کافیه واسه کد ها؟

abbasalim
دوشنبه 12 خرداد 1393, 21:51 عصر
خیلی ممنون سعید جان

درسته اینو میدونم که نمیشه امنیت مطلق ایجاد کرد، منم میخواستم فقط کار رو سخت تر کنم

چون واقعا خنده داره سایت هست شما APK رو آپلود میکنی، به صورت آنلاین فایل دیکامپایل شده رو مثل باقلوا تحویلت میده

کاربر که مسلما نمیخواد بیاد دل و روده برنامه منو بریزه به هم، من ترسم از امثال خودمونه :لبخند:

دوستان زحمت میکشن حاصل 3-4 ماه مارو به باد میدن

حالا منم فعلا کارم با همین تنظیمات پیش فرض راه افتاده، امیدوارم فقط توی گوشی ها مشکل ساز نباشه

من با تنظیمات پیش فرض پروگارد یه برنامه رو کامپیال کردم مثل اینکه رو سرعت اتصال به اینترنت تاثیر داره و سرعت کمتر میشه ولی درکل زیاد تاثیری نداشت

rubiks.kde
دوشنبه 12 خرداد 1393, 22:24 عصر
خیلی ممنون سعید جان

درسته اینو میدونم که نمیشه امنیت مطلق ایجاد کرد، منم میخواستم فقط کار رو سخت تر کنم

چون واقعا خنده داره سایت هست شما APK رو آپلود میکنی، به صورت آنلاین فایل دیکامپایل شده رو مثل باقلوا تحویلت میده

کاربر که مسلما نمیخواد بیاد دل و روده برنامه منو بریزه به هم، من ترسم از امثال خودمونه :لبخند:


دوستان زحمت میکشن حاصل 3-4 ماه مارو به باد میدن

حالا منم فعلا کارم با همین تنظیمات پیش فرض راه افتاده، امیدوارم فقط توی گوشی ها مشکل ساز نباشه

ترسی نداشته باش از امثال خودمون ، :لبخند:



دوستان یه سوال
مثلا ما داریم واسه یه جایی مث دانشگاه برنامه مینویسیم که دیتابیسش خیلی امنیتی هست
از برنامه درخواست ها رو به وب سرویس میدیم و وبسرویس بهمون جواب میده.
حالا اگه یکی بیاد این وسط برنامه رو کدهاشو دربیاره و دیکامپایل کنه به محتوای اون درخواست هایی که میره به وبسرویس دسترسی پیدا میکنه
و دیگه هیچی دیگه :لبخند:
. خودش درخواست میفرسته به وب سرویس و ....
اینجور سیستم ها رو باید چیکار کرد؟ باید وبسرویس رو تقویت کرد یا برنامه؟ یا همین progurd کافیه واسه کد ها؟

این جور برنامه ها رو نباید به همین راحتی نوشت حتما باید موارد امنیتی رو رعایت کرد.
اولا اتصالات امن باشه
داده ها رمز شده رد و بدل شوند.
ادرس وب سرویس ها رمز شده باشه یا در زمان اجرا تولید بشن.
کد مبهم سازی بشه تا ردیابی عمکرد کد نامفهوم باشه.
دیتابیس لوکال رمز بشه.

وخیلی مورد دیگه که میتونه ابتکاری بشه.

shahin bahari
سه شنبه 13 خرداد 1393, 00:28 صبح
اگه توی پروژت شما View های کاستم شده داری که در xml استفاده کردی حتما باید مشخص کنی که این کلاسها تغییر نکنه.یا اسم اکتیویتی ها (چون پروگارد تنها روی .java اعمال میشه و اگه مثلا اسم اکتیویتی تغییر کنه توی مانیفست خطا میده) ؛ یا اگه از تابع های native استفاده میکنید باز باید مانع از تغییرش بشید.
این مورد رو بیشتر توضیح میدید؟! تنظیمات پیش فرض خودش این مورد رو رعایت میکنه یا باید دستی گفت بهش؟! بعضی جاها واقعا ویو کاستوم نیازه!


اولا اتصالات امن باشه
منظورتون اینه که از Https استفاده کنیم یا داده ها رو دستی خودمون با RSA رمز گزاری کنیم؟!

rubiks.kde
سه شنبه 13 خرداد 1393, 01:06 صبح
این مورد رو بیشتر توضیح میدید؟! تنظیمات پیش فرض خودش این مورد رو رعایت میکنه یا باید دستی گفت بهش؟! بعضی جاها واقعا ویو کاستوم نیازه!


منظورتون اینه که از Https استفاده کنیم یا داده ها رو دستی خودمون با RSA رمز گزاری کنیم؟!

مورد اول : گاهی لازمه شما یک view رو کاستم کنید حالا به هر دلیلی و وقتی ازش استفاده میکنید (توی xml) به این صورت ادرس میدید مثلا com.ec.myview حالا این کلاس در صورتی که اسمش تغییر کنه مشکل ساز میشه و در زمان اجرا خطا میده.
حالت پیش فرض تا حدودی ولی برای اینکه اطمینان حاصل کنید میتونید خودتون دستی وارد کنید.

مورد دوم : اره میشه استفاده کرد ولی من بیشتر منظورم روی رمزگزاری دستی در طرفین بود.

من خودم بیشتر از این اسکریپت استفاده میکنم.بیشتر موارد رو لحاظ کردم

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
-ignorewarnings
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable,*Annotation*,Signature



-keepattributes *Annotation*


-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider


-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}


-keep class ir.adad.NoProguard
-keep class * extends ir.adad.NoProguard { *; }


-keepclasseswithmembernames class * {
native <methods>;
}


-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}


-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}


-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}


-keepclassmembers class * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}


-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}


-keepclassmembers class **.R$* {
public static <fields>;
}




# -- Action Bar Sherlock --
# from http://actionbarsherlock.com/faq.html


-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }


# -- Nine Old Androids --
# same configs as ABS from http://actionbarsherlock.com/faq.html just changed package


-keep class com.nineoldandroids.** { *; }
-keep interface com.nineoldandroids.** { *; }


# -- ACRA --
# from https://github.com/ACRA/acra/wiki/Proguard


# Required to display line numbers and so in ACRA reports
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable


# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'.
# Note: if you are removing log messages elsewhere in this file then this isn't necessary
-keep class org.acra.ACRA {
*;
}


# keep this around for some enums that ACRA needs
-keep class org.acra.ReportingInteractionMode {
*;
}
-keepnames class org.acra.ReportField {
*;
}


# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter
{
public void addCustomData(java.lang.String,java.lang.String);
public void putCustomData(java.lang.String,java.lang.String);
public void removeCustomData(java.lang.String);
}


# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter
{
public void handleSilentException(java.lang.Throwable);
}




# -- Rest Template --


-keepclassmembers public class org.springframework {
public *;
}


-dontwarn org.springframework.http.**

slr560
دوشنبه 19 خرداد 1393, 00:47 صبح
من خودم بیشتر از این اسکریپت استفاده میکنم.بیشتر موارد رو لحاظ کردم



شرمنده میشه بگی از این اسکریپت چجوری میشه استفاده کرد؟
دقیقا الان این چیکار میکنه؟

cccccccccc
سه شنبه 07 بهمن 1393, 02:45 صبح
up .

androphf
یک شنبه 25 مهر 1395, 17:44 عصر
مورد اول : گاهی لازمه شما یک view رو کاستم کنید حالا به هر دلیلی و وقتی ازش استفاده میکنید (توی xml) به این صورت ادرس میدید مثلا com.ec.myview حالا این کلاس در صورتی که اسمش تغییر کنه مشکل ساز میشه و در زمان اجرا خطا میده.
حالت پیش فرض تا حدودی ولی برای اینکه اطمینان حاصل کنید میتونید خودتون دستی وارد کنید.

مورد دوم : اره میشه استفاده کرد ولی من بیشتر منظورم روی رمزگزاری دستی در طرفین بود.

من خودم بیشتر از این اسکریپت استفاده میکنم.بیشتر موارد رو لحاظ کردم

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
-ignorewarnings
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable,*Annotation*,Signature



-keepattributes *Annotation*


-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider


-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}


-keep class ir.adad.NoProguard
-keep class * extends ir.adad.NoProguard { *; }


-keepclasseswithmembernames class * {
native <methods>;
}


-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}


-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}


-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}


-keepclassmembers class * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}


-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}


-keepclassmembers class **.R$* {
public static <fields>;
}




# -- Action Bar Sherlock --
# from http://actionbarsherlock.com/faq.html


-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }


# -- Nine Old Androids --
# same configs as ABS from http://actionbarsherlock.com/faq.html just changed package


-keep class com.nineoldandroids.** { *; }
-keep interface com.nineoldandroids.** { *; }


# -- ACRA --
# from https://github.com/ACRA/acra/wiki/Proguard


# Required to display line numbers and so in ACRA reports
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable


# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'.
# Note: if you are removing log messages elsewhere in this file then this isn't necessary
-keep class org.acra.ACRA {
*;
}


# keep this around for some enums that ACRA needs
-keep class org.acra.ReportingInteractionMode {
*;
}
-keepnames class org.acra.ReportField {
*;
}


# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter
{
public void addCustomData(java.lang.String,java.lang.String);
public void putCustomData(java.lang.String,java.lang.String);
public void removeCustomData(java.lang.String);
}


# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter
{
public void handleSilentException(java.lang.Throwable);
}




# -- Rest Template --


-keepclassmembers public class org.springframework {
public *;
}


-dontwarn org.springframework.http.**




سلام
اغا از شما متشکرم
واسه من که کار کرد
حجم برنامم رو هم کم کرد

capitan_nemesis
یک شنبه 25 مهر 1395, 22:00 عصر
من که نتونستم استفاده کنم
اررور 404

nasr
سه شنبه 05 بهمن 1395, 10:33 صبح
مورد اول : گاهی لازمه شما یک view رو کاستم کنید حالا به هر دلیلی و وقتی ازش استفاده میکنید (توی xml) به این صورت ادرس میدید مثلا com.ec.myview حالا این کلاس در صورتی که اسمش تغییر کنه مشکل ساز میشه و در زمان اجرا خطا میده.
حالت پیش فرض تا حدودی ولی برای اینکه اطمینان حاصل کنید میتونید خودتون دستی وارد کنید.

مورد دوم : اره میشه استفاده کرد ولی من بیشتر منظورم روی رمزگزاری دستی در طرفین بود.

من خودم بیشتر از این اسکریپت استفاده میکنم.بیشتر موارد رو لحاظ کردم

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
-ignorewarnings
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable,*Annotation*,Signature



-keepattributes *Annotation*


-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider


-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}


-keep class ir.adad.NoProguard
-keep class * extends ir.adad.NoProguard { *; }


-keepclasseswithmembernames class * {
native <methods>;
}


-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}


-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}


-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}


-keepclassmembers class * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}


-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}


-keepclassmembers class **.R$* {
public static <fields>;
}




# -- Action Bar Sherlock --
# from http://actionbarsherlock.com/faq.html


-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }


# -- Nine Old Androids --
# same configs as ABS from http://actionbarsherlock.com/faq.html just changed package


-keep class com.nineoldandroids.** { *; }
-keep interface com.nineoldandroids.** { *; }


# -- ACRA --
# from https://github.com/ACRA/acra/wiki/Proguard


# Required to display line numbers and so in ACRA reports
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable


# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'.
# Note: if you are removing log messages elsewhere in this file then this isn't necessary
-keep class org.acra.ACRA {
*;
}


# keep this around for some enums that ACRA needs
-keep class org.acra.ReportingInteractionMode {
*;
}
-keepnames class org.acra.ReportField {
*;
}


# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter
{
public void addCustomData(java.lang.String,java.lang.String);
public void putCustomData(java.lang.String,java.lang.String);
public void removeCustomData(java.lang.String);
}


# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter
{
public void handleSilentException(java.lang.Throwable);
}




# -- Rest Template --


-keepclassmembers public class org.springframework {
public *;
}


-dontwarn org.springframework.http.**





آقا این اسکریپت را کجا باید استفاده کرد؟
روش استفاده اش چطوریه؟

ممنون