전체 글219 Service Account(JWT)을 활용한 Google Calendar API 사용 이전 Gmail API 포스팅에서는 Sever-side Web Application 기반으로 OAutho2 인증을 통해서 Access token을 받고 Gmail API를 사용하는 방법에 대해서 포스팅하였다. 본 포스팅에서는 Service Account를 기반한 OAuth 2.0 인증을 받고, Access token을 획득하여 Google Calendar API를 호출하는 과정을 설명하고 한다. 본 게시글은 Google OAutho2.0 의 Service account의 내용을 기반으로 설명하였으며, 실제 동작하는 python sample code도 포함되어 있습니다. Server side web application : Gmail API 게시글 [모바일/REST API] - Google Gmail AP.. 2020. 7. 12. Python: 폴더 백업 기능 구현 (7zip 압축, Sample code) 특정 폴더(working_folder)를 일정 시간 간격으로 백업을 해야 기능이 필요해서 python으로 구현한 내용을 공유합니다. 특정 폴더의 백업 기능의 상세 구현 사항은 아래와 같습니다. Working folder의 하위에 모든 파일을 backup 한다. (주기적으로 실행은 crontab 사용) 하드 디스크를 용량을 절약하기 위해서 7zip 파일로 압축한다. (압축 포맷은 효율이 좋은 7 zip 사용) 백업 폴더에서 백업 파일 7zip 파일의 개수는 미리 설정한 최대 개수를 초과하지 않는다. 백업 파일의 최대 개수가 초과하는 경우 오래된 파일부터 삭제한다. 7zip 파일은 비밀 번호 설정한다. 아래 코드는 우분투를 환경에서 동작하는 검증한 code이고, os.system()를 수정하면 windows.. 2020. 7. 9. 우분투에서 7zip command line 사용하기 (p7zip과 7za추천) 7zip 파일은 압축율이 좋아 자주 사용하는 편이고, 개인이나 단체에서도 무료로 사용할 수 있습니다. 7zip에 대한 소개는 공식 홈페이지를 참고 부탁드리며, 추가 설명이 필요 없을 정도로 유명한 압축 툴으로 LZMA 이라는 압축 알고리즘 기반으로 개발되었다는 정보만 이해하면 문제가 없을 것 입니다. 우분투 20.04를 설치하면 notilus FileManager에서 기본적으로 7zip 파일의 압축 및 해제를 지원하기 때문에 사용에는 불편함이 없습니다. 하지만, 개발하고 있는 SW와 프로그램과 7zip을 연동하기 위해서는 터미널 상에서 command line interface를 사용할 수 있어야 합니다. 예를 들어 특정 폴더는 주기적으로 7zip으로 압축하여 백업하는 프로그램을 만드는 경우 sh comm.. 2020. 7. 9. JWT(JSON Web Token) Encoding 방법 (Python sample code) 글을 시작하기 전에 JWT에 대한 이해는 아래 동영상을 확인해주세요. 개념적으로 쉽게 설명이 되어있습니다. JWT에 대한 개념을 듣고 아래 내용을 확인하시면 실무적으로 도움이 될 것 같습니다. 출처: https://www.youtube.com/watch?v=MUUqogMpGiA Gmail REST API는 Service side Web application으로 Access token을 받아 Gmail API를 사용하는 과정을 설명하였고 이 경우에는 API의 권한(scope) 승인을 위해서 계정 사용자의 로그인과 명시적 권한 승인 과정이 필요하였다. JWT (Json Web Token) 방식은 서버-서버 인증 방식으로 웹 로그인 없이 서비스의 인증을 받을 수 있는 방법으로 서버에 공개를 키를 미리 등록하여.. 2020. 7. 8. 우분투 20.04에서 Web 서버 설치 방법 (apache2, tomcat9) 우분투에서 Web 서버 설치하는 방법은 많은 포스팅이 있어, 각각의 개념 보다는 package 설치에 필요한 메모 정도로 활용하고자 한다. 설치 동기는 REST API를 사용하다보면 구글 서버에서 redirect URL을 설정해야 하고 이 경우 http://localhost가 동작을 할 수 있도록 Web server (apache2와 tomcat9)를 설치해야 한다. 1. java 설치 확인 $ java --version openjdk 14.0.1 2020-04-14 OpenJDK Runtime Environment (build 14.0.1+7-Ubuntu-1ubuntu1) OpenJDK 64-Bit Server VM (build 14.0.1+7-Ubuntu-1ubuntu1, mixed mode, sha.. 2020. 7. 6. Google Gmail API 사용 방법 (2) - Sample code 앞선 게시글에서 Google API 콘솔에서 프로젝트를 생성한 후 credential.json을 얻는 방법을 설명하였고, 본 게시글은 아래 그림에서는 붉은색으로 표시한 '구글 인증 서버에 Authoized code를 요청 후 Access toekn을 받는 방법'을 설명하고자 한다. [모바일/REST API] - Google Gmail API 사용 방법 (1) [모바일/REST API] - Google gmail API 사용 방법 (3) Step 2. 구글 인증 서버에서 Authorization code 받기 구글에 OAutho 2.0 의 Web server application에서 설명된 https request 방법을 먼저 확인해야 한다. 구글의 샘플 코드를 보면 아래와 같다. https://accou.. 2020. 7. 5. 티스토리 검색 기능이 제목을 가리는 문제 해결 방법 (티스토리 검색 기능 삭제) 블로그를 모바일에서 확인하면 '제목'과 '검색'의 layout 이 겹쳐 제목이 가려지는 문제가 있다. 검색 기능은 블로그내에서 특정 키워드로 검색하는 것으로 사용하는 경우가 많지 않아서 기능을 삭제하기로 했다. https//kibua20.tistory.com 을 모바일에서 접속하는 경우: 제목이 가려짐 (아래 그림) https//kibua20.tistory.com/m 을 접속하는 경우: 화면 layout은 정상적으로 표시되나 구글 광고가 표시지 않아 모바일 웹 자동연결을 off로 설정했음 (※ 블로그 관리>모바일>티스토리 모바일웹 자동 연결을 설정한 경우 https://kibua20/tistory.com을 접속하면 자동으로 https//kibua20.tistory.com/m 링크로 이동(redirect).. 2020. 7. 3. Repo 에러: repo sync unable to read sha1 file of xxx, cannot initialize work tree Android 소스를 repo 로 다운로드하다가 "repo sync unable to read sha1 file of xxx, cannot initialize work tree" 에러가 발생하였다. 네트워크가 느린 환경에서 긴 시간 동안 대용량의 소스 다운로드 하는 과정에서 오류가 발생하는 것으로 추정된다. 에러 메시지: repo sync unable to read sha1 file of xxx, cannot initialize work tree Syncing work tree: 73% (796/1090)error: unable to read sha1 file of xxx 수정 방법: repo sync 에서 에러가 발생하는 git 이 "Launcher3.git" 라고 가정 한다면 아래와 같이 ./repo.. 2020. 7. 3. [실패 사례] WSL(Windows Subsystem for Linux) 에서 Android 빌드하기 Windows 10에서 Windows Subsystem Linux(WSL) 를 20년 5월 버전에 배포하였다. 윈도우 10에서 리눅스 커널이 그대로 올라가고, 리눅스의 실행 파일(elf)가 실행할 수 있다. USB와 같은 직력화 디바이스 컨트롤은 아직은 불가능하지만, GPU 접근이 가능하고 X-sever를 사용하면 GUI Application 도 실행 가능하다. 이에 WSL 환경에서 Android 소스를 빌드가 가능한지 확인하였다. 결과적으로 WSL에서 Android 소스 다운로드는 가능하나, 빌드는 "case sensitive file system"을 지원하지 않아 불가능하다. 1. WSL 가상 메모리 늘리기 WSL에서는 linux command 로 가상 메모리 설정은 불가능하고, wslconfig를 .. 2020. 7. 3. Python 에러: /usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 없습니다 Python code를 *.py 파일에 작성하고 terminal에서 실행하는 방법은 python 명령어 뒤에 py 파일을 인자로 전달하거나, 일반 실행 파일처럼./test.py로 직접 실행할 수 있다. test.py 파일을 바로 실행하기 위해서는 interpreter 지정 ( #!/usr/bin/env python3)있어야 하고, 실행 권한이(chmod 766) 있어야 한다. #python으로 test.py을 실행하는 방법 $ python3 test.py $ ./test.py test.py 파일 #!/usr/bin/env python3 # -*- coding:utf-8 -*- 에러 메시지 터미널에서 test.py 을 실행했을 때 "/usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 .. 2020. 7. 3. Python 소스 숨기는 방법: pyc 활용 (Bytecode로 컴파일) Python은 기본적으로 인터프리터 언어이기 때문에 별도의 컴파일과 링크 없이 실행(=해석) 가능합니다. 상용 프로그램으로 배포하는 경우나 보안 상 파이썬 소스 코드의 일부분을 숨겨야 하는 경우 Byte code로 변환하여 pyc (pyo) 파일을 사용할 수 있습니다. pyc 파일은 C 언어처럼 기계어로 컴파일한 것이 아니라 Byte code로 '변환'한 것이기 때문에 조금만 노력하면 원래의 소스 코드로 de-compile이 가능하기 때문에 절대적으로 소스 코드의 보안이 유지된다고 믿어서는 안 됩니다. 다만 소스코드를 보기 힘들게 하는 정도로 이해해야 합니다. Python 공식 문서에는 pyc로 컴파일하는 py_compile()는 아래와 같이 설명되어 있습니다. https://docs.python.org.. 2020. 6. 30. Python 표준 입출력(stdin/stdout) 활용 - 리눅스 프로그램과 연동 작업 동기 Command line으로 email 전송 프로그램이 필요해서 Gmail API와 Python를 사용해서 sendmail() 함수를 구현하였다. Python으로 구현한 sendmail() 함수의 1차 구현은 아래와 같이 sender, to, subject, attachment, message를 파라미터를 받는 함수로 구현하였다. 앞에 4개 인자(sender, to, subject, attachment)는 까지는 함수 호출을 한 줄로 끝낼 수 있지만, mesaage (=email 내용)은 경우에 따라서 매우 길어져서 다른 방법을 찾아야 했다. 기존에 Postfix와 sendmail과 mail의 호출 예를 보니, bash의 | 와 2020. 6. 29. Google Gmail API 사용 방법 (1) - Sample code Google에서 제공하는 Gmail REST API를 사용하는 방법에 대해서 설명하고자 한다. Google에서는 GMAIL 뿐 아니라 YouTube, Cloud, Analytics 등 거의 모든 서비스에 대해서 REST API(이하 API)를 지원한다. 참고고, 커멘드 라인으로 Gmail을 전송하는 방법은 아래 게시글에 설명되어 있다. 아래 2가지 모두 stmp 서버의 계정 정보가 노출되어야 한다. 우분투에서 gmail 활용하여 command line으로 email 전송 Python smtplib 사용한 email 발송 예제 (gmail) 본 게시글은 구글 API를 사용하기 위해서는 Web Server application 기준으로 3개의 게시글로 나눠서 설명할 예정이다. 1단계는 Google API C.. 2020. 6. 29. Python JSON 사용 시 TypeError: Object of type bytes is not JSON serializable Python 3.8 버전에서 Dictionary 데이터를 JSON변환 시 발생했던 TypeError: Object of type bytes is not JSON serializable 에러에 대한 수정 사항입니다. json.dumps()함수는 일반 obj를 JSON 포맷의 string으로 serialize 한다고 설명되어 있다(아래 그림) . 즉, Dictionary를 JSON으로 변환하기 위해서는 일반적으로 string으로 직렬화하여 전달해야 하지만, 직렬화가 정의되지 않은 byte array 로 전달하여 Type error 에러가 발생하는 것입니다. decode('utf8') 함수를 사용해서 byte array를 string으로 변환하여 수정할 수 있습니다. 수정 전 코드 def CreateMessa.. 2020. 6. 29. Python smtplib 사용한 email 발송 예제 (gmail) 이전 Post에서는 우분투에 postfix를 설치하고 gmail을 전송을 하는 방법을 확인하였습니다. 본 글은 python 에 기본 내장되어 있는smtplib를 사용하는 방법에 대해서 정리하였습니다. smtplib를 사용하면 간단하게 email 전송이 가능하나, python script 상에서 계정과 Password 가 노출된다는 문제점이 있습니다. 참고로, 아이디와 패스워드가 노출 없이 진행하기 위해서는 Google Gmail API를 사용할 수 있으며, 이는 access token으로 인증을 받아서 1 시간만 유효하기 때문에 보안 관점에서 유리합니다. [개발환경] - [Memo] 우분투에서 gmail활용하여 command line으로 email 전송 [모바일/REST API] - Google Gmai.. 2020. 6. 28. Python SyntaxError: Non-ASCII character in file on, but no encoding declared Python 에서 코딩을 잘하고 있다가 한글을 사용하는 경우 "SyntaxError: Non-ASCII character, but no encoding declared" 가 발생한다. 이 경우 py 파일의 최상단에 encoding type을 선언해주면 해결된다. 수정 전: def CreateMessage(sender, to, subject, message_text): message = MIMEText(message_text) message['to'] = to message['from'] = sender message['subject'] = subject try: return {'raw': base64.urlsafe_b64encode(message.as_string())} except: return {'r.. 2020. 6. 28. Python 2.7과 3.8호환성: a bytes-like object is required, not 'str'에러 수정 Python 2.7의 코드를 Python 3.8 버전에서 재 사용하는 경우 가끔 Type error가 발생한다. 개발하고 있는 python code가 2.7 버전과 3.8 버전에서 돌려야 하는 경우 아래와 같이 수정할 수 있다. 버전을 체크하는 경우 버전을 계속 올라감에 따라서 확인이 필요하기 때문에 code 유지 보수가 힘들다. 이 경우 try: except: 구문으로 exception 발생 여부를 체크해서 수정할 수 있다. Python 2.7 에서는 try 구문에서 exception없이 처리하고, 3.8 버전에서 except구문으로 처리 가능하다. 수정 전 Code: def CreateMessage(sender, to, subject, message_text): message = MIMEText(me.. 2020. 6. 28. 티스토리 블로그 초보를 위한 대표 이미지 안 잘리게 만들기 블로그를 운영한 지 한 달 넘은 초보입니다. 블로그에 글을 게시하다 보면 대표 이미지가 정렬이 되지 않거나, 좌우가 잘리거나 그림의 일부만 표시되어 현상이 있어 이에 대한 개선 방안을 찾고 있었습니다. HTML이나 CSS를 잘 아시는 분은 티스토리에서 제공하는 스킨을 분석해서 html과 css를 수정을 가능하겠지만, 저와 같이 HTML 익숙하지 않은 분들께는 쉽지 않은 방법입니다. 블로그 스킨을 변경할 때마다 HTML과 CSS를 수정하는 것은 결코 쉬운 문제는 아닙니니다. 그래서 HTML 전문가 아닌 일반인 분들도 쉽게 대표 이미지가 잘리지 않도록 설정할 수 있는 방법을 소개드립니다. 티스토리 블로그에 게시글의 작성하고 포스팅하면 대표 이미지가 설정됩니다. 대표 이미지는 해당 게시글에 올린 첫번째 이미지.. 2020. 6. 27. [Memo] 우분투에서 gmail활용하여 command line으로 email 전송 우분투 20.04 에서 gmail 계정의 smtp를 활용해서 커맨드 라인으로 email을 송부하는 내용을 정리하였습니다. 우분투에서 자동으로 특정 프로그램을 실행하고 실행하고 그 결과를 email을 전송할 수 사용할 예정입니다. 우분투 20.04 설치 상태에서 아래 명령어를 copy&past 하면 잘 동작합니다. 이와 관련해서 출처 사이트에서 설명이 자세히 작성되어 있어, 명령어만 나열하였습니다. 1. postfix package 설치 $ sudo apt-get install mailutils libsasl2-2 ca-certificates libsasl2-modules postfix 2. main.cf 파일 수정 $ sudo vi /etc/postfix/main.cf #main.cf 파일 맨 밑에 아래.. 2020. 6. 22. WSL 2.0 Global configuration (.wslconfig) 을 통한 성능 향상 WSL 2.0 은 윈도우10에서 리눅스 커널을 직접 올린 것으로 최근에 꾸준히 기능이 업데이트되고 있다. 최근 MS Build 2020 컨퍼런스에서는 CUDA와 Direct ML의 GPU 컴퓨팅을 지원해서 WSL에서 AI와 machine learnig에 사용할 수 있다고 한다. (출처: MS blog) WSL개념과 설치 방법은 아래 게시글을 확인 바란다. 현재 퀄컴이나 Android에서 배포하는 BSP와 Framework 소스는 리눅스 OS를 기반으로 배포하고 있고, Trace32나 일부 개발 Tool은 Windows 에서만 배포하고 있어, Windows와 리눅스를 같이 사용할 수밖에 없다. 본 게시글은 WSL에서 Android 빌드를 확인하는 과정에서 가상 메모리(=swap)를 늘리는 과정이 필요했고,.. 2020. 6. 21. 윈도우용 MobaXterm - SSH 및 X-Server 지원 윈도우에서 1) 원격 서버에 SSH (Secure Shell)로 접속, 2) 원격 프로그램을 실행, 3) 로컬에서 리눅스 명령어를 사용하는 경우 유용한 tool이 MobaXterm이다. 이미 Putty, PowerShell, Cygiwn을 사용하는 분들께는 MobaXTerm은 보다 유용한 기능을 지원한다. MobaXterm은 무료 버전과 유료 버전으로 구분되어 있으나, 본 내용은 무료 버전 기준으로 설명한다. 일반 사용자라면 무료 버전을 사용해도 기능적으로 부족함이 없고, 별도의 광고나 추가 설치 프로그램이 없이 실행파일을 다운로드하여 설치하면 바로 사용 가능하다. 지원 기능 요약 SSH 지원 (원격 서버 IP 주소 저장, ID 패스워드 저장) 멀티 TAB과 Split view로 다수의 terminal .. 2020. 6. 20. repo 실행 시 DeprecationWarning: imp module 대처법 Android source를 다운로드 후 수정 사항의 commit을 repo로 remote reposity에 반영할 때 에러가 발생하였다. Repo 명령어 (repo init, repo sync, repo start 등) 사용 시 Warning은 발생하더라 git init , clone, add, commit은 가능했지만, 결정적으로 repo upload 시 에러 발생하여 remote repository에 반영이 불가능하였다. /home/temp/.repo/repo/main.py:19: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative use.. 2020. 6. 19. 티스토리 블로그 메뉴 추가하기 블로그에 대략 50여 개의 글이 게시되고 나니 관심 주제의 글만 모아 볼 수 있는 메뉴를 구성할 필요성은 느겼다. 검색과 백링크를 통해서 들어오신 분들이 관심 주제의 글을 쉽게 접근할 수 있도록 상단에 메뉴를 구성을 하였다. 티스토리에서는 기본적으로 홈, 태그, 방명록 메뉴를 지원하고 있다. 접근성이 떨어지는 태그 메뉴는 삭제, 방명록 메뉴는 유지, 블로그 주제에 맞는 메뉴를 추가하였다. 대단한 내용을 추가한 것은 아니지만 추가해 놓고 보니 사용하기 편리하다. 메뉴 추가 방법은 매우 간단하다. 블로그 글 작성 시 카테고리가 잘 정리되어 있으면 '카테고리 검색'으로 연결 시키면 수작업 없이 그대로 사용가능하고, 별도의 내용을 추가하고자 하는 경우 '페이지 입력'을 미리 만들어서 메뉴 항목과 연결 시킬 수 .. 2020. 6. 18. [실패 사례] gcc 버전이 낮은 상용 리눅스 서버에서 프로그램 설치 시 GLIBCXX' not found 에러 실패 사례입니다. 상용 서비스를 하고 있는 리눅스 서버에 우분투에서 gcc로 빌드한 응용프로그램을 설치해야 합니다. 일반 리눅스 서버라면 필요한 패키를 설치하면 가능하지만 이미 상용 서버로 운영되고 있어 기 설치된 프로그램에 영향을 줄 수 있는 패키지의 추가 설치가 불가능합니다 프로그램 설치를 위해서 여러 방법을 시도했지만 결국 libc 버전 차이로 설치가 불가능 하다는 것으로 결론 지었습니다. 상용 리눅스 서버 전제 조건: 기 운영 중이 프로그램으로 인하여 서버에 추가 패키지 설치 불가 상당히 오래된 설치 상태에서 추가 패키지 업데이트 없음 잠재적 결론 shared lib는 일반 서버에서 상용 리눅스 서버로 local lib로 참조가 가능하지만, libc는 불가능 libc을 업데이트를 위해서는 상용 리.. 2020. 6. 17. Ubuntu 동영상 플레이어: VLC Player 설치 1. 우분투 기본 동영상 프로그램의 문제점 우분투 20.04에서 DVD 동영상을 보다가 아래와 같이 "파일을 재생할 수 없습니다"라는 팝업 때문에 우분투에 적합한 동영상 플레이어를 찾기 시작했다. 윈도우즈에서는 기본 설치되는 Media Player 나름(?) 훌륭하고, GOM Player이나 KM Player와 같은 막강한 플레이가 않지만, 우분투에서는 윈도우즈 보다는 선택의 폭이 좁은 것 같다. 기본 동영상 프로그램은 DVD에서 추출한 포맷과 호환성이 떨어지는 것으로 보인다. 우분투 동영상 프로그램 이외에 기본 설치되는 동영상 프로그램 중에서는 'mpvMedia Player' 가 있다. mvpMediaPlayer는 다양한 코덱와 DVD 포맷을 지원하여 호환성에는 전혀 문제가 없지만 UI 가 거의 없다... 2020. 6. 15. Android 소스 최적화 (100GB에서 65GB로 줄이기) Android source는 Q-OS 기준으로 대략 100GB 정도의 크기이고, /.repo 가 47GB로 거의 50% 용량을 차지하고 있다. Git 전체를 다운로드 받으면 git log를 통해서 history 확인이 가능하지만, 굳이 전체 history를 확인할 필요가 없는 경우 git log 정보는 디스크 낭비이다. 예를 들어, 개발자가 commit을 이미 만든 상태에서 commit 을 반영한 system 이미지를 만드는 경우 git log 전체를 다운로드 할 필요은 없다. 또한 Android source는 Linux와 MacOS의 prebuilt tool chain 까지 포함하고 있어 Linux에서만 빌드하는 경우 Mac OS tool chain은 삭제 가능하다. Repo 와 Git 옵션을 통해서 .. 2020. 6. 12. 우분투20.04에서 한글 오타 방지 (UIM '벼루' 설치기) Ubuntu 20.04 에서 한글을 입력하다 보면 오타가 발생하는 경우가 가끔 있다. 특히 트위터에서는 한글 입력 시 100% 오타 현상이 발생하며, 아래 동영상처럼 키보드 입력은 '가나다라마'로 입력하나, 트위터 표시되는 글자는 한글자씩 씹혀 '가나다라마'오타가 발생한다. 우분투 디폴트 입력기인 IBUS 문제점인지 트위터의 문제인지 확실치는 않지만 입력기를 IBUS → UIM 변경하면 트위터 한글 오타 문제는 해결된다. (※ 트위터 버그보다는 IBUS의 한글 오토마타 버그로 '추정'됨) 한줄 요약 트위터와 같은 프로그램에서 한글 입력 오타가 발생해서 'IBUS' 에서 'UIM 벼루' 로 변경 트위터에서 오타 현상 발생 (100% 빌생) 한글 입력기를 IBUS→UIM으로 변경하는 과정은 아래와 같이 3단.. 2020. 6. 11. Ubuntu 20.04에서 sshfs 를 이용한 원격 폴더 마운트 우분투가 설치된 로컬 PC와 원격 서버 (=빌드 서버 or 백업 서버)가 있는 경우 로컬 PC에서 원격 서버를 마운트 하는 방법을 정리하였다. 안드로이드 소스는 120GB 이상이고, 빌드가 완료되면 250GB 정도가 넘기 때문에 별도의 빌드 서버를 사용하는 경우가 많다. 로컬 PC에 설치된 IDE를 사용해서 원격 서버에 있는 파일을 수정하는 경우 sshfs로 원격 서버의 폴더를 마운트 해서 마치 로컬 PC의 파일을 수정하는 것처럼 사용할 수 있다. 또한 별도의 파일 서버나 백업 서버를 사용하는 경우에도 sshfs 유용하다. 회사에서는 보안 때문에 SMB 나 FTP를 막아 놓는 경우가 많지만 SSH 는 항상 열어 놓기 때문에 SSH 기반의 sshfs를 사용할 수 있고, Windows 용 sshfsWin 또.. 2020. 6. 10. Soong 빌드 시스템을 활용한 Android.bp 작성법 Google에서 Android 버전을 올릴 때마다 Android.mk를 Android.bp로 변경하다고 공지하고 있습니다. Android 11 (R-OS)에서는 Androdi.mk와 Android.bp를 같이 사용할 수 있지만 2~3년 후에는 Android.mk는 빌드는 지원하지 않고, Android.bp만 지원할 것으로 예상됩니다. Androdi.bp는 Soong build 시스템을 사용합니다. Androdi.mk 대신 Soong에서 사용하는 Android.bp 파일을 차이점을 이해야 하며, Android Full 빌드를 하는 경우 Andorid.mk를 Android.bp로 변환하는 과정이 있어 Android.bp를 사용하는 경우 빌드 시간이 조금이나마 단축할 수 있습니다. Android.bp파일을 처.. 2020. 6. 9. [Tips] Python: XML Parsing 시 multiple elements on top level 1. XML 처리 시 "multiple elements on top level" 에러 XML 에서 well-formed 텍스트 아래와 같이 정의할 수 있다. 아래 5) 번째 조건 "루트" Element는 모든 elment를 포함한다" 조건이 맞지 않아서 Parse Error가 발생한 것이다. Python 2.x 버전의 ElementTree에서는 Exceptin없이 처리하나, Python 3.8 버전에서는 Exeption을 발생시킨다. 1) 문서는 적절히 인코딩된 올바른(legal) 유니코드 문자만을 포함한다. 2) 2020. 6. 8. 이전 1 ··· 3 4 5 6 7 8 다음