trouble writing output: Too many methods

dependencies

안드로이드 프로젝트를 빌드할 때 메소드 갯수가 많은 경우 아래와 같은 에러를 내며 빌드가 되지 않는 경우가 있다.

Android Dex: [IAP] trouble writing output: Too many methods: 77667; max is 65536. By package:
Android Dex: [IAP] 26 android
Android Dex: [IAP] 83 android.accessibilityservice
Android Dex: [IAP] 661 android.accounts
....

일단 에러의 원인은 Dalvik에서 실행하기 위해서는 앱이 65536 개를 초과하는 메소드를 가져서는 안되기 때문이다. 보통은 만날 일이 없는 에러일테다. 하지만, 에러가 났다면 어떻게 해야할까? 해결책은 링크를 참조하면 된다. 간단히 요약하면 리팩토링을 통해 메소드 갯수를 줄이라는 것이다.

그런데, 제공받은 라이브러리 때문에 나는 경우라면? 임의로 수정할 수도 없는 노릇이다. 다만, 안드로이드 단말에서 런타임시에 제공되는 (일명) 시스템 라이브러리라면, 라이브러리를 참조하는 scope를 바꾸어 빌드를 하지 않도록 설정 해 위 에러를 이를 피해갈 수 있다. 먼저, 인텔리제이의 도움말 – Dependency 탭의 Scope항목을 살펴보자.

  • Compile : The dependency is included in the classpath for your sources and test sources at the compilation and run phases.
  • Test : The dependency is included in the classpath only for your test sources at the compilation and run phases.
  • Runtime : The dependency is included in the classpath for your sources and test sources but only at the run phase.
  • Provided : For your sources, the dependency is included in the classpath only at the compilation phase. This is useful when there is a container (e.g. a web container of an application server) that provides the corresponding dependency at runtime.

위에 써 있듯이 스코프를 Provided로 하면 런타임시에 컨테이너에서 제공한다고 생각하여 apk 안에 포함하여 빌드 하지않고 컴파일 시에 참조만 한다. 이를 통해 빌드하는 도중에 나는 위 에러는 피할 수 있을 것이다. 다만, 이는 모든 경우에 해당하는 것은 아니다.

Hex values for decimal percentages

hex values are used in HTML, to decimal values

dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
hex 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
per 0 0 1 1 2 2 2 3 3 4 4 4 5 5 5 6
dec 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
hex 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
per 6 7 7 7 8 8 9 9 9 10 10 11 11 11 12 12
dec 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
hex 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
per 13 13 13 14 14 15 15 15 16 16 16 17 17 18 18 18
dec 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
hex 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
per 19 19 20 20 20 21 21 22 22 22 23 23 24 24 24 25
dec 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
hex 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
per 25 25 26 26 27 27 27 28 28 29 29 29 30 30 31 31
dec 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
hex 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
per 31 32 32 33 33 33 34 34 35 35 35 36 36 36 37 37
dec 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
hex 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
per 38 38 38 39 39 40 40 40 41 41 42 42 42 43 43 44
dec 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
hex 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f
per 44 44 45 45 45 46 46 47 47 47 48 48 49 49 49 50
dec 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
hex 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f
per 50 51 51 51 52 52 53 53 53 54 54 55 55 55 56 56
dec 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
hex 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f
per 56 57 57 58 58 58 59 59 60 60 60 61 61 62 62 62
dec 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
hex a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af
per 63 63 64 64 64 65 65 65 66 66 67 67 67 68 68 69
dec 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
hex b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf
per 69 69 70 70 71 71 71 72 72 73 73 73 74 74 75 75
dec 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
hex c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf
per 75 76 76 76 77 77 78 78 78 79 79 80 80 80 81 81
dec 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
hex d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df
per 82 82 82 83 83 84 84 84 85 85 85 86 86 87 87 87
dec 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
hex e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef
per 88 88 89 89 89 90 90 91 91 91 92 92 93 93 93 94
dec 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
hex f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff
per 94 95 95 95 96 96 96 97 97 98 98 98 99 99 100 100