APK 파일에서 소스 코드를 얻는 방법이 있습니까? 멈추고 지난 2 개월 동안

랩톱의 하드 드라이브가 갑자기 작동을 멈추고 지난 2 개월 동안 작업했던 앱의 모든 소스 코드가 손실되었습니다. 내가 가진 것은 친구에게 보낼 때 이메일에 저장된 APK 파일입니다.

이 APK 파일에서 소스 코드를 추출 할 수있는 방법이 있습니까?



답변

간단한 방법 : 온라인 도구 http://www.javadecompilers.com/apk를 사용 하고 apk를 업로드하고 소스 코드를 얻으십시오.


.apk 파일 디코딩 절차, 단계별 방법 :

1 단계:

  1. 새 폴더를 만들고 디코딩하려는 .apk 파일을 복사하십시오.

  2. 이제이 .apk 파일의 확장자를 .zip으로 바꾸고 (예 : filename.apk에서 filename.zip으로 이름 바꾸기) 저장하십시오. 이제 classes.dex 파일 등에 액세스 할 수 있습니다.이 단계에서는 드로어 블을 볼 수 있지만 xml 및 java 파일은 볼 수 없으므로 계속하십시오.

2 단계:

  1. 이제이 .zip 파일을 같은 폴더 (또는 NEW FOLDER)에 추출하십시오.

  2. dex2jar를 다운로드 하여 동일한 폴더 (또는 NEW FOLDER)에 추출하십시오.

  3. classes.dex 파일을 dex2jar 폴더로 이동하십시오.

  4. 이제 명령 프롬프트를 열고 디렉토리를 해당 폴더 (또는 NEW FOLDER)로 변경하십시오. 그런 다음 d2j-dex2jar classes.dex(Mac 터미널 또는 우분투 쓰기 ./d2j-dex2jar.sh classes.dex)을 입력하고 Enter를 누르십시오. 이제 같은 폴더에 classes.dex.dex2jar 파일이 있습니다.

  5. java decompiler를 다운로드 하고 jd-gui를 두 번 클릭하고 열린 파일을 클릭 한 다음 해당 폴더에서 classes.dex.dex2jar 파일을 엽니 다. 이제 클래스 파일을 얻습니다.

  6. 이 클래스 파일을 모두 src 이름으로 저장하십시오 (jd-gui에서 파일-> 모든 소스 저장을 클릭하십시오). 이 단계에서 Java 소스를 얻지 만 .xml 파일을 여전히 읽을 수 없으므로 계속하십시오.

3 단계 :

이제 다른 새 폴더를여십시오

  1. 디코딩하려는 .apk 파일을 넣습니다.

  2. 최신 버전의 apktool AND apktool 설치 창을 다운로드하여 (동일한 링크에서 다운로드 할 수 있음) 동일한 폴더에 배치하십시오.

  3. 명령 창을 엽니 다

  4. 이제 같은 명령을 실행 하십시오 (여기apktool if framework-res.apk 가 없으면 여기에 가져옵니다 ).

  5. apktool d myApp.apk 여기서 myApp.apk는 디코딩하려는 파일 이름을 나타냅니다.

이제 해당 폴더에 파일 폴더가 있으며 apk의 xml 파일을 쉽게 읽을 수 있습니다.

4 단계 :

단계가 아니며 두 폴더 (이 경우 새 폴더)의 내용을 단일 폴더로 복사하면됩니다.

그리고 소스 코드를 즐기십시오 …


답변

이것은 누군가가 위의 설명에 갇힌 경우를 대비 한 대체 설명입니다. 다음 단계를 수행하십시오.

  1. 다운로드 apktool.bat(또는 apktoolLinux 용)과 apktool_<version>.jar에서 http://ibotpeaches.github.io/Apktool/install/을
  2. 위에서 jar 파일의 이름을 바꾸고 apktool.jar두 파일을 같은 폴더에 넣습니다.
  3. dos 상자 ( cmd.exe)를 열고 해당 폴더로 변경하십시오. Java 환경이 설치되어 있는지 확인하십시오 (Linux의 경우 필요한 라이브러리에 대한 참고 사항도 확인하십시오)
  4. 스타트: apktool decode [apk file]

    중간 결과 : 리소스 파일,AndroidManifest.xml

  5. 선택한 언 패커로 APK 파일 압축 해제

    중간 결과 :classes.dex

  6. http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=dex2jar-0.0.9.15.zip 에서 다운로드 및 추출
  7. 드래그 앤 드롭 classes.dex위에 dex2jar.bat(또는 입력 <path_to>\dex2jar.bat classes.dexDOS 창에서, 리눅스 사용 dex2jar.sh)

    중간 결과 :classes_dex2jar.jar

  8. 압축 풀기는 classes_dex2jar.jar(사용되는 디 컴파일러에 따라 선택 될 수 있음)
  9. 클래스 파일을 디 컴파일합니다 (예 : JD-GUI 또는 DJ Decompiler 사용 )

    결과 : 소스 코드

참고 : 타사 패키지를 디 컴파일 할 수 없습니다. 이 안내서는 APK 파일에서만 개인 소스 코드를 복구하기위한 것입니다. 마지막으로 결과 코드가 난독 화 될 가능성이 높습니다


답변

APK파일 을 디 컴파일 할 수 있지만 큰 문제가 발생할 수 있습니다 .

작성한 코드를 반환하지 않습니다. 대신 임의의 이름이 주어진 변수와 임의의 이름이 주어진 함수와 함께 컴파일러가 인라인 된 모든 것을 반환합니다. 다시 컴파일하는 것보다 코드를 디 컴파일하고 복원하는 데 시간이 훨씬 더 걸릴 수 있습니다.

슬프게도, 이와 같은 것들이 많은 프로젝트를 죽였습니다.
앞으로 CVS , SVNgit 등과 같은 버전 제어 시스템을 배우는 것이 좋습니다 .

그리고 그것을 백업하는 방법.


답변

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

기본적으로 당신 :

  1. apktoolAPK에서 리소스 파일을 가져 오기 위해 사용
  2. dex2jarEclipse가 원하는 형식으로 클래스를 포함하는 jar 파일을 얻는 데 사용하십시오 .
  3. 자원 파일 및 새 jar 파일을 가리키는 Eclipse 프로젝트 작성
  4. zip 유틸리티로 jar 파일을 열고 기존 자원을 삭제하십시오.
  5. JDGui소스 파일 을 보려면 jar 파일을여십시오.
  6. 필요한 소스 코드를 가져 와서 JDGuiEclipse 내부의 클래스에 넣고 수정하십시오.
  7. jar 파일에서 해당 클래스를 삭제하십시오 (따라서 동일한 클래스가 여러 번 정의되어 있지 않습니다)
  8. 그것을 실행하십시오.

답변

apktool이 작동합니다. 소스 코드를 추출하기 위해 키 저장소를 알 필요조차 없습니다 (약간 무섭습니다). 주요 단점은 소스가 Java 대신 Smali 형식으로 표시된다는 것입니다. icon 및 main.xml과 같은 다른 파일은 완벽하게 잘 나오므로 적어도 복구 할 가치가 있습니다. 궁극적으로 Java 코드를 처음부터 다시 작성해야합니다.

여기서 apktool을 찾을 수 있습니다 . apktool과 적절한 도우미 (Windows, Linux 또는 Mac OS 용)를 다운로드하기 만하면됩니다. 7-zip과 같은 도구를 사용하여 포장을 푸는 것이 좋습니다.