티스토리 뷰
[Apktool/Android] No resource found that matches the given name: attr
또야 2022. 9. 21. 21:16오류 현상
apktool로 apk 파일의 디컴파일을 수행하고
리빌드(리패키징)를 시도하자 아주 많은 오류가 발생하였다.
No resource found that matches the given name: attr 'android:textColor'
와 같은
res/values/style.xml 파일에 있는
모든 요소들을 찾을 수 없다는 오류들과 함께,
W: W/ziparchive(10152): Unable to open 'C:\Users\ Ǿ \AppData\Local\apktool\framework\1.apk': Illegal byte sequence
W: W/zipro (10152): Error opening archive C:\Users\ Ǿ \AppData\Local\apktool\framework\1.apk: I/O error
W: C:\Android-InsecureBankv2-master\InsecureBankv2\app\app-release\res\values\styles.xml:4:
error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.
W:
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): ...
와 같은 오류도 발생하였다.
총 오류는 1000줄 넘게 발생하였으며..
한 가지 유형의 오류가 발생한 것이 아니므로
하나를 해결하면 다른 하나의 오류가 딸려오는 방식이라
13시간 정도 시간을 투자했고 심적으로 매우 지쳤다.
하루가 지나서 포스팅을 하게 되었지만
어제의 감정은 다시 느끼고 싶지 않지만
왠지 과거에도 여러 번 느꼈던 것 같은 느낌이...
못하겠다..🤬🤬🤬🤬 싶던 도중
오후 11시 경 햄버거를 하나 먹고 나니
갑자기 눈에 보이는 자료들과 문제점이 기회가 되어
순조롭게 해결할 수 있었다.
모두들... 쉬면서... 하시기를..........😂
추론
style.xml 파일의 요소를 찾을 수 없다는 부분에서,
res 디렉터리의 리소스 파일들에 문제가 있다는 점을 알았고,
디컴파일 대상 파일과 빌드 대상 파일의 리소스가 일치하지 않을 수 있다는 생각을 하였다.
또한, 최신 업데이트가 3년 전이 마지막인
인시큐어뱅크가 노후화됨에 따라,
apktool의 버전 호환성 문제도 있을 수 있다고 추측했다.
해결 과정
1.
apktool의 버전을 2.6에서 2.4.0으로 다운그레이드 하였다.
2.
https://developer.android.com/studio/command-line/aapt2?hl=ko 를 참고하여,
앱의 리소스를 컴파일하고 패키징하는 데 사용하는 빌드 도구인 AAPT의 버전 문제를 의심하였고,
2020년 12월 문서를 기준으로 AAPT2 이전 버전이 중단되었으므로,
apktool의 일부 버전에서는 AAPT1을 포함한 기준으로 디컴파일/빌드를 할 수도 있다고 여겼다.
gradle 3.0.0 이상에서는 AAPT2가 자동 적용된다고 하나,
터미널 환경에서는 명령줄로 재지정이 가능하다고 한다.
그러므로 빌드 시 apktool -f b apkfilename.apk --use-aapt2 명령어를 이용하면 된다.
3.
상기 No resource found that matches the given name:
과 같은 오류로 보아,
리소스 파일을 제외하고 디컴파일/빌드를 하는 방안을 모색하게 되었다.
apktool -f d apkfilename.apk -r를 사용하여 디컴파일하고 빌드하면
리소스 정보가 담긴 resoureces.arsc는 디컴파일되지 않는다.
4.
res 디렉터리의 xml 파일 등 리소스의 구성이 달라지는 경우가 있다면,
원래 개발하던 파일의 디렉터리를 덮어쓰기하여 일치시켜줄 수도 있으나,
실제 개발 중/배포 예정인 앱에서는 버전 관리가 확실하지 않다면
4번 방법은 안정성이 낮아 비추천한다.
5.
앱이 생성될 당시와 빌드할 당시
targetSdkVersion 등의 sdk 버전 설정이
일치하지 않을 때도 오류가 발생하는 경우가 있다고 하니
최초 생성 파일과 비교해보시는 것도
지푸라기를 잡는 심정에서 할 수 있는 행위라 하겠다.
💭 필자의 경우에는 1, 2, 3, 4번을 모두 종합 수행하여 해결되었으나,
리소스의 변경이 불가피할 경우에는
apktool이 아닌 다른 툴을 이용하는 방법도 고려해볼 수 있다.
마무리
apktool로 디컴파일과 빌드를 수행하는 과정에서
한 가지도 아닌 여러 유형의 오류가 발생하여
apk 파일도 다시 설치해보고, gradle 관련 파일과
sdk 버전, 에뮬레이터 버전 등을 변경해보았지만 잘 해결되지 않아 답답했다.
그리고 국내에는 자료가 전무했고, 외국 자료를 많이 찾아보았지만
그마저도 해결되는 솔루션이 없었다.
아무쪼록 동일한 오류를 겪고 계신 분들께..
앱이 생성된 시기와 사용하려 하는 도구들의 버전 호환성을 잘 고려하시라는 말씀과 함께
이 포스팅을 보고 적용해보는 분들이
문제를 잘 해결하셨으면 좋겠다는 마음이다.
삽질 시간과 공부량은 비례한다는 생각으로
나와 여러분에게 심심한 위로를 해본다. ❤️🩹
'기타 > 오류 보관함' 카테고리의 다른 글
- Thanks for comming.
- 오늘은
- 명이 방문했어요
- 어제는
- 명이 방문했어요