How to enable ProGuard obfuscation in Android Studio

บทนำ (Overview)

“ProGuard” คือเครื่องมือนักพัฒนาโปรแกรม ที่ช่วยให้ “Binary” ของเรามีคุณสมบัติดังนี้

  • “Shrink” ช่วยให้ “Class” หรือ “Variable” ที่นักพัฒนาสร้างมา หรือ “Library” อื่น ๆ ทำนำมาร่วมด้วยอยู่ใน “Project” แต่ไม่ได้ใช้งาน จะถูกตัดทิ้งไปโดยไม่รวมอยู่ “Binary”  ดังนั้นทำให้ “Binary” ของเรามีขนาดเล็กลง
  • “Optimize” ในขั้นตอนมานี้ แม้จะเหลือเฉพาะส่วนที่ใช้งาน ก็ยังพอสามารถทำให้โปรแกรมมีขนาดเล็กลง และทำงานได้เร็วอีกด้วย
  • “Obfuscate”ทำการเปลี่ยนชื่อ “Variable” และ “Class” ให้ไม่สื่อความหมาย เช่น “a.bbb” เป็นต้น

อ้างอิง: สามารถศึกษารายละเอียดเพิ่มเติมได้ที่

ขั้นตอน (Steps)

  1. ในโปรแกรม “Android Studio” ให้สร้าง “Project” ใหม่ขึ้นมา
  2. จากนั้นเปลี่ยนมุมมองเป็น “Project” obfus01
  3. จากนั้นไปที่ “File” (/app/build.gradle) แก้ไขในส่วน “minifyEnable” จาก “False” เป็น “True”
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
  4. ในส่วนของ “buildType” อาจเป็นไปได้ทั้ง “debug” หรือ “release” ตัวอย่างของต้องการตั้งค่า เช่น
    buildTypes {
            debug {
                minifyEnabled true
                useProguard true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'),
                        'proguard-rules.pro'
            }
    
            release {
                minifyEnabled true
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
  5. ในการตั้งค่า “Debug” และ “Release” ก็ขึ้นอยู่กับว่าโปรแกรม “Compile” ด้วย “Mode” อะไร ดังนั้นเราก็สามารถเปลี่ยนเป็น “Debug” หรือ “Release” ก็ได้โดยไปที่ “Build จากนั้น Select Build Variant…”
  6. จะปรากฏหน้าต่างด้านล่างซ้ายซึ่งเราสามารถเลือก “Compile” ตามที่เราตั้งค่าไว้
  7. ถ้าเกิดปัญหาสำหรับการ “Obfuscation” ของ “Library” ต่าง ๆ ที่นำมาร่วมใช้งานด้วย ให้ทำการแก้ไขที่ไฟล์ ” proguard-rules.pro” obfus02
  8. จากนั้นเพิ่ม “code” ตามข้างล่างลงไป ตัวอย่างเช่น
     -keepclassmembers class "เพิ่ม package ที่เราจะ obfuscation" {
       public *;
    }
    
  9. สร้างไฟล์ “.apk” โดยไปที่ “Build” และ “Build APK”
  10. ฉะนั้นสามารถเข้าถึงไฟล์ได้ได้ตามภาพ
  11. ทดสอบผลการ “Obfuscate” พบว่าจะมีการ “Rename” ชื่อ “Class” และ “Variable” สามารถติดตามบทความ “Reverse engineering “ได้จากบทความ
  12. จากรูปจะพบว่ามีการ “Renamed” ชื่อตัวแปร และ คลาส

ใส่ความเห็น