안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

자신이 만든 안드로이드 앱을 여러 스마트폰에서 테스트하기 위해서는 APK 설치 파일이 필요합니다. 안드로이드 스튜디오에서 APK 를 만드는 방법은 두 가지 입니다. 배포와 개발용으로 나눌 수 있는데, 배포용은 서명 key 까지 포함시켜야 합니다. 그렇다고 복잡한 것은 아닙니다. 오늘은 안드로이드 스튜디오에서 배포를 위한 APK 파일을 만드는 방법에 대해 알아 보겠습니다.

APK 파일을 만들기 위한 시작은 상단에 [Build] > [Generate Signed APK]메뉴를 클릭하는 것입니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

Generate Signed APK팝업창에는 Key 입력과 비밀번호를 입력해야 합니다. Key 는 계속해서 재사용이 가능하기 때문에 처음에만 만들어 줍니다. 팝업창에서 Create New버튼을 눌러 Key 가 저장될 폴더를 지정합니다

새로운 키 생성 팝업창인 [New Key Store]에서 1, 2, 3 번은 무조건 입력해야 하는 필수 영역입니다. 참고로 Validity (year) 은 키가 유지되는 기간을 말합니다. 기본은 25년 입니다

1번에 해당하는 Key store path 에 폴더와 파일명을 지정하면 자동으로 key 파일인 jks 확장자가 붙어서 주소가 만들어 집니다. 비밀번호를 넣고 CertificateFirst and Last Name에 값을 입력합니다

New Key Store 팝업창을 닫고 Next 버튼을 누르면 다시 한번 더 비밀번호 입력창이 뜹니다. 이전 창에서 입력했던 비밀번호를 반복해서 넣어 줍니다

마지막으로 APK 파일이 만들어 질 폴더와 Build Type을 지정하고 Finish버튼을 클릭합니다

잠시 후 APK 파일 생성을 성공적으로 마쳤다는 메시지가 뜨게 됩니다. 보통 APK 파일은 프로젝트 폴더 root 에 생성됩니다. 바로 확인하고 싶다면 메시지 창에서 [Show in Explorer] 버튼을 클릭합니다

탐색기 창이 열리고 생성된 APK 파일을 확인할 수 있습니다. 파일명은 변경해도 상관없습니다. 이상으로 안드로이드 스튜디오에서 배포를 위한 APK 파일을 생성하는 방법에 대해 알아 보았습니다

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

만들어진 앱(apk 파일)을 가져와서 실습을 진행하겠습니다.

디컴파일(decompile) : apk 파일이 어떤 소스들로 구성되어 있는지 확인하는 과정

리패키징(repackaging) : 소스를 수정하고서 다시 apk 파일로 만들어내는 과정

이미 만들어진 apk 파일의 소스를 수정하려면 디컴파일을 먼저 진행해야 합니다.

수정이 완료되면 다시 앱으로 사용할 수 있도록 리패키징 과정을 통해 apk로 만들어 줍니다.

만들어진 apk 파일을 사용하여 진행하겠습니다.

디컴파일과 리패키징 작업을 진행하기 위해서 apktool을 사용할 것이며,

소스 코드를 보기 위해서 jadx-gui를 사용합니다.

그리고 소스 코드를 수정하기 위해서 eclipse를 사용하였습니다.


1. apktool 준비

구글에 apktool을 검색하면 Github 페이지로 다운로드 링크가 있습니다.

ibotpeaches.github.io/Apktool/install/

Apktool - How to Install

Install Instructions Quick Check Is at least Java 1.8 installed? Does executing java -version on command line / command prompt return 1.8 or greater? If not, please install Java 8+ and make it the default. (Java 7 will also work at this time) Windows: Down

ibotpeaches.github.io

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

wrapper script를 우클릭 한 다음 "다른 이름으로 링크 저장"을 통해 apktool.bat 파일을 다운로드합니다.

이후 "find newest here"를 클릭하여 apktool___.jar 파일을 다운로드합니다.

bitbucket.org/iBotPeaches/apktool/downloads/

iBotPeaches / Apktool / Downloads — Bitbucket

bitbucket.org

매뉴얼에서는 다운로드한 2개의 파일이 c://windows 안에 있는 것을 권장합니다.

그래서 파일을 옮겨주고서 진행합니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

cmd에서 apktool 명령어를 입력하면 다음과 같이 나타나는 것을 확인할 수 있습니다.


2. jadx-gui 준비

구글에서 jadx를 검색하면 Github 링크로 파일이 제공되어 있는 것을 확인할 수 있습니다.

github.com/skylot/jadx/releases/tag/v1.1.0

Release v1.1.0 · skylot/jadx

1.1.0 (2019-12-07) Features initial deboxing implementation (#717) (fd7d08c) cli: add options for change log level (#735) (bc7a748) gui: add class links for AndroidManifest.xml and other minor fix...

github.com

페이지의 맨 아래로 내려가면 파일을 제공하는 것을 볼 수 있으며

gui가 적힌 용량이 큰 zip 파일을 원하는 위치에 다운로드하셔서 압축 풀기를 진행합니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
jadx-gui 다운로드

3. apk 파일 디컴파일

cmd 화면에서 진행합니다.

apk 파일이 있는 경로를 확인하시고 진행하시기 바랍니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

cmd에서 cd 명령어를 이용해 디컴파일된 파일을 저장할 경로로 이동합니다.

그리고apktool d [디컴파일할 apk파일이 있는 경로]명령어로 디컴파일을 진행합니다.

cd C:\Users\PCB\Desktop\decom_repack

apktool d C:\Users\PCB\Desktop\decom_repack\app-release.apk
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
디컴파일 과정

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

디컴파일이 완료되면 지정한 경로에 폴더가 생성됩니다.

폴더 안에는 smali 폴더가 존재합니다.

소스 코드를 수정할 때 이 폴더에 있는 파일로 수정할 겁니다.


4. jadx-gui로 소스 코드 보기

jadx-gui.dex 파일을 열어볼 수 있는 기능이 있습니다.

apk 파일은 다르게 보면 zip 파일이기 때문에 압축 풀기가 가능합니다.

압축 풀기를 진행하게 되면 폴더 안에 classes.dex 파일이 존재하는 것을 확인할 수 있습니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

파일을 얻어 내었으면 jadx-gui를 실행시키고, classes.dex 파일을 열어서 소스 코드를 확인합니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
classes.dex 파일 열기
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
수정할 소스 코드 위치 확인

수정하고자 하는 소스 코드가 어디 경로에 위치하는지 확인합니다.

그림에 표시한 "___ University" 문장을 수정하겠습니다.


5. eclipse를 통한 소스 코드 수정

위에서도 한 번 언급했지만, 디컴파일 한 폴더에는 smali 폴더가 있습니다.

그 폴더 안에는 jadx-gui로 확인했던 소스 코드 경로와 일치하는 경로로 파일들이 존재합니다.

java 문서 편집기를 실행한 후, 그 경로에 있는 파일을 열어서 수정 작업을 진행합니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
수정할 파일 찾기
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
소스 변경 진행

수정 작업을 진행한 후 저장하여 수정된 값이 유지되도록 합니다.


6. 수정한 파일 리패키징

수정 작업을 완료하면 다시 apk로 만들기 위해 리패키징 작업을 진행합니다.

apktool b [리패키징할 파일이 있는 경로] -o [새로지정할apk이름].apk

apktool b C:\Users\PCB\Desktop\decom_repack\app-release -o repack_num1.apk

리패키징할 파일이 있는 경로는 "apktool.yml" 이 존재하는 폴더까지 잡아주시면 됩니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

리패키징 명령을 실행한 폴더 위치에 apk 파일이 생성된 것을 확인할 수 있습니다.


7. 서명 만들기

apk 파일을 리패키징했지만 해당 apk의 서명을 등록하여야 합니다.

서명을 등록하지 않으면 디바이스에 앱을 설치할 수 없게 됩니다.

서명을 만드는 작업을 진행하겠습니다.

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048
안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

명령어가 실행되면 서명을 만들기 위한 질문을 시작합니다.

1. 비밀번호 등록

2. 비밀번호 재확인

3. 이름

4. 인증 계층 구조 이름

5. 인증 조직 이름

6. 지역

7. 포괄 지역

8. 지역 코드(KO)

9. 등록 완료? y = 수락 n = 거절

서명이 저장되었다는(Storing) 문구가 나오면 완성된 것입니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

서명을 진행한 폴더에서 서명한 키가 생성된 것을 확인할 수 있습니다.


8. apk 파일에 서명하기

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore [리패키징한apk(경로가 다르면 경로까지 입력] alias_name

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore [리패키징한apk] alias_name

apk 파일에 서명하는 명령어입니다.

리패키징한 apk파일은 명령을 수행하는 폴더에 같이 존재한다면 apk 파일 이름만 적고,

다른 폴더에 존재한다면 그 경로까지 적어야 합니다.

alias_name은 처음 서명을 만들 때 사용했던 별칭으로

서명을 만들 때 값을 다르게 했다면 그 값을 따라가야 합니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

서명 작업이 시작되면 "Enter Passphrase for keystore: " 문구가 등장합니다.

서명을 만드셨을 때 기록한 비밀번호를 입력하시면 됩니다.

비밀번호가 일치하면 서명이 진행되며 마지막에 signed. 문구가 나옵니다.

안드로이드 스튜디오 apk 수정 - andeuloideu seutyudio apk sujeong

이제 apk 파일을 앱에 설치할 수 있게 되었습니다.

-끝-