랩톱의 하드 드라이브가 갑자기 작동을 멈추고 지난 2 개월 동안 작업했던 앱의 모든 소스 코드가 손실되었습니다. 내가 가진 것은 친구에게 보낼 때 이메일에 저장된 APK 파일입니다.
이 APK 파일에서 소스 코드를 추출 할 수있는 방법이 있습니까?
답변
간단한 방법 : 온라인 도구 http://www.javadecompilers.com/apk를 사용 하고 apk를 업로드하고 소스 코드를 얻으십시오.
.apk 파일 디코딩 절차, 단계별 방법 :
1 단계:
-
새 폴더를 만들고 디코딩하려는 .apk 파일을 복사하십시오.
-
이제이 .apk 파일의 확장자를 .zip으로 바꾸고 (예 : filename.apk에서 filename.zip으로 이름 바꾸기) 저장하십시오. 이제 classes.dex 파일 등에 액세스 할 수 있습니다.이 단계에서는 드로어 블을 볼 수 있지만 xml 및 java 파일은 볼 수 없으므로 계속하십시오.
2 단계:
-
이제이 .zip 파일을 같은 폴더 (또는 NEW FOLDER)에 추출하십시오.
-
dex2jar를 다운로드 하여 동일한 폴더 (또는 NEW FOLDER)에 추출하십시오.
-
classes.dex 파일을 dex2jar 폴더로 이동하십시오.
-
이제 명령 프롬프트를 열고 디렉토리를 해당 폴더 (또는 NEW FOLDER)로 변경하십시오. 그런 다음
d2j-dex2jar classes.dex
(Mac 터미널 또는 우분투 쓰기./d2j-dex2jar.sh classes.dex
)을 입력하고 Enter를 누르십시오. 이제 같은 폴더에 classes.dex.dex2jar 파일이 있습니다. -
java decompiler를 다운로드 하고 jd-gui를 두 번 클릭하고 열린 파일을 클릭 한 다음 해당 폴더에서 classes.dex.dex2jar 파일을 엽니 다. 이제 클래스 파일을 얻습니다.
-
이 클래스 파일을 모두 src 이름으로 저장하십시오 (jd-gui에서 파일-> 모든 소스 저장을 클릭하십시오). 이 단계에서 Java 소스를 얻지 만 .xml 파일을 여전히 읽을 수 없으므로 계속하십시오.
3 단계 :
이제 다른 새 폴더를여십시오
-
디코딩하려는 .apk 파일을 넣습니다.
-
최신 버전의 apktool AND apktool 설치 창을 다운로드하여 (동일한 링크에서 다운로드 할 수 있음) 동일한 폴더에 배치하십시오.
-
명령 창을 엽니 다
-
이제 같은 명령을 실행 하십시오 (여기
apktool if framework-res.apk
가 없으면 여기에 가져옵니다 ). -
apktool d myApp.apk
여기서 myApp.apk는 디코딩하려는 파일 이름을 나타냅니다.
이제 해당 폴더에 파일 폴더가 있으며 apk의 xml 파일을 쉽게 읽을 수 있습니다.
4 단계 :
단계가 아니며 두 폴더 (이 경우 새 폴더)의 내용을 단일 폴더로 복사하면됩니다.
그리고 소스 코드를 즐기십시오 …
답변
이것은 누군가가 위의 설명에 갇힌 경우를 대비 한 대체 설명입니다. 다음 단계를 수행하십시오.
- 다운로드
apktool.bat
(또는apktool
Linux 용)과apktool_<version>.jar
에서 http://ibotpeaches.github.io/Apktool/install/을 - 위에서 jar 파일의 이름을 바꾸고
apktool.jar
두 파일을 같은 폴더에 넣습니다. - dos 상자 (
cmd.exe
)를 열고 해당 폴더로 변경하십시오. Java 환경이 설치되어 있는지 확인하십시오 (Linux의 경우 필요한 라이브러리에 대한 참고 사항도 확인하십시오) - 스타트:
apktool decode [apk file]
중간 결과 : 리소스 파일,
AndroidManifest.xml
- 선택한 언 패커로 APK 파일 압축 해제
중간 결과 :
classes.dex
- http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
dex2jar-0.0.9.15.zip
에서 다운로드 및 추출 - 드래그 앤 드롭
classes.dex
위에dex2jar.bat
(또는 입력<path_to>\dex2jar.bat classes.dex
DOS 창에서, 리눅스 사용dex2jar.sh
)중간 결과 :
classes_dex2jar.jar
- 압축 풀기는
classes_dex2jar.jar
(사용되는 디 컴파일러에 따라 선택 될 수 있음) - 클래스 파일을 디 컴파일합니다 (예 : JD-GUI 또는 DJ Decompiler 사용 )
결과 : 소스 코드
참고 : 타사 패키지를 디 컴파일 할 수 없습니다. 이 안내서는 APK 파일에서만 개인 소스 코드를 복구하기위한 것입니다. 마지막으로 결과 코드가 난독 화 될 가능성이 높습니다
답변
APK
파일 을 디 컴파일 할 수 있지만 큰 문제가 발생할 수 있습니다 .
작성한 코드를 반환하지 않습니다. 대신 임의의 이름이 주어진 변수와 임의의 이름이 주어진 함수와 함께 컴파일러가 인라인 된 모든 것을 반환합니다. 다시 컴파일하는 것보다 코드를 디 컴파일하고 복원하는 데 시간이 훨씬 더 걸릴 수 있습니다.
슬프게도, 이와 같은 것들이 많은 프로젝트를 죽였습니다.
앞으로 CVS , SVN 및 git 등과 같은 버전 제어 시스템을 배우는 것이 좋습니다 .
그리고 그것을 백업하는 방법.
답변
Play 스토어 에는 APK (시스템 응용 프로그램도)를 디 컴파일하고 스마트 폰에서 바로 소스 코드를 볼 수 있는 새로운 응용 프로그램도 있습니다. 파일을 SD 카드에 저장하여 컴퓨터에서도 볼 수 있습니다. 루트 나 다른 것이 필요하지 않습니다.
그냥 설치하고 즐기십시오. 이것이 앱을 디 컴파일하는 가장 쉬운 방법이라고 생각합니다.
답변
apktool 은 가장 좋은 방법입니다. XML을 저장했지만 솔직히 .java 코드에서 어떻게 작동하는지 모르겠습니다.
귀하가 유일한 코더 인 경우에도 코드 저장소를 사용하는 것이 좋습니다. 내 프로젝트에 Project Locker 를 사용 하고 있습니다. 그것은 당신에게 무료 svn 및 git repos를 제공합니다.
답변
이 두 기사의 사용을 결합하는 방법에 대해 설명 apktool
하고 dex2jar
취할 APK
파일을 빌드하고 실행할 수있는 이클립스 프로젝트를 만듭니다.
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html
http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
기본적으로 당신 :
apktool
APK에서 리소스 파일을 가져 오기 위해 사용dex2jar
Eclipse가 원하는 형식으로 클래스를 포함하는 jar 파일을 얻는 데 사용하십시오 .- 자원 파일 및 새 jar 파일을 가리키는 Eclipse 프로젝트 작성
- zip 유틸리티로 jar 파일을 열고 기존 자원을 삭제하십시오.
JDGui
소스 파일 을 보려면 jar 파일을여십시오.- 필요한 소스 코드를 가져 와서
JDGui
Eclipse 내부의 클래스에 넣고 수정하십시오. - jar 파일에서 해당 클래스를 삭제하십시오 (따라서 동일한 클래스가 여러 번 정의되어 있지 않습니다)
- 그것을 실행하십시오.
답변
apktool이 작동합니다. 소스 코드를 추출하기 위해 키 저장소를 알 필요조차 없습니다 (약간 무섭습니다). 주요 단점은 소스가 Java 대신 Smali 형식으로 표시된다는 것입니다. icon 및 main.xml과 같은 다른 파일은 완벽하게 잘 나오므로 적어도 복구 할 가치가 있습니다. 궁극적으로 Java 코드를 처음부터 다시 작성해야합니다.
여기서 apktool을 찾을 수 있습니다 . apktool과 적절한 도우미 (Windows, Linux 또는 Mac OS 용)를 다운로드하기 만하면됩니다. 7-zip과 같은 도구를 사용하여 포장을 푸는 것이 좋습니다.