[Android/안드로이드] jarsigner로 서명 시 발생하는 timestamp 관련 경고 해결 방법
요약
JDK에 포함된 jarsigner를 이용해 jar파일 또는 안드로이드 apk파일에 서명하는 경우 발생하는 타임 스탬프관련 경고 메시지를 없애는 방법
증상 및 원인
jarsigner를 이용해 리패키징한 안드로이드 apk파일에 서명하던 도중 아래와 같은 경고 메시지를 발견했다. 서명은 정상적으로 되었기 때문에 무시해도 상관없으나 왠지 찜찜하여 원인과 해결 방법을 알아보았다.
Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date <yyyy-mm-dd> or after future revocation date.
< 발생한 경고 메시지 >
서명 인증서가 만료되면 배포 된 파일을 다시 서명해야 하기 때문에 이런한 문제를 해결하기 위해 재서명이 필요없는 URL 기반 인증 방식인 타임 스탬프를 이용한 서명을 권장하는 것으로 확인된다. 관련 Oracle 문서에는 J2SE 5.0부터 추가 된 기능이라고 나와있으나 기존에 사용하던 JDK 버전(1.7021)에서는 경고 없이 서명이 되었던걸로 보아 이후 버전에서 발생하는 것으로 보인다.
해결 방법
서명 시, -tsa 옵션과 함께 인증 기관 URL을 입력해주면 경고 메시지 없이 서명이 가능하다.
-tsa http://timestamp.digicert.com
< Timestamp를 이용한 서명 결과 >
관련 포스팅
'개발 > Android' 카테고리의 다른 글
안드로이드 아키텍처: MVC (0) | 2021.02.24 |
---|---|
안드로이드 스레드 run()과 start()의 메소드의 차이 (0) | 2017.05.30 |
[Android/안드로이드] 손쉽게 스와이프가 가능한 액션바 탭 만들기 (ViewPager, Fragment) 이용 (0) | 2017.04.25 |
[Android/안드로이드] 무음/방해금지 모드 설정과 해제를 위한 방해금지 설정 변경 권한 얻기 (0) | 2017.04.15 |
[Android/안드로이드] apk파일 assets, res 변경 후 리패키징하기 (0) | 2017.04.15 |
[Linux/리눅스] C/C++ 멀티스레드 환경에서의 수행 시간 측정 방법 (clock_gettime 함수 이용)
요약
다수의 스레드를 사용한 C/C++ 프로그램에서 clock() 함수를 이용했을 때 발생하는 문제점과 clock_gettime() 함수를 이용하여 수행 시간을 정확하게 측정할 수 있는 방법을 설명한다.
clock() 함수를 이용한 시간 측정 방법과 그 문제점
일반적으로 C/C++ 프로그래밍 시, <time.h>에 포함된 clock() 함수를 이용하여 아래와 같은 방식으로 수행 시간을 측정한다.
clock_t begin, end;
begin = clock();
/ *
수행 시간 측정을 원하는 작업
* /
end = clock();
cout << ((end - begin) / CLOCKS_PER_SEC) << endl;
이 방법은 싱글스레드 프로그램에서는 정상적으로 동작하나 멀티스레드 프로그램에서 사용할 경우, 시간 측정이 올바르게 되지 않는 것을 확인할 수 있다. 이는 clock() 함수가 단순히 프로세스에 의해 사용 된 클럭 수를 리턴해주기 때문에 하나의 스레드에서 위의 코드를 이용해 시간을 측정하는 동안 다른 스레드의 동작에 의해 클럭 값이 증가하게 되기 때문이다.
clock_gettime() 함수를 이용한 올바른 시간 측정 방법
정확한 수행 시간을 측정하기 위해서는 <time.h>에 포함된 clock_gettime() 함수를 이용해야 한다. clock_gettime() 함수는 시간을 측정할 시계의 타입을 정의하는 clockid_t와 timespec이라는 구조체를 인자로 갖는다.
- clockid_t : 시계의 타입을 나타내는 인자로써, POSIX에서는 기본적으로 2가지 타입을 제공한다.
CLOCK_REALTIME |
시스템 전역에서 사용되는 실제 시간 (Epoch 기준) |
CLOCK_MONOTONIC |
특정 시점 이후로 흐른 시간 (ex. 부팅 후 시간) |
- timespec : 초와 나노초를 멤버로 갖는 구조체. <time.h>에 정의되어 있음.
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
clock_gettime() 함수는 clockid_t에 입력한 시계를 이용하여 시간을 측정하므로 프로세스에서 사용한 클럭 수를 세는 clock() 함수보다 정확한 수행 시간 측정이 가능하다. 사용 방법은 다음과 같다. clockid_t의 인자로 CLOCK_MONOTONIC 대신 CLOCK_REALTIME을 사용해도 되지만 CLOCK_REALTIME 사용 시, 시간 측정 중에 시스템 시간이 변경될 경우 측정값이 변한다는 문제점이 있다.
clock_gettime(CLOCK_MONOTONIC, &begin);
/ *
수행 시간 측정을 원하는 작업
* /
clock_gettime(CLOCK_MONOTONIC, &end);
cout << (end.tv_sec - begin.tv_sec) + (end.tv_nsec - begin.tv_nsec) / 1000000000.0 << endl;
'개발 > Linux' 카테고리의 다른 글
[Linux/리눅스] 우분투 홈 디렉토리의 사용자 폴더 경로 변경하기 (0) | 2017.04.26 |
---|---|
[Linux/리눅스] 문자열 패턴 검색하기 (grep 명령어) (0) | 2017.04.23 |
[Linux/리눅스] 디스크 용량 및 파일 용량 확인하기 (df, du 명령어) (0) | 2017.04.19 |
[Linux/리눅스] gcc, g++ 컴파일 최적화 방법 (0) | 2017.03.24 |
[Linux/리눅스] 우분투 홈 디렉토리의 사용자 폴더 경로 변경하기
요약
리눅스에서 홈 디렉토리 아래에 위치하는 8개의 사용자 폴더(Desktop, Documents, Downloads, Music, Pictures, Public, Templates, Videos)의 기본 경로를 변경하는 방법에 대해 설명한다.
변경 방법
디렉토리의 경로는 user-dirs.dirs 라는 파일에 저장되어 있다. nano, gedit 등의 에디터를 통해 아래의 파일을 열어준다.
파일을 열어보면 기본 설정은 아래와 같다. 여기서 빨간색으로 밑줄 친 부분을 원하는 경로로 바꿔준 뒤 재부팅 또는 재로그인을 해주면 경로가 변경된 것을 확인할 수 있다.
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
예시
user-dirs.dirs 파일을 열어 문서 디렉토리를 '~/Desktop/문서'로 변경한 결과이다.
기본 문서 폴더의 경로가 '~/Documents'에서 '~/Desktop/문서'로 변경된 것을 확인할 수 있다.
'개발 > Linux' 카테고리의 다른 글
[Linux/리눅스] C/C++ 멀티스레드 환경에서의 수행 시간 측정 방법 (clock_gettime 함수 이용) (1) | 2017.04.27 |
---|---|
[Linux/리눅스] 문자열 패턴 검색하기 (grep 명령어) (0) | 2017.04.23 |
[Linux/리눅스] 디스크 용량 및 파일 용량 확인하기 (df, du 명령어) (0) | 2017.04.19 |
[Linux/리눅스] gcc, g++ 컴파일 최적화 방법 (0) | 2017.03.24 |