Android App(apk) 서명하기(apk signing with jarsigner,keytool)

앱 코드 좀 고치고 리패키징 후 아무생각 없이 설치하다 보니 에러가 발생합니다.

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

apktool로 리패키징한 경우 자동으로 서명되지 않기 때문에 설치가 불가능해집니다. 보편적인 IDE는 자동으로 dev key로 서명을 해주지만, 아닌 경우에는 직접 서명이 필요합니다.

검색하면 많이 나오는 내용이지만, 작성해두면 나중에 보기 편하니 글로 작성해둡니다.

keytool을 이용하여 키생성

#> keytool -genkey -alias hwul -keyalg RSA -validity 20000 -keystore hwul.keystore
키 저장소 비밀번호 입력:
새 비밀번호 다시 입력:

대충 옵션을 보면..

-genkey : -keyalg : 알고리즘 -alias : 별칭 -keystore : 생성할 keystore 파일명

앱 서명하기

#> jarsigner -verbose -keystore ./hwul.keystore 1527037443_com.noname.apk hwul
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/HWUL.SF
   adding: META-INF/HWUL.RSA
  signing: AndroidManifest.xml
  signing: assets/common.js

jarsigner로 아까만든 keystore 파일을 이용해 앱에 서명해줍니다. 이제 서명 관련 에러가 발생하지 않습니다.

#> adb install 1527037443_com.noname.apk
1527037443_com.noname.apk: 1 file pushed. 0.5 MB/s (4477427 bytes in 8.781s)
WARNING: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix.
WARNING: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix.
    pkg: /data/local/tmp/1527037443_com.noname.apk
Success