مشکل استفاده از proguard ( حل شد)
با سلام
بنده در پروژه ها از کدی که استاد در قسمت آموزش مربوطه برای proguard استفاده میکنم ولی فایده زیادی نداره و تغییر زیادی نمیکنه
از همون روش و کدهایی که استاد استفاده میکنند منم استفاده کردم ولی نمیشه
جالب اینه که پروژه های دانلودی سایت به خوبی کار میکنند ولی پروژه هایی که خودم میسازم هیچ تغییری نمیکنه
ضمنا لازم به ذکر هست که عمل obfuscate بدون هیچ خطایی انجام میشه ولی نه تغییر زیادی در کدها صورت میگیره
و اینکه بعد از اتمام کار پوشه proguard ایجاد نمیشه
============================================
بالاخره تونستم با کلی ور رفتن کاری کنم که proguard بررسی بشه
-کدهای زیر رو هم علاوه بر موارد پیش فرض در کد proguard قرار دادم
keep class com.jeremyfeinstein.slidingmenu.lib.** { *; }
-keep interface com.jeremyfeinstein.slidingmenu.lib.**{ *; }
-keep class com.android.vending.billing
-dontwarn android.support.**
-keep class android.support.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
ولی اینبار خطای زیر رو دریافت میکنم کسی میتونه بگه چطور باید حلش کرد
[2014-04-22 17:42:21 - SmsJook] Proguard returned with error code 1. See console
[2014-04-22 17:42:21 - SmsJook] Warning: com.jeremyfeinstein.slidingmenu.lib.SlidingMenu: can't find referenced method 'int getLayerType()' in class android.view.View
[2014-04-22 17:42:21 - SmsJook] Warning: com.jeremyfeinstein.slidingmenu.lib.SlidingMenu$2: can't find referenced method 'void setLayerType(int,android.graphics.Paint)' in class android.view.View
[2014-04-22 17:42:21 - SmsJook] Warning: MYpackageName.ActivityList$4: can't find referenced class android.content.ClipboardManager
[2014-04-22 17:42:21 - SmsJook] Warning: MYpackageName.ActivityList$4: can't find referenced class android.content.ClipData
[2014-04-22 17:42:21 - SmsJook] Warning: MYpackageName.ActivityList$4: can't find referenced class android.content.ClipData
[2014-04-22 17:42:21 - SmsJook] Warning: MYpackageName.ActivityList$4: can't find referenced class android.content.ClipboardManager
[2014-04-22 17:42:21 - SmsJook] Warning: MYpackageName.ActivityList$4: can't find referenced class android.content.ClipboardManager
[2014-04-22 17:42:21 - SmsJook] Warning: MYpackageName.ActivityList$4: can't find referenced class android.content.ClipData
[2014-04-22 17:42:21 - SmsJook] Warning: there were 6 unresolved references to classes or interfaces.
[2014-04-22 17:42:21 - SmsJook] You may need to specify additional library jars (using '-libraryjars').
[2014-04-22 17:42:21 - SmsJook] Warning: there were 2 unresolved references to program class members.
[2014-04-22 17:42:21 - SmsJook] Your input classes appear to be inconsistent.
[2014-04-22 17:42:21 - SmsJook] You may need to recompile them and try again.
[2014-04-22 17:42:21 - SmsJook] Alternatively, you may have to specify the option
[2014-04-22 17:42:21 - SmsJook] '-dontskipnonpubliclibraryclassmembers'.
[2014-04-22 17:42:21 - SmsJook] java.io.IOException: Please correct the above warnings first.
[2014-04-22 17:42:21 - SmsJook] at proguard.Initializer.execute(Initializer.java:321)
[2014-04-22 17:42:21 - SmsJook] at proguard.ProGuard.initialize(ProGuard.java:211)
[2014-04-22 17:42:21 - SmsJook] at proguard.ProGuard.execute(ProGuard.java:86)
[2014-04-22 17:42:21 - SmsJook] at proguard.ProGuard.main(ProGuard.java:492)
من به این صورت و اون روشی که شما گفتید امتحان کردم حتی نارگت رو هم 15 قرار دادم ولی نشدذ ! جرا آخه !؟اینم کدم توی projext.properties
target=android-8
proguard.config=proguard.cfg
android.library.reference.1=../SlidingMenuLibrary
-keep class com.jeremyfeinstein.slidingmenu.lib.**{*;}
-keep interface com.jeremyfeinstein.slidingmenu.lib.**{*;}
من قبلا توی این فکر بودم و از استاد در خواست کمک کرددم که ایشون این جور جواب دادند(تنظیمات جزئی و ریز proguard به دلیل ماهیت متفاوت هر کد قابل بیان نیست.)من دقیقت نفهمیدم این سوال در مورد چی بود و زیاد هم در این مورد اطلاعات ندارم
همین اطلاعات کم هم خودش خوبه و به درد می خوره
ایم مطالب به درد کسی می خوره که زیاد اطلاعات در این باره نداشته باشه:)
شاید تاکنون این سوال به ذهن شما رسیده باشد که آیا هنگامی که یک فایل apk از پروژه اندروید خود می سازید و آن را به سایت های فروش می دهید، آیا کاربران می توانند کدهای آن را از فایل apk استخراج نمایند.باید بگویم که پاسخ کلی به این سوال، بله می باشد، اما مسلما گوگل و سایر توسعه دهنده های اندروید هم بیکار نمی نشینند و راهکارهایی را برای سختتر شدن مهندسی معکوس (reverse engineering) کدها، ارائه می دهند. یکی از این راهکارها، استفاده از ProGuard است.
تا به اینجا حدس می زنم که از شنیدن این موضوع که ممکن است کدهایی که شما نوشته اید را دیگران ببینند، نگران شده اید. راستش را بخواهید، نمی دانم که یک فرد باید چه انگیزه ای برای این کار داشته باشد، امروزه اینترنت همچون بهشتی برای برنامه نویسان است و می توانند انواع عملیات های برنامه نویسی مورد نظرشان را در مباحث آموزشی بیابند، بنابراین به نظر می آید که تنها انگیزه ای که باقی می ماند، یافتن بخشی از کدها است که از آن بتوان سوء استفاده کرد و در سیستم برنامه، اختلال ایجاد کرد. خود من تنها یک بار از مهندسی معکوس کدهای فایل apk استفاده کرده ام و آن هم برای اطمینان از امکان پذیر بودن دیدن کدهای برنامه بود. بنابراین شما باید برای امنیت بیشتر برنامه اندروید خود، از راهکارهای امنیتی استفاده کنید. یکی از این راهکارها، استفاده از ProGuard است. خوشبختانه اگر از جدیدترین برنامه های مربوط به توسعه اندروید استفاده می کنید (مثلا یک نسخه جدید از ADT Bundle)، آنگاه نیازی به نصب هیچ برنامه جدیدی نیست و خود برنامه مربوط به توسعه، حاوی ProGuard می باشد. بنابراین با فرض اینکه برنامه توسعه شما، زیاد قدیمی نباشد، مراحل فعال کردن ProGuard برای پروژه اندروید را می گویم.
بر روی فایل project.properties:
کدهای فایل project.properties ، در ابتدا به صورت زیر می باشد :
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-19
همان طور که مشاهده می کنید، اکثر کدهای آن، به صورت توضیح (comment) می باشند. به این خط از کدها توجه کنید :
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
این خط از کدها را باید از حالت توضیح (comment) دربیاوریم، یعنی علامت # را از ابتدای آن، حذف کنیم. بنابراین کدها، به صورت زیر در می آید :
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
تغییرات را ذخیره کرده و فایل را ببندید. اکنون به همان روش عادی که از پروژه اندروید، یک فایل apk می ساخته اید، این بار نیز همان عملیات را انجام بدهید (بر روی نام پروژه اندروید، کلیک سمت راست کرده و سپس گزینه Export را انتخاب می کنیم و سایر گزینه ها را برای ساخت فایل apk ، طی می کنیم.اگر در حین ساخت فایل apk ، دقت کنید، در پوشه بندی پروژه اندروید، یک پوشه (folder) جدید با نام proguard ساخته می شود (به طور خودکار).
از وجود همین فولدر می توان مطمئن شد که ProGuard برای برنامه اندروید، فعال شده است.
درست زیاد...نبود ولی بهتر از هیچیه:)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .