ในส่วนนี้ผู้เขียนขออธิบายวิธีการใช้งานมันกับเจ้า Eclipse นะครับ ยังไม่เคยได้ลอง Android Studio สักที ว่าจะลองๆ แล้วก็ไม่ได้ลอง
โดยปกติแล้วถ้าเรา New project ใหม่ขึ้นมา เราจะสังเกตเห็นว่า มันมักจะมีไฟล์ตัวนึงโผล่ขึ้นมาด้วย เจ้านั่นก็คือ proguard-project.txt นั่นเองครับ
ผู้เขียนขอทำการ rename ไฟล์มันให้เป็น *.cfg หน่อยนะครับ จะได้รู้ว่ามันเปนไฟล์ Configure
ใครหาบรรทัดนั้นไม่เจอก็ copy ไปนะครับ
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.cfg
จากนั้นผู้เขียนขอทำการ copy ค่า Default ของ Configure ของเจ้า proguard มาแปะเลยละกัน
หน้าตาเป็นแบบนี้
-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.preference.Preference
-keep public class com.android.vending.billing.IInAppBillingService
-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);
}
-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);
}
ทำไปแปะใน file proguard.cfg เราซะ
จากนั้นก็ทำการ build เลย!!
เมื่อได้ apk แล้ว ตัวนี้หละครับมันถูก Obfuscated มาเรียบร้อยละ ถ้าอยากจะรู้ว่าหน้าตามันเป็นยังไงก็ลองใช้ dex2Jar ดูนะครับ หน้าตามันออกมาก็ประมาณนี้
สังเกตว่าคลาส MainActivity ชื่อยังเหมือนเดิม แต่ข้างในโค๊ตมันมีตัวแปล a ไรก็ไม่รู้ แถมมี class นึงชื่อ a โผล่มาอีกต่างหาก ใช่แล้วครับ เจ้า proguard มันเปลี่ยนชื่อไปให้เรา
จริงๆแล้วผู้เขียนได้ทำการใส่ class ที่เป็น Utility เข้าไปอีกกระปินึง แต่มันเห็นว่าเราไม่ใช้มันเลยดันลบทิ้งหมดเลย
อ้าา ใช่แล้วครับ ข้อนี่เป็นข้อระวังเลยล่ะในการใช้งานเจ้านี่ เพราะบางครั้งมันก็ดันไปลบในสิ่งที่เราไม่ได้อยากให้ลบด้วย เพราะฉะนั้น เราอยากจะให้อะไรอยู่เราก็ต้อง "keep" มันเอไว้นะครับ อยากรู้ว่า command ในการ keep ไว้ทำไง เลื่อนไปดูด้านบนได้เลยครับ ^__^ ข้อนี่เป็นสิ่งที่ต้องระวังนะครับขอย้ำ โดยเฉพาะในการใช้ Library ต่างๆ เราก็ต้องดูด้วยว่ามันกระทบหรือเปล่า พูดง่ายๆคือต้อง test ทุกครั้งหลังจากกการใช้มันน่ะครับ
ข้อดีของมันอีกอย่างคือเมื่อมันลบ class เราทิ้งไปหลายๆ classes มันทำให้ ขนาดของ *.dex ลดลง หรือ ขนาดของเจ้าไฟล์ *.apk นี่เองที่ลดลง
สิ่งสุดท้ายที่ขาดไม่ได้เลยคือ เรารู้ครับว่าคลาสที่โดนเปลี่ยนชื่อไปก่อนหน้านั้นมันชื่อว่าอะไร วิธีการไม่ยากครับ หลังจากเรา build ด้วย proguard เสร็จ มันจะปรากฏมี Folder นึง โผล่ขึ้นมาในโปรเจกเรา point ที่สำคัญก็คือ เค้าตัวไฟล์ที่ชื่อว่า mapping.txt เนี่ยแหละครับ จะเป็นตัวบอกว่า class ไหนถูกเปลี่ยนชื่อเป็นอะไร
เมื่อได้ apk แล้ว ตัวนี้หละครับมันถูก Obfuscated มาเรียบร้อยละ ถ้าอยากจะรู้ว่าหน้าตามันเป็นยังไงก็ลองใช้ dex2Jar ดูนะครับ หน้าตามันออกมาก็ประมาณนี้
สังเกตว่าคลาส MainActivity ชื่อยังเหมือนเดิม แต่ข้างในโค๊ตมันมีตัวแปล a ไรก็ไม่รู้ แถมมี class นึงชื่อ a โผล่มาอีกต่างหาก ใช่แล้วครับ เจ้า proguard มันเปลี่ยนชื่อไปให้เรา
จริงๆแล้วผู้เขียนได้ทำการใส่ class ที่เป็น Utility เข้าไปอีกกระปินึง แต่มันเห็นว่าเราไม่ใช้มันเลยดันลบทิ้งหมดเลย
อ้าา ใช่แล้วครับ ข้อนี่เป็นข้อระวังเลยล่ะในการใช้งานเจ้านี่ เพราะบางครั้งมันก็ดันไปลบในสิ่งที่เราไม่ได้อยากให้ลบด้วย เพราะฉะนั้น เราอยากจะให้อะไรอยู่เราก็ต้อง "keep" มันเอไว้นะครับ อยากรู้ว่า command ในการ keep ไว้ทำไง เลื่อนไปดูด้านบนได้เลยครับ ^__^ ข้อนี่เป็นสิ่งที่ต้องระวังนะครับขอย้ำ โดยเฉพาะในการใช้ Library ต่างๆ เราก็ต้องดูด้วยว่ามันกระทบหรือเปล่า พูดง่ายๆคือต้อง test ทุกครั้งหลังจากกการใช้มันน่ะครับ
ข้อดีของมันอีกอย่างคือเมื่อมันลบ class เราทิ้งไปหลายๆ classes มันทำให้ ขนาดของ *.dex ลดลง หรือ ขนาดของเจ้าไฟล์ *.apk นี่เองที่ลดลง
สิ่งสุดท้ายที่ขาดไม่ได้เลยคือ เรารู้ครับว่าคลาสที่โดนเปลี่ยนชื่อไปก่อนหน้านั้นมันชื่อว่าอะไร วิธีการไม่ยากครับ หลังจากเรา build ด้วย proguard เสร็จ มันจะปรากฏมี Folder นึง โผล่ขึ้นมาในโปรเจกเรา point ที่สำคัญก็คือ เค้าตัวไฟล์ที่ชื่อว่า mapping.txt เนี่ยแหละครับ จะเป็นตัวบอกว่า class ไหนถูกเปลี่ยนชื่อเป็นอะไร
หน้าตาของเจ้า mapping file
เป็นไงครับ ทีนี้ก็ใช้กันเปนแล้วสินะครับ ยังไงก็อย่าลืม test กันก่อนด้วยล่ะว่าโปรแกรมเรายังทำงานถูกต้องมั๊ยย อย่าลืมนะครับ!
เป็นไงครับ ทีนี้ก็ใช้กันเปนแล้วสินะครับ ยังไงก็อย่าลืม test กันก่อนด้วยล่ะว่าโปรแกรมเรายังทำงานถูกต้องมั๊ยย อย่าลืมนะครับ!
แจ่มเลยครับ
ตอบลบ