분명 며칠전까지만 해도 아주 잘 되던 유니티 Apk빌드가 갑자기 말썽을 일으켰습니다.


Git branch를 잘못 따라간 것도 아니었고... 분명 빌드 설정이나 셋팅에 관해선 아~~무것도 만진 것이 없었는게 갑자기 말이에요.


제가 했던 진짜 수많은 삽질은 좀 뒤로 하고, 문제 해결에 도움이 되었던 결정적인 방향들만 기록해둡니다.







일단 발단은 이렇습니다. 잘 되던 유니티 빌드가 안 되고, 로그를 추적해 보니..





CommandInvokationFailure: Unable to merge android manifests. 

C:/Program Files/Java/jdk1.8.0_221\bin\java.exe -Xmx4096M -Dcom.android.sdkmanager.toolsdir="C:\Users\user\AppData\Local\Android\sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -


stderr[

Error: [Temp\StagingArea\AndroidManifest-main.xml:4, C:\Project\01.Client\Temp\StagingArea\android-libraries\AndroidPlugin\AndroidManifest.xml:16] Trying to merge incompatible /manifest/application/activity[@name=kr.co.d.MainActivity] element:

  <activity

--    @android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"

--    @android:hardwareAccelerated="false"

--    @android:label="@string/app_name"

  <activity

++    @android:name="kr.coid.MainActivity">

++    <intent-filter>

++        <action

]

stdout[

[Temp\StagingArea\AndroidManifest-main.xml:18, C:\Project\CotrasHybrid\01.Client\Temp\StagingArea\android-libraries\AndroidPlugin\AndroidManifest.xml:29] Skipping identical /manifest/application/receiver[@name=kr.co.netblue.cotrashybrid.BootBroadcastReceiver] element.

]

exit code: 1




Unable to merge android manifests.


안드로이드 쪽에서 빌드하며 Manifest.xml 충돌이 일어난 듯 합니다. 그런데 딱히 json쪽에서 파싱한다거나 따로 건든 적도 없고 했는데..

저 "@android:name=" 부분이 중복이 되었다 판단해서 해당 구문을 삭제했습니다. (진짜 희한한건 아무도 이 Manifest를 만진 사람이 없다는 건데..)


어쨌든, Manifest 충돌을 해결하고 SDK 버전을 조정한 뒤에, Gradle 빌드에 성공했으나.. apk파일이 깨져서 나옵니다. 디바이스에서 파싱을 못 해요.



그래서 다시 Internal 빌드로 눈길을 돌립니다. 사실 이제것 Gradle 빌드를 쓰지 않았었거든요. 유니티 버전을 19로 올리면 Gradle 빌드밖에

안 된다고는 하는데... ㅠㅠ 잘 모르겠습니다 일단은..


Manifest 병합에는 일단 성공을 했고, 두 번째 문제를 마주쳤습니다.






CommandInvokationFailure: Failed to align APK.

C:\Users\user\AppData\Local\Android\sdk\build-tools\29.0.2\zipalign.exe 4 "C:\Project\CotrasHybrid\01.Client\Temp/StagingArea\Package_unaligned.apk" "C:\Project\CotrasHybrid\01.Client\Temp/StagingArea\Package.apk"


stderr[

Unable to open 'C:\Project\CotrasHybrid\01.Client\Temp/StagingArea\Package_unaligned.apk' as zip archive

]

stdout[


]

exit code: 1



Failed to align APK.


찾아보니 Unalign된 apk 둘을 최종적으로 align하게 만드는 과정에서... 빌드 에러가 난 것 같아요


그런데 이를 특정하기 전에 저 오류코드는 실로 너무너무너무너무 많은 사람들이 겪던 이슈라 해결방법이 각자 다 달랐어요. 일단 기본적으로


1. sdk Manager로 sdk 재설치, tool 복구

2. jdk 버전 다운그레이드 (1.7까지)

3. Keystore 새로 생성 혹은 삭제

4. targetAPILevel, minAPILevel 설정


정말 당연히 sdk나 안드로이드 api 버전을 잘못 타게팅해서 생긴 오류는 아니었으니, 위는 전혀 도움이 안 되었습니다.


그러다 스택오버플로에서 한참을 헤엄치다 발견한 한 줄기 빛.......



Unalign된 apk파일이 2GB가 넘어가면 ziparchive툴이 동작하지 않는다는 이슈가 있답니다. 엥? 설마?

하지만 sdk 버그 릴리즈 항목을 찾아봐도 이미 1.7 업데이트 이전에 수정이 된 항목이기도 하던데.. 하면서 지푸라기 잡는 심정으로 부랴부랴

리소스 크기를 줄여서 다시 빌드를 해봅니다. 딱 2GB 아래로만 떨굴 심산으로.





ㅋㅋ..ㅋㅋㅋ.. 성공.. 했네요 apk도 정상적으로 뽑히고, 빌드도 됩니다.


아마 최근에 대량의 리소스들이 추가되면서 Asset용량이 비정상적으로 불어난 것 같은데


어차피 이 리소스들, 동적할당이 아니라 전부 패키지에 포함이 되는 구조에요. 사실 앱이 2GB 이상 넘어가는것 자체가 말이 안 되는 일이기도 합니다.


요 다음 몇주간은 리소스 리팩토링으로 지새겠군요. 일단 빌드는 되니까 다행이기도 하고....... ㅠㅠㅠ흑흑흑..



+ Recent posts