APKTOOL을 이용해 디컴파일이나 재컴파일 시 프레임워크 관련 에러가 뜨는 경우가 있다.

id:2를 가진 패키지의 프레임워크 리소스를 찾을 수 없단다... 뭘까???

더보기

Can't find framework resources for package of id:2. You must install proper framework files, see project website for more info.

 ID 넘버는 애플리케이션의 pkgid와 상응하며 1~30까지 사용 가능함. 어떤 제조사의 기기를 사용하느냐에 따라 id 값이 상이함.


1. Framework파일이란?

Android 앱은 Android OS에서 제공하는 코드와 리소스를 활용하는데 이를 Framework (resources)라고 한다. 

Apktool을 이용해서 Android 앱을 디컴파일하거나 재컴파일할때 이런 framework 파일을 사용하는데 일반적인 앱의 경우 AOSP(Android Open Source Project) 프레임워크를 사용하며 다음 경로에 1.apk로 저장된다.

1.apk는 따로 다운받을 필요없으며, apktool 사용 시 자동으로 다운로드 된다. 

[사용자 경로]\AppData\Local\apktool\framework\1.apk

* 단, 오래된 apktool을 사용하거나 apktool을 사용한지 오래된 경우 다음 명령어를 사용하거나 해당 위치에 접근하여 직접 파일을 지워주고 실행하면 된다.

apktool empty-framework-dir

 

하지만 삼성, LG 등의 폰에 처음부터 빌트인되어 있는 앱(메모, 카메라, 인터넷 등)들을 디컴파일하거나 재컴파일할 때 처음에 언급한것과 같은 에러가 뜬다. 2.apk는 어디서 구하는 것일까??

 

2. Framework 파일 가져오기

대부분 기기의 /system/framework 폴더에 프레임워크 파일이 위치하며, 보통 resources.apk, res.apk, framework.apk 등의 이름으로 저장되어 있다. 

해당 위치에 원하는 파일이 없는 경우, /data/system-framework, /system/app, /system/priv-app 등의 경로에 숨어있는 경우도 있으니 확인하면 된다.

 

내가 테스트한 LG 핸드폰의 경우 /system/framework/lge-res/lge-res.apk이름으로 저장되어 있었다. 

adb pull 명령어를 사용해 해당 apk를 로컬 컴퓨터로 가져와 다음 경로에 위치시키면 된다. 

adb pull /system/framework/lge-res/lge-res.apk [사용자 경로]\AppData\Local\apktool\framework\2.apk

//apk 파일명의 경우 에러에서 표기된 id와 동일하게 저장하면 된다. 

 

3. APKTOOL 사용

올바른 위치에 2.apk가 저장된 것을 확인한 후 다시 apktool을 사용하면 문제없이 디컴파일하거나 재컴파일 할 수 있을것이다!!

 

https://ibotpeaches.github.io/Apktool/documentation/

 

Apktool - Documentation

Introduction Basic First lets take a lesson into apk files. Apks are nothing more than a zip file containing resources and assembled java code. If you were to simply unzip an apk like so, you would be left with files such as classes.dex and resources.arsc.

ibotpeaches.github.io

 

+ Recent posts