Skip to content
isdnetworks
Go back

라이브러리가 권한을 늘렸다

외부 라이브러리를 붙이고 빌드했더니 권한 목록이 길어졌다. 내가 적은 것은 셋인데 실제로는 여덟 개였다.

Table of contents

Open Table of contents

넣지 않은 권한이 있었다

SVN 이력을 보니 앞사람이 광고 SDK 를 붙이며 넣은 것이었다. AndroidManifest.xml<uses-permission> 다섯 줄이 손으로 들어가 있었다. SDK 문서의 목록을 그대로 옮긴 것이고 왜 필요한지는 없었다.

이게 문제인 이유는 설치할 때 목록이 보이기 때문이다. 권한이 많으면 설치를 꺼린다.

하나씩 무엇이 왜 필요한지 봤다. INTERNET 은 광고를 받아야 하니 필요하다. WRITE_EXTERNAL_STORAGE 는 이미지 캐시로 보였다. READ_PHONE_STATEACCESS_FINE_LOCATION 은 문서를 찾으니 기기 식별과 지역 광고용이고 둘 다 선택이었다.

뺄 수 있는 것과 잃는 것

AndroidManifest.xml 에서 그 두 줄을 지웠다. 빼고 돌려 보니 잘 돌고 광고도 나온다. 다만 지역 맞춤은 안 되고 일반 광고만 나온다.

수익 차이를 보려니 비교할 데이터가 없었다. 한쪽으로만 돌려 봤기 때문이다. 일부에만 켜서 비교하는 방법이 있을 것 같은데 아직 모른다. 일단 빼고 나중에 필요하면 넣기로 했다.

대신 왜 뺐는지를 SVN 커밋 메시지에 적었다. 권한 목록을 줄이려고 뺐고 수익 영향은 안 쟀다고 남겼다. 안 적으면 나중에 왜 없는지 묻게 되고, 넣었다가 또 빼는 일이 반복된다.

크기도 늘었다

권한만 는 것이 아니라 APK 크기도 늘었다. JAR 을 열어 보니 우리가 쓰는 배너 말고도 전면 광고와 부가 기능이 같이 들어 있었다.

proguard.cfg 를 켜니 안 쓰는 코드가 빠져 크기가 줄었다. 그런데 실행 중에 ClassNotFoundException 으로 죽었다.

이름으로 찾는 코드가 지워졌다

이유를 찾아보니 이름으로 클래스를 찾는 코드가 있었다. 코드에 이름이 문자열로만 있으면 그건 참조로 안 보이고, 빼는 도구가 안 쓰는 것으로 판단해 지운다.

Class.forName("com.example.Something");

라이브러리 문서에 빼지 말아야 할 목록이 적혀 있어서 그걸 설정에 넣었다. 그 부분은 안 지운다는 표시다.

이걸 직접 알아내기는 어려웠다. 문서에 있으면 적으면 되지만 없으면 깨지는 것을 하나씩 찾아야 한다. 그래서 라이브러리를 붙일 때 어떤 권한이 들어오는지와 안 쓰는 기능을 뺄 수 있는지와 축소할 때 지킬 목록이 있는지 셋을 먼저 보게 됐다.

정리


Share this post on:

Previous Post
성공이라는데 내용이 없었다
Next Post
커밋에 남의 파일이 딸려 갔다