본문 바로가기

SW 개발104

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.
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.
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.
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.
Android 11 (R-OS) Emulator에 설치하기 Android 11 은 구글에서 개발자 프리뷰 프로그램을 통해서 Google Pixel 4/4 XL, Pixel 3a/3a XL, Pixel 3/3 XL 및 Pixel 2/2 XL 단말을 대상으로 R-OS Preview 버전으로 업데이트 진행할 수 있습니다. Developer Preview 버전은 2월~5월 배포, Beta 버전은 6월~7월까지 배포, Release candidate는 8월 배포 후 큰 문제가 없으면 공식 R-OS을 9월초에 배포할 것으로 보인다. Google Pixel 하드웨어가 없더라도 개발 및 테스트용 Android Emulator를 사용하여 R-OS Preview 버전 확인할 수 있습니다. Emalator에 R-OS 를 설치하는 방법은 아래와 같습니다. 1. Android 스튜디오.. 2020. 6. 7.
Android 11 기능 소개 2020년 5월 말에 Android 11 (R-OS)의 Developer Preview 4 를 배포하였고, 6/10일 Beta 버전을 배포되었다. Android 11 공식 배포는 9월 초 (첫 번째 월요일)에 배포될 것으로 예상되며, 개발자 프리뷰 4와 Beta 버전을 통해서 Android 11 에서는 주요 개선을 기능을 미리 살펴보았다. 아래 링크한 유튜브 동영상에서는 대화 UI(Bubble chat), Medial Play control , Power Menu를 통한 Google Home Device control , 홈 아이콘 방석 UI 추가 등의 UI를 확인할 수 있다. AOSP 적용된 신규 기능은 이미 삼성/LG 폰에는 이미 적용된 기능이 있어 각 제조사에서 각 신규 기능을 어떻게 적용할지 실제.. 2020. 6. 6.
Ubuntu에서 Android 10 빌드하기 지난 Post 에서 Android 10 (Q-OS) 소스를 다운로드하는 방법과 명령어를 설명하였다. 구글은 Ubuntu 14.04 64bit 환경을 기준으로 설명하고 있어, 최신 Ubuntu 20.04 64bit (8GB RAM)에서도 ASOP 가 빌드 가능한지 확인하고자 한다. 결과적으로 몇가지 에러만 수정하면 Ubuntu 20.04 (8 GB RAM)에서도 Andorid 10 빌드가 가능하다. 요약: Ubuntu 20.04 에서 Android 10 (Q-SO) 빌드가 가능하다. 추가 Lib 설치 및 16G 이상 RAM 확보가 필수 빌드를 원하는 Tag 정보 및 Device Name 정보은 Google 사이트 및 소스에서 확인 후 빌드 Android NDK 와 PDK 사용해서 개발하는 경우 AOSP 빌.. 2020. 6. 4.
Android Studio 4.0 사용하기 Andriod studio 4.0 버전이 5월말부터 Preview 배포가 끝나고 Official release를 시작하였다. 글로 읽는 것 보다는 실제로 Android Studio 4.0을 다운로드 해서 사용해 보는 것을 추천드립니다. 본 게시글은 Gogole Developer 블로그 내용을 요약하였습니다. Android Studio 4.0 Download 기존의 설치된 Andorid Studio 에서 4.0 으로 업그레이드는 메뉴> Help > Check for updates 를 선택하거나 Google 개발자 사이트에서 다운로드 가능하다. Android Studio 4.0설치 시간은 5~10분 정도 소요되고, SDK 업데이트, gradle 까지 업데이트 하려면 대략 20~30분 정도 소요된다. 설치 시.. 2020. 6. 3.
(작성 중) REST API 개념 잡기 REST API 의 개념 및 실제 응용 관련해서 연재를 할 예정입니다. 이론적이고 애매한 것 보다는 최대한 쉽게 그리고 현실적인 예제를 사용해서 정리할 생각입니다. REST API 는 일반적으로 인증을 먼저 받아야 합니다. 인증 표준인 OAuth 2.0 과 함게 정리할 예정입니다. [특징] REST API = HTTP(S) + JSON + Stateless 클라이언트와 서버의 분리 무상태(Stateless) 캐시 처리가 가능해야 함 시스템이 계층화(Layered) 되어있어야 함 일관성 있는 인터페이스 [구성 요소] 리소스: URL http://***api_sever/resource 등과 같이 URL 과 계증 구조 '/'로 구분한다. Method: HTTP request 에 대한 post, get, del.. 2020. 6. 2.
[Tips] Python 에서 XML comment 처리 - Sample code 제공 1. Python으로 XML 처리할 때 comment 남겨두기 Python 에서 XML 처리할 때 많이 사용하는 ElementTree 기준으로 설명한다. Comment가 포함된 XML 파일을 ElementTree.parser() 사용해서 읽어 보면 Tree element 에 comment 는 포함되지 않는다. 만일 XML File 의 Comment 를 유지해야 하는 경우 아래와 같이 CommentedTreeBuilder class를 만들고 comment() 함수를 추가해야 한다. ElementTree 의 API 에 대한 설명은 https://docs.python.org/3.8/library/xml.etree.elementtree.html 에 자세하게 작성되어 있고, 내부 구현을 따라가보면 XML tree.. 2020. 6. 2.
[Tips] XML 에서 예약/특수 문자 처리 1. XLM 예약 문자 - "Parser Error : not well-formed" 요즘 Python 사용해서 XML 을 처리하다가 닭질(?) 내용을 정리합니다. ElementTree 로 XML 파일을 문제 없이 잘 사용하고 있다가 파이썬 코드는 변경이 없음에도 불구하고 갑자기 XML Parser에서 "Parser Error : not well-formed" 이 발생하는 경우가 있다. 에러 발생 원인은 XML 파일에 예약 문제가 포함되어 있기 때문으로 아래와 같이 문자열 변환 과정을 거쳐야 한다. #Xml 로딩하는 코드 import xml.etree.ElementTree as ET from xml.etree.ElementTree import ElementTree, Element, SubElement, .. 2020. 5. 31.
Android 10 (Q-OS) 소스 다운로드 Android 단말의 SW 은 Android App/Framework, AP Chipset 업체 BSP, Modem BSP, 폰 제조사 SW와 같이 4가지로 구성되어 있고 상호 밀접하게 결합되어 있다. (최근 2~3년 동안 구글에서는 각 개발 주체별 SW 종속성을 Treble project를 통해서 최소화하려고 노력하고 있다.) Android Framework/Apps : Google이 개발하는 Android Framework, Native Library, Android Run time, GMS App (e.g. Youtube, Playstore), Linux kernel 일부 퀄컴/MTK/삼성에서 개발하는 AP Chipset BSP: 하드웨어 관련된 추상화 레이어 (HAL/HIDL), 리눅스 커널 일부.. 2020. 5. 31.