강의노트

[Andriod] 안드로이드 플랫폼 1일차

GS_Park 2016. 9. 24. 10:21


오늘도 약간 지각을 했습니다.



========================= 1 ============================

( 09 : 05 ~ 10 : 16 )


환경변수 설정 파일 준비 등의 환경구축 작업을 진행하였습니다.





안드로이드 플랫폼에 관련된 강의 커리튤럼 및 Learning Map을 통해 미리 알아야 할 사항들 및 이후 학습 방향을 간단하게 소개 해 주셨습니다.


커널에 대한 중요성을 계속 강조하셨습니다.


그 이유는 펌웨어처럼 스케쥴링이 필요 없는 경우에는 OS탑제가 필요 없지만 그렇지 않을 경우, 또 디바이스를 직접 사용할 수 없고 커널의 디바이스 드라이버 코드를 활용하기 위해서도 커널을 알 필요가 있다고 하셨습니다.


 안드로이드 코드는 하나의 프로세스가 수행되는 동안에 메모리를 독점하기 때문에 다른 프로세스의 코드(기능)를 활용할 수 없습니다. 다른 프로세스의 함수가 메모리에 적제될 수 없기 때문입니다. Task Switching(or Context Switching)되면 다른 프로세스가 위와 같이 메모리에 올라오므로 IPC(inter Process Communication)을 할 수 없습니다.

 하지만 커널을 활용하면 가능합니다. 



========================= 2 ============================

( 10 : 29 ~  11 : 29 )

 안드로이드 스튜디오 설치 확인 및 실습을 위한 환경설정을 진행하였습니다. 

 또한 안드로이드 어플리케이션이 수행되는 과정, 커널과의 연관성 등에 대해 설명을 해 주셨습니다



설치가 완료 되었습니다. SDK사용 경로를 변경하기 위해 위의 표시된 부분을 클릭하여 설정을 변경해줍니다.



SDK 경로를 변경하는 화면입니다.




또한 프로젝트의 이름 및 패키지 관련 설정을 해 주는 부분입니다.


실습의 편의를 위해 설정값을 위와 같이 해 주었습니다.




장치를 확인하는 첫 번째 방법입니다.


장치를 확인하는 두 번째 방법입니다.


Shell을 사용하여 확인하였습니다.


Build상황을 확인하는 부분입니다.




ADM 버튼입니다.




ADB Shell에서 Process를 확인하는 화면입니다.


화면에서 ID가 1인것은 사용자 프로세스입니다.




실습 기기를 사용했을 경우에는 발생하지 않았던 문제가 발생하였습니다.

본인의 LG G4를 이용하고싶었는데 위와 같은 문제가 있어 해결방법을 검색 후 아래와 같이 해결하였습니다.





위의 방법대로 체크를 한 후에는 문제없이 빌드되는 것을 확인하였습니다.


.

 또한 실습 기기와의 연결을 하는 방법을 간단히 설명 해 주셨습니다.





========================= 3 ============================

( 11 : 40 ~ 12 : 53 )


<실습을 진행하기로 하였습니다.>


위의 이미지는 Eclipse처럼 단축키를 사용할 수 있도록 처리하기 위한 부분입니다.



실습 파일을 Project로 불러와 확인을 해 보고 교제에 있는 내용에 대해 이론수업을 진행하였습니다.


 또한 이번 강의에서 System을 많이 알아갈 수 있기를 바란다는 당부를 여러번 하셨습니다.

기존의 리눅스 커널에 대한 지식이 있으면 Android를 이해하는 데 많은 도움이 됩니다. 


 어플리케이션의 입장에서는 리눅스 커널의 IPC, 멀티테스킹, 쉐어드메모리, 파이프 등의 기술을 쓸 수 있는 프로그래밍이 중요하다고 하셨습니다.

 

실습 코드중 중요한 부분입니다.


Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(this); //this 는 Activity 자신임.


해당 내용은 ID로 객체를 받아오고 리스너 이벤트를 등록하는 코드입니다.

//인텐트 객체를 하나 생성해야 함. => 인텐트는 이동할 때 사용을 함.
Intent in = new Intent(this, NextActitivity.class );
startActivity(in);


새로운 엑티비티를 열기 위해서는 커널을 통해서 우회하여야 합니다.



======================== 점심 ===========================

( 12 : 53 ~ 14 : 05 )


점심시간... 한시간 늦은건 왠지 기분탓만은 아닐거라 믿습니다...



========================= 4 ============================

( 14 : 05 ~ 15 : 06 )



아까 하던 실습의 Error를 잡는것을 하나하나 해 가고 있습니다.



code문제 뿐 아느라 Tools의 version문제를 해결하는 것 또한 잡아가고 있습니다.


code가 아닌 프로젝트의 내용을 고친 경우에는 위의 버튼을 눌러서 동기화를 시켜주어야 합니다.


해당 실습의 경우는 함수호출을 볼 수 있도록 하여 App의 Life Cycle을 확인할 수 있습니다.


Android Dtudio설치

https://developer.android.com/develop/index.html


API가이드

https://developer.android.com/guide/index.html


buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

위의 false를 true로 고치면 압축과 난독화가 가능합니다. 난독화를 하면 Reverse Engineering을 방지할 수 있습니다.


액티비티 라이프 싸이클!


프로젝트 탐색기의 설정을 바꾸어 화면에 표시되는 내용을 달리 볼 수 있습니다. 기본적으로는 Android가 설정되어 있습니다.


서비스 -> UI없이 주기적으로 특정한 일을 수행하도록 하는 백그라운드 프로세스.




예로는 App의 서비스 기능을 사용하는 것이 뮤직플레이어가 있다.


음악을 재생하기 위해서 뮤직 플레이어의 엑티비티가 열리겠고 그 후 음악을 사용자가 선택하여 재생을 하는 경우 서비스로 음악이 재생하도록 하는 것입니다. 사용자가 추가도 동작을 하지 않아도 서비스에서 계속 선택된 음악 파일을 재생하도록 하는 것 입니다.


Log보는 방법중의 하나입니다.



Log.w(TAG, "onUnbind..");

Log의 Method로 e, w,d 등의 한자 알파벳들이 있는데 글자의 색이 달라 보이도록 하며 Error, Debug등의 의미를 담고 있습니다.


라이프 싸이클을 이해하는 것이 중요한 이유는 App의 동작 수행이 라이프싸이클에 대해 이상하지 않은 합리적인 동작을 할 수 있도록 해야하기 때문입니다.



========================= 5 ============================

( 15 : 20 ~ 16 : 33 )


바인더 관련된 이론 수업을 쭉 하고 실습은 진행하였습니다.


eclipse code를 Conversion 해 주는 안드로이드 스튜디오의 기능이 있는데 정상동작 하는 코드의 경우 문제가 없지만 Error가 있는 코드의 경우 정상동작을 하지 않을 수 있습니다.


이너 클래스로 리스너를 등록할 경우 this를 사용하면 Error가 발생합니다.






패키지 이름을 하드코딩하지 않으려면 :을 적고 아니면 하나하나 다 적어줘도 좋습니다.



프로세스를 분리 한 결과 실습 코드를 수행한 후 프로세스가 하나 더 생성된 것을 확인할 수 있습니다.




========================= 6 ============================

( 16 : 50 ~ 17 : 51 )


RemoteServerClient



Stub


Proxy


위의 두가지는 새로나오는 개념입니다.