C개발자가 JAVA로 전향하기

2017년 3월 16일 목요일

Android Build Error [Failed to execute aapt]

우분투PC 환경에서 개발중인 안드로이드 앱을
CentOS 6.6 (64bit) 환경의 PC에서 지속적으로 개발 해야 할 일이 생겼다.

그런데 CentOS 에서는 알수 없는 이유로 빌드가 되지 않고 있다.

에러 메세지는 두가지가 있는데,

첫번째는,
java finished with non-zero exit value 1


그리고 두번째는,
Execution failed for task ':MyAndroidModuleName:processReleaseResources'.
com.android.ide.common.process.ProcessException: Failed to execute aapt 

첫번째 문제는 Android Studio를 설치할때 같이 제공되는(스튜디오 패키지 안에 같이 있는) java 버전말고, JAVA JDK를 별도로 설치 한 이후에 안드로이드 설정에서 바꾸어 주니 해결되었다.

문제는 두번째 문제인데,
인터넷에서 찾은 해결책으로는
1. bitbucket에서 clone 해서 소스를 받으면 문제가 있을 수 있다.
2. 안드로이드 소스 내에 res 폴더내에 변수명이 중복되거나, 대문자가 포함된 리소스가 원인이다.
라는 의견들이 있었고, 관련해서 내 경우를 검토해 보았지만 해당되지 않았다.

그래서 조금더 자세히 관찰 해 보기 위해 프로젝트 루트에서 gradlew 빌드를 수행 해 보았다.
./gradlew build --info
or
./gradlew build --debug
역시 빌드는 실패 하였지만, 빌드 결과중 눈에 띄는 항목이 있었다.

/root/Android/Sdk/buld-tools/25.0.0/aapt:
/lib64/libc.so.6: version 'GLIBC_2.14' not found
(required by /root/Android/Sdk/build-tools/25.0.0/aapt)

/root/Android/Sdk/buld-tools/25.0.0/aapt:
/lib64/libc.so.6: version 'GLIBC_2.14' not found
(required by /root/Android/Sdk/build-tools/25.0.0/lib64/libc++.so)

그렇다. GLIBC의 버전이 맞지 않아 발생한 문제였다.
내 GLIBC의 버전은 몇인가 버전 확인을 해봤다.
rpm -qa | grep glibc
glibc-devel-2.12-1.192.el6.x86_64
glibc-2.12-1.192.el6.x86_64
glibc-common-2.12-1.192.el6.x86_64
glibc-headers-2.12-1.192.el6.x86_64

2.12버전이다.

GLIBC는 리눅스 시스템에서 굉장히 많은 Dependency를 가지고 있는것으로 어렴풋이 알고 있는데, 이것을 업데이트 할 수 있을까...

일단 CentOS 6.X 버전은 2.12로 설치 되고,
CentOS 7.X 버전은 2.17로 점프된다고 한다.

2.14를 강제로 설치해볼까...
하는김에 2.17을 설치할까...

고민끝에 내린 결론은,
"이 PC의 운영체제를 바꾸자"로 결론 내었다.
CentOS -> Ubuntu

Dependency가 많이 걸려 있으면, 본 건은 해결된다 치더라도, 또다른 예상치 못한 건들이 발생할 것이고, 지금의 나는 개발 환경에 신경쓸때가 아니라 개발에 신경써야 할 때라 생각 되었기 때문이다.(일정.. ㅠㅠ)

예전 서버 설치하고 운영할때는 CentOS/RHEL 만을 사용했었는데,
무중단 운영에 구애받지 않는 데스크탑용으로는 Ubuntu가 나은것 같다.

또 Ubuntu를 설치 해야 하는구나....
Share:

2017년 1월 16일 월요일

Ubuntu 16.04에 Wi-Fi 사용하기

Ubuntu 설치 이후 실제 사용을 위해 Wi-Fi에 접근하려 했으나,
역시나 우리의 리눅스는 그리 호락호락하게 기능을 내어놓지 않는다.
구글링을 통해 쉽게 사용이 되었다면 포스팅할 생각도 못했을텐데, 이렇게 하나씩 알아가는 것도 재미라고 생각한다.(시간적 여유가 있다면..)

먼저 네트워크 상태 확인을 위해 아래 명령어를 입력 해 보자.
## Shell command
$ sudo lshw -class network

구글링을 해 보면 위 명령어 결과가 Wi-Fi의 경우엔
Wireless interface
로 표시된다고 하는데, 나는 단지 Network controller로 표시되는 것이 전부 였다.

## Shell command
$ iwconfig

iwconfig결과도 별반 다를것이 없다.


## Shell command
$ lspci

HW 확인에 여러가지 방법이 있겠으나, lspci로 확인해 보니 내 랩탑의 네트워크 카드는
Broadcom BCM43142 로 확인이 된다.
그리고 구글링 결과 브로드컴 장비는 별도로 업데이트를 해줘야 한다는 포스팅도 보인다.
http://askubuntu.com/questions/55868/installing-broadcom-wireless-drivers
상기 링크 질문의 댓글을 참조하면 자세한 정보가 나와있다.
(댓글의 수준이 저정도라니..ㅎㄷㄷ)

이문제를 해결하기 위해서는 업데이트를 위해 유선 LAN이 필요하다.
Ethernet(유선LAN)을 연결한 후에 우분투 앱인 Software & Updates를 실행 시킨다.


[Ubuntu Software] -> Download from: -> Other -> Select Best Server 버튼을 통해 최적의 서버를 자동으로 찾아 넣어준다.

그후에 [Additional Drivers] 탭으로 이동하여
Broadcom Corporation BCM43142로 표시된 곳의 라디오 버튼을 Using~~ 으로 선택해주고 Apply Changes를 눌러주면 업데이트가 자동으로 진행이 된다.

설치전


설치중

설치후

설치후에는 Dialog 아래쪽에 1 Propertary Driver in use 라고 표시되는 것이 보인다.
상기 설치 과정을 Command로 하자면
## Shell command
$ sudo apt-get install bcmwl-kernel-source
를 수행한 것이라 생각 된다.

newest version이 설치 되었다고 보인다


그 이후에 처음의 명령어들을 다시 입력해 보면 정상적으로 보이는 것을 확인 할 수 있다.




누군가에게 도움이 되길 바라며...

Share:

2017년 1월 12일 목요일

Ubuntu 14.04 LTS 와 16.04 LTS 멀티 부팅

If someone wants to translate English, I will try.... Please give me a comment.

 서론

IT 기술의 변화가 빠르다는 것은 알고 있었지만,
요새는 몸소 와닿는다.

예전에는 멀티부팅 자체도 신기했는데,
부팅을 USB로도 할 수 있고,
게다가 USB Memory Stick에 OS 설치가 가능하다니!!!

새롭게 이직한 회사에서 Ubuntu 14.04가 설치되어있고,
회사 제품의 개발환경이 14.04에 최적화되어 고스란히 담긴 랩탑을 한대 인수 받았다.
윈도우를 설치하고 싶은 마음은 굴뚝같으나,
선윈(도우)후리(눅스) 멀티부팅에 관한 가이드는 많지만,
선리후윈에 대한 가이드는 전무했다.(내가 검색을 못한 것일수도..)
그래서 우분투 리눅스가 나의 메인 PC환경이 되었다.

그러던중, 교육 강사님이 우분투 16.04 버전이 설치된 랩탑을 준비해 오라신다.
팀에 남는 랩탑은 없고... 선리후리 멀티가 가능한지 검색하던중 알게된 방법을 공유하면서
나의 첫 IT 포스팅을 시작 하려 한다.

이번 포스팅은 네이버 블로거 히밤쿵님의 포스팅을 직접 수행 및 재작성 한 내용임을 밝힙니다.
출처 : http://blog.naver.com/PostView.nhn?blogId=testcolor&logNo=220518821845

** 환경인식

- 랩탑에 Full Partition으로 Ubuntu 14.04 LTS가 이미 설치 되어있는 상태


** 목표

- USB Memory(16GB)에 Ubuntu 16.04 LTS를 설치하여 리눅스간(우분투간) 멀티부팅이 되도록 하자

** 주의사항

- 본 내용대로 수행시 설치 완료후 Ubuntu 16.04가 설치된 USB Memory가 꽂혀 있어야 멀티부팅이 가능합니다.
따라서, USB Memory를 꽂은 상태로 PC를 써야하는 상황이 싫으신 분은 수행하지 마세요!!
이 현상에 대해선 추후에 개선방법을 찾아본 후에 개선되면 공유하겠습니다.
혹시 답을 알고 계시다면 댓글 부탁 드립니다. ^^
해결방법을 알게 되었습니다.
상기에 취소선 표시된 주의사항 관련 문제는 GRUB 설치 '위치'에 대한 문제로 밝혀졌습니다.

** 준비물
- ubuntu-16.04.1-desktop-amd64.iso
   : 우분투 설치를 위한 가상 설치 CD
   : 최신버전 다운로드는 이곳을 클릭

- unetbootin-linux64-625.bin
   : 상기 ISO를 기반으로 USB 부팅이 가능하게 변환해 주는 툴
   : 이곳에 접속하면 접속된 PC의 환경에 맞는 다운로드 링크를 제공함
   : *.bin은 리눅스용, *.exe는 윈도우용

- USB Memory 1 : ISO용(16GB, FAT32)
   : 상기 두개가 합쳐진 결과물이 들어갈곳
   : 설치 완료된 이후엔 사용되지 않음
   : 포맷하지 않아도 되지만 약 8GB의 여유공간이 있어야 함

- USB Memory 2 : Target용(16GB, FAT32)
   : Ubuntu 16.04가 설치될 공간요
   : 설치전 포맷 필요

- Internet LAN (Ethernet)
   : 설치 완료된 이후 업그레이드시에 필요
   : 설치 완료 직후는 Wi-Fi 사용하지 못함

설치하기

(본 설치 과정은 Ubuntu 14.04에서 진행되었습니다.)

1. 부팅 가능한 USB 만들기

$ chmod +x ./unetbootin-linux64-625.bin
$ ./unetbootin-linux64-625.bin (실행후 Root 권한 비번을 묻습니다)

상기 이미지와 같이 설정해 주세요. GUI가 훌륭하진 않아도 기능은 쓸만합니다.
Drive 란에는 ISO용 USB경로를 잡아 주세요

ISO파일 선택시에 버튼이 보이지 않아 당황했는데, 오른쪽 위에 버튼영역을 클릭하다 보면
디렉토리 트리를 선택할 수 있게 됩니다. ISO위치로 찾아 들어가시면 됩니다.

이렇게 진행하면 ISO가 USB에 풀어지면서 부팅가능한 USB메모리가 만들어 집니다.

2. Ubuntu 16.04 설치하기

ISO USB와 TargetUSB를 모두 꽂은후에 PC를 리부팅 합니다.
부팅시에 부팅 우선순위를 HDD, CD(DVD), USB, Network등에서 잡아주어야 하는데,
이는 BIOS셋업에서 가능합니다.
BIOS 셋업은 메인보드 제조사마다 모두 다르므로 여기서 가이드 드리지 못합니다.
(검색을 활용해 주세요)

부팅 우선순위를 USB로 설정해 줍니다.

제 경우엔 USB Hard Drive (UEFI)를 선택 해 주어야 부팅이 되었습니다.
그리고 영구적인 USB 부팅이 아닌 일회성으로 USB 부팅을 하는 메뉴였습니다.
아래에 보이는 SanDisk가 저의 TargetUSB입니다.
사용자마다 다르겠지만 이 TargetUSB의 이름을 기억해 두세요. 파티션 화면에서 사용됩니다.

부팅USB를 선택 하고 나면 상기와 같은 Install 메뉴 화면이 나옵니다.
[Install Ubuntu]를 선택해 주세요


그러면 우분투 GUI화면으로 넘어가면서 본격적인 설치를 시작 합니다.
하지만 아직 하드를 포맷한다던가 파티션을 건드리는 작업은 아니므로 부담없이 진행하시면 됩니다.


언어 선택 화면입니다. 설치할때만 사용하는 언어가 아니라 설치 이후에 적용될 언어 선택 화면 입니다.
저는 교육용 설치이고, 교육 가이드에는 영어를 권장하여 영어로 설치 하였습니다.

다음으로는 사용할 software들의 업데이트 항목을 묻는 메뉴인데,
저는 LAN을 꽂지 않고 진행해서 인지 상단의 메뉴가 비활성화 되어있었습니다.
어차피 나중에 할것이므로 아무것도 체크하지 않고 Continue하였습니다.

여기서부터 중요합니다.
자칫 실수하면 이전 Ubuntu가 날아가는 경우도 있으니, 각별히 주의해 주세요.
기존 우분투를 지울지 여부를 묻는 메뉴 입니다.
멀티부팅을 위해서 반드시 [Something else]를 선택 해 주세요


파티션 표시 화면입니다.
물리적인 저장공간의 네이밍룰은 sda, sdb, sdc 이런식으로 끝에 a,b,c 순으로 진행 되는것 같습니다.
물리적인 공간 내의 논리적인 공간은 끝에 숫자가 붙고요..
이를테면.. sda1, sda2와 같은 식이지요.
저는 USB Memory에 설치를 할것이기 때문에 적어도 sda는 아닐 것입니다.
하지만 현재 제 랩탑에는 USB가 2개 꽂혀 있습니다. 어느것이 Target인지 구분이 안가는데,
[Device for boot loader installation] 메뉴를 클릭하면 실제 이름이 표시 됩니다.
(이름만 확인하고 Device for boot loader installation은 닫으세요)
저의 경우엔 /dev/sdb가 되겠네요.
sdb클릭후 [Change] 버튼을 클릭합니다.


 
Size는 표시되는 대로 건드리지 않고 그대로 놔두었습니다.
Use as는 Ext4 journaling file system을 선택 했고
Mount point는 / 를 선택 했습니다.


그러면 파티션 화면에 약간의 변화가 생깁니다.

이제 부트로더가 설치될 위치를 정해줘야 하는데요.
서두에 밝혔던 주의사항과 관련된 문제가 이곳에서 발생하는 것은 아닌가.. 생각 됩니다.
일단, 저는 TargetUSB에 부트로더를 설치 하였는데요.
sda에 했으면 어땠을까.. 궁금증이 생깁니다.
장기적으로 사용해야 하는 목적의 멀티OS 설치라면 주 사용될 OS의 파티션에 GRUB을 설치하는것이 맞겠으나,
이번 설치의 목적은
1. 임시사용(교육을 위한 1회성 사용)
2. 물리적으로 분리된 공간(Target USB)에 설치
이므로 Target USB에 GRUB을 설치하는 것은 맞지 않음을 알게 되었습니다.
따라서 저와 같은 목적을 가지고 설치 하시는 분들이라면, USB가 아닌 HDD(sda)에 GRUB
을 설치 하세요.

 이렇게 TargetUSB에 부트로더를 설치하겠다고 하고 [Install Now]를 클릭했습니다.

짧은 영어로 읽어보았으나, sdb가 지워지는 것은 각오 했었고...
sda의 swap에 변경이 생긴다니 약간 망설여지기는 했으나, 일단 진행 해 보있습니다.

이제 설치 과정에서 긴장해야 할 일들은 다 했네요.
향후의 과정은 수월합니다.
시간 설정은 서울로 해주시고.

키보드 레이아웃은 한국어 101/104키로 하였습니다.

사용자 정보 및 암호를 입력 하고 Continue를 누르면


위와 같이 설치가 진행 됩니다. 약 1시간 소요 된것 같네요.

설치가 완료된 이후 TargetUSB를 꽂은채로 리부팅을 하게 되면
위와같이 OS 선택 화면이 발생을 합니다.

그냥 ubuntu가 이번에 설치한 Ubuntu 16.04 LTS 이고요
기존 14.04는 이름이 명확하게 표시 되어있네요..

둘다 부팅해서 정상동작 되는것 확인 했습니다.

다만 서두의 주의사항에 언급드린것처럼,
USB가 없으면 GRUB으로 빠지는 현상은 개선이 필요해 보입니다.

첫 포스팅인데 전달이 잘 되었으려나 궁금합니다.

** 내용 추가

USB에 설치된 Ubuntu 사용후기...
- 파일 접근이 느립니다.(따라서 자주 멈춤 현상이 나타납니다.)
- 자칫 손으로 USB를 건드리면 아차 싶습니다.. ㅠㅠ
따라서 USB 메모리에 OS를 설치하여 사용하는 것은 특별한 경우가 아니라면 추천하고 싶지 않습니다.



If someone wants to translate English, I will try.... Please give me a comment.

Share:

2017년 1월 4일 수요일

블로그를 시작하며

2017년 1월 4일...

태어나 처음으로 본격적으로 블로그를 운영할 계획으로 개설한다.
블로그 제목은 "[C-VA] C개발자가 JAVA로 전향하기"이지만,
Android, C, ROS, Python, TensorFlow 관련된 얘기가 많아 질것으로 예상한다.

시작은 미약하나.. 끝은 창대하길 빌며...

Share:

Popular Posts

Recent Posts

Categories

Unordered List

Text Widget

Pages

Powered by Blogger.

Categories 2

Translate

About

Facebook

Advertising

Popular Posts

Copyright © [C-VA] | Powered by Blogger

Design by ThemePacific | Blogger Theme by NewBloggerThemes.com