안드로이드 스투디오에 내장된 JRE에 인증서 추가하기

안드로이드 스투디오에 내장된 JRE에 인증서를 추가해보자.

$ keytool -import -noprompt -trustcacerts -alias aliasname -file "<인증서 파일>" -keystore "<안드로이드 스투디오 설치 경로>\Android Studio\jre\jre\lib\security\cacerts" -storepass changeit

gradlew 실행 시 SSLHandshakeException

안드로이드 스투디오는 gradle을 이용해 프로젝트를 빌드할 수 있다. 명령창에서도 프로젝트 빌드를 할 수 있도록 gradlew.bat 파일(gradle의 wrapper)도 제공한다. 프로젝트의 루트(‘/’)에서 gradlew.bat를 실행하면 첫 실행 시 Gradle 사이트에서 gradle 바이너리를 받아 적당한 위치에 저장하고 설치한 후 안드로이드 프로젝트를 빌드할 수 있도록 해준다.

그런데, 아래와 같은 에러와 함께 설치부터 안되는 경우가 있다.

>gradlew
Downloading https://services.gradle.org/distributions/gradle-3.3-all.zip

Exception in thread "main" java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        ...
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        ...
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        ...
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        ...

물론 근본적인 문제 해결도 좋지만, 난 그저 명령창에서 gradle 실행하고 싶을 뿐인데..

원인은 https 프로토콜을 이용해 gradle 바이너리를 받기 때문인데 gradle 바이너리를 받은 url을 수정할 수 있다. 업무 환경 상 수정이 쉽지 않다면, SSLHandshake가 필요없는 htttp를 통해 받으면 된다. gradle-wrapper.properties 파일을 열어 distributionUrl을 https에서 http로 수정하자.

distributionUrl=http\://services.gradle.org/distributions/gradle-3.3-all.zip

안드로이드 스투디오의 코드 스타일 공유하기

안드로이드 스투디오의 코드 스타일을 공유하는 방법이 없는 줄 알았는데, 찾아보니 이미 제공되고 있다. 코드 스타일을 정하는 곳에서 export할 수 있었다면 더 좋았겠지만, 기존의 방법도 깔끔하다. (다시 한 번, 검색 엔진 뒤지지 말고 공식 메뉴얼을 봐야 한다는 걸 느낀다..)

File > Export Settings …로 현재 안드로이드 스투디오의 설정 값들을 모두 export할 수 있는데, 여기서 “Code Style”만 지정하면 된다.

androidstudio_export_code_convention

저장할 곳을 지정하면 settings.jar 파일이 떨어진다. 이를 공유하면 된다.

import는 File > Import Settings.. 메뉴를 통해 가능하며, import하고 싶은 항목을 골라서 import할 수도 있다. 그 후, File > Settings… > Editor > Code Style에 가면 Scheme 중에 방금 import한 항목이 있을 것이다.

참고

안드로이드 스투디오 속도 개선

이 글은 안드로이드 스투디오 1.0 때 작성된 것으로 2016.4월 현재 2.1까지 나온 지금은 처음만큼 느리지 않다. 그러므로, 속도 개선에 큰 효과가 없을지 모른다.


안드로이드 공식 IDE인 인텔리제이 기반의 안드로이드 스투디오. 그런데, 느리다! 특히, 에디터에서 코드를 수정 중에 뭘 하는지 커서를 움직일 때마다 버벅거린다.

에디터

이를 해결하기 위해 몇 가지 사용자들 사이에 거론되는 팁들이 몇개 있는데 inspection 옵션을 끄라던가,

androidstudio-inspection2

다음의 그림처럼 ‘Power Save Mode’를 체크한 후 코드를 작성하다가 필요할 때 다시 체크 해제하라는 팁이다.

androidstudio-inspection

그런데, 최근에 스택오버플로우에서 vmoptions을 수정해보라는 가이드를 보았다. 원래 이클립스에서도 최대 힙 메모리를 수정하는 것은 잘 알려진 팁이지만, 안드로이드 스투디오에서는 별로 효과를 보지 못했다. 속는 셈치고 이번에 1.2.2에서 다시 한 번 해보았는데 효과가 있는 것 같다. (1.3부터는 64bit의 경우, 기본값이 1280m로 수정이 필요 없다.)

일단 vmoptions 파일은 안드로이드 스투디오 설치 폴더 내의 /bin 폴더 안에 있다. 파일 ‘studio.exe.vmoptions’이거나 비슷한 이름일 것이다.

아래는 수정 전문이다. 이중에 -Xmx에 숫자를 입력하면 된다. 내 경우에는 1.5G를 할당했다.

-Xms128m
-Xmx1536m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=225m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Djna.nosys=true
-Djna.boot.library.path=

-Djna.debug_load=true
-Djna.debug_load.jna=true
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Didea.paths.selector=AndroidStudio1.2
-Didea.platform.prefix=AndroidStudio

-업데이트(2018.10.19)-

안드로이드 스투디오 업데이트 시, 변경된 파일을 체크하고 이 중 일부 파일은 업데이트 중단의 이유가 된다.  studio.exe.vmoptions 파일도 그중 하나다. 이런 이유로 안드로이드 스투디오에서 커스텀 vmoptions를 넣는 메뉴를 ‘Help – Edit custom VM options…’ 추가했다.

위 가이드에서도 메모리 할당 크기만 수정했으므로, 아래와 같이 메모리 크기관련 속성만 선언하면 된다.

# custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html
-Xms2048m
-Xmx4096m

그래들(빌드)

그래들 빌드는 이미 잘 정리된 글들이 있다. 그 것을 여기에 그대로 옮기는 것 보다는 원문의 링크(영문)를 걸어두겠다.

간략하게 요약하면,

  • 그래들 빌드 시 할당되는 힙 메모리 크기 증가
  • 프로젝트에서 사용하는 그래들 빌드의 버전을 2.4로 올리기
  • 참고하는 메이븐 서버의 주소를 mavenCentral()에서 jcenter()로 바꾸기

등이 있다.

그 밖에

에뮬레이터 속도 개선하는 글도 읽어보자.

참고

안드로이드 스투디오의 sign-off-by

Gerrit에서는 누가 무엇을 커밋했는지 추적하기 위해, 명시적으로 sign-off라는 부분에 사람의 이름을 표시하는 기능을 사용하기도 한다. 이 기능을 깃에서 지원하고 있으며 patch의 마지막 줄에 Signed-off-by 부분이 추가된다. 예제 커밋 메시지는 다음과 같다.

initial commit

Signed-off-by: Random J Developer <random@developer.example.org>

이를 사용하기 위해서는 깃에서 commit 시에 -s 파라미터만 붙여주면 된다.

>git commit -s -m "initial commit"

문제는 이 파라미터를 안드로이드 스투디오(정확히는 IDEA)에서 추가할 방법이 없다는 것이다. 커스텀 파라미터도 제공하지 않고, 체크박스를 통해 활성화/비활성화 할 방법도 없다. 아틀라시안(Atlassian) 사의 소스트리(SourceTree) 는 이미 지원하고 있다는데 안드로이드 스투디오에는 2011년부터 일부 IDEA 사용자가 요청하고 있지만 아직 추가되지 않았다.

~/.gitconfig 안에 format.signoff 파라미터를 지정할 수 있다고 하나, 안드로이드 스투디오에는 효과가 없다. 윈도우즈 환경이라면 깃의 commit 명령어인 경우 여기에 -s 파라미터를 추가하는 스크립트를 만들어, 이 배치 파일을 안드로이드 스투디오의 ‘File > Settings > Version Control > Git > Path to Git executable’ 에 배치파일을 지정하면 된다.

androidstudio_git-signoff

배치 파일의 코드는 다음과 같다.

@FOR /f "usebackq tokens=4*" %%i in (`@ECHO %*`) DO @SET other_params=%%j

@IF /i "%4" EQU "commit" (
    git %1 %2=%3 %4 -s %other_params%
) ELSE (
    git %*
)

위 방법은 파라미터들을 변수에 저장하기 때문에 순서를 바꾼다거나, 특정 파라미터만 비교할 수 있는 장점이 있다. 하지만, 단순 치환(replace)로도 ‘commit -s’는 지원할 수 있다.

:파라미터를 변수에 할당한다.
@set command=%*

: 바꾸고 싶은 값을 열거한다.
@set command=%command: commit = commit -s %
@set command=%command: merge = merge --no-commit %


:명령 실행
@git %command%

필요에 따라 사용하도록 하자.

그 밖에

git config의 format.signoff 파라미터는 패치(patch)에 대한 것으로 커밋(commit)에는 적용되지 않는다. 이에 대한 설명은 여기에! 만약, 모든 commit에 signed-by-off 부분을 추가하고 싶다면 GPG(GNU Private guard)에 대한 다른 글 참고하자.

업데이트

안드로이드 스투디오 3.0에 commit 시 signed-off를 달지 선택하는 체크박스가 추가되었다.

참고