Unity3D 안드로이드 플러그인 JAR 파일 프로가드로 난독화하기

 일반 안드로이드 어플에 사용하는 JAR 파일을 프로가드로 난독화 적용을 해봤었습니다. 이번에는 유니티3D 안드로이드 플러인에 난독화를 위한 프로가드 적용해보는 것을 정리하겠습니다. 지난번에 정리했던 중국 바이두의 Duoku 플랫폼 SDK 플러그인을 베이스로 정리합니다. 나머지 91 플랫폼 SDK, GameNoll, UCGame 플러그인들도 같은 방법으로 진행하면됩니다.

 그리고 아래의 내용은 안드로이드 JAR 플러그인을 만들어 유니티3D에서 빌드되는 환경을 위한 방식입니다. 그래서 플러그인 JAR 파일만 프로가드를 적용하고 있는 것이고요. 이클립스가 갑이되어 유니티3D 안드로이드 프로젝트를 빌드하는 환경에서는 아마도 UnityPlayerActivity 관련 프로가드 이슈가 있을 듯 하네요.

 지난번 안드로이드 JAR를 프로가드 적용했던 pro 설정파일을 기반으로 진행합니다. 해당 파일을 로딩 후 그림과 같이 기존 내용을 편집해줍니다. 특히 밑에 Library 부분은 기존보다 2개의 파일을 더 추가해야합니다. 유니티3D 관련 작업인만큼 classes.jar 파일과 바이두 Duoku SDK JAR 파일인 DkPlatformSdk.jar를 추가해줍니다. 추가하지 않으면 can't find superclass or interface 에러가 발생합니다.

-libraryjars 'C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar'
-libraryjars UnityDuokuTest\Assets\Plugins\Android\DkPlatformSdk.jar

 직접 수정시엔 위와 같습니다.

 더 진행하기에 앞서 유니티3D와 안드로이드가 통신하는 부분 즉 JNI 관련된 자바 소스 부분은 난독화에서 제외시켜줘야 합니다. 왜냐면 C#쪽의 JNI 호출 부분 스트링은 난독화가 적용이 안되기 때문인거죠.

! getMethodID("DuokuInit_U", "()V") FAILED!
JNI: Unable to find method id for 'DuokuInit_U'

(Filename: ./Runtime/ExportGenerated/AndroidManaged/UnityEngineDebug.cpp Line: 54)

 제대로 적용되지 않으면 함수가 없어지는등의 이슈로 실행시 위와 같은 메서드를 못 찾는 문제가 발생할 수 있습니다.

 Shrinking 부분입니다.

 Comments와 Class 부분이 바이두 Duoku 작업한 플러그인 패키지명으로 변경된 것이 다르고 Extends/implements class는 com.unity3d.player.UnityPlayerActivity 로 추가해줍니다. Class members에 추가한 메소드 규칙은 제가 그동안 중국 플러그인 작업할 때 유니티에서 안드로이드 통신간 모두 이름 뒤에 _U를 해놔서 저렇게 설정해줬습니다.

 이런식으로 다 _U가 붙어있죠.

# Baidu Duoku Shrinking
-keepclasseswithmembers public class com.wwforever.plugindk.MainActivity extends com.unity3d.player.UnityPlayerActivity {
    public void *_U(...);
}

 직접 추가시 위와 같습니다.

# Baidu Duoku Obfuscation
-keepclasseswithmembers,allowshrinking public class com.wwforever.plugindk.MainActivity extends com.unity3d.player.UnityPlayerActivity {
    public void *_U(...);
}

 난독화 부분입니다. 위와 설명은 같습니다.

 결과를 보겠습니다. 먼저 프로가드 적용 전 바이두 Duoku 플러그인을 디컴파일 한 화면입니다.

 프로가드로 난독화가 된 후의 플러그인을 디컴파일한 화면입니다.

 jar 파일을 단순 압축 해제했을 때 화면입니다. 오른쪽이 프로가드 적용된 겁니다.

 이건 JAR 파일 용량 비교입니다. 역시 오른쪽이 프로가드 적용된 JAR 파일입니다.

 유니티3D 안드로이드 중국 바이두 플러그인에 프로가드를 적용해서 난독화 및 최적화를 해봤습니다. 꼭 중국 마켓 플러그인이 아니더라도 이런식으로 다른 안드로이드 플러그인을 적용하면 될 듯 하네요.

댓글

이 블로그의 인기 게시물

CMake Windows에 설치하기

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

크로스 스레드 작업이 잘못되었습니다. xxx 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다