본문 바로가기
[Developer]/Android

Android Gradle Plugin 2.2.0 사용시 native파일 Strip task추가

by 반가운 해피빈이 2016. 9. 23.


최근들어 Android Studio의 사용량이 안드로이드 개발자들 사이에서 부쩍 늘어났다.

그래서 나도 개인적으로나 업무적으로나 eclipse를 놓아주고 Android Studio로 갈아탄지 6개월은 넘은 듯 하다.


잘 사용하고 있었고, 별 문제없었는데..(사실은 문제 많았지만.. 버그패치 잘 받던 중이라고 해두자.=_=)



특별히 내 프로젝트 안에는 특별한 이유로 JNI 를 이용한 so파일을 일부 변형하여 사용하고 있었다.


일단은 내가 소유하고 있는 so파일의 현재 형태는 다음과 같다.


1)

그리고 이것을 실험하기 위해 Android Gradle Plugin 2.2.0 미만의 가장 나중 버전인 2.1.3을 먼저 실행해 보았다.


변경은 Project Root의 build.gradle 파일을 수정하면 된다.




이 파일을 다음과 같이 2.1.3으로 설정!



그리고 sync를 수행하면 알아서 재빌드를 진행하고, 진행하면서 gradle task도 기다리면 필요한 것은 추가된다.



Android Gradle Plugin 2.1.3 이하에서의 gradle task는 다음에 보는것처럼 transformNative_libs 관련하여서는 이것이 전부이다.

이름순 sorting이기 때문에 여기에서 보는것이 native library에 대한 task의 전부이다.




당연히 빌드해도 so파일에는 변화가 없고, 실제 실행해도 그렇다.


apk는 zip파일 형식을 따르고 있으므로 복잡하지 않게 그냥 apk파일을 unzip하면 so파일의 형태를 볼 수 있다.




2)

이제 변형된 형태를 관찰하기 위해 Android Gradle Plugin을 2.2.0으로 수정!



당연히 앞과 같이 text를 2.2.0으로 수정 후 sync를 수행하면 된다.



그러면 잠시 후...




위와 같은 그림처럼 없던 transformNative_libsWithStripDebugSymbolForRelease, transformNative_libsWithStripDebugSymbolForDebug와 같은 task가 생성이 된다.


혹시나 생기지 않는 사람이 있다면, 지금 현재 확인한 모듈의 apply plugin이 application이 맞는지 확인해 보아라.


apply plugin: 'com.android.application'



여기까지 진행했다면 이제 마지막 단계, 우리의 so파일을 확인해 볼 단계이다.


앞에서처럼 apk파일을 unzip하고 armeabi에서 so파일을 헥사에디터로 열어보면(난 HxD이용함)



위에서 보는 것처럼 strip이 되었다.



이름에서 유추해보건대 so에 있는 Debug Symbol들이 있을텐데, 그것을 비롯하여 불필요한 binary를 정리해버리는 것 같다.



여튼 이와 같이 된 상황을 모른다면 적잖게 당황할 수 있으니, 당황하지 말고 이전 상황을 원한다면 2.1.3을.


여전히 2.2.0을 원한다면..(JDK 8을 이용할 수 있으므로!?) so파일에 변형을 가하고 싶다면 내가 아는 방법으로는 불가능한것 같다.



task의 overwrite도 허용하지 않는 듯 하다..;;;




댓글0