64일차(2)/Android App(1) : Android Studio 설치, 초기 세팅, 기초
* 안드로이드 개발 프로그램 다운로드 : 링크
- 하단으로 내려가보면 개발자용- Android 스튜디오 및 sdk 가 있다.
- 들어가서 다운로드하면 된다.
- 이 프로그램이 잘 돌아가려면 확인해야 할 것!
- 윈도우 검색 - '환경 변수' - 시스템 환경변수 편집 - 환경변수
- 이곳에 JAVA_HOME 이 있어야 한다!
- 현재 jdk 11로 사용하는 중
- 저 경로(계정)에 한글, 띄어쓰기 금지!
- 다운받은 파일을 실행하면 알아서 설치된다. 따로 바꿀 설정은 없음!
C:\Program Files\Android\Android Studio\bin
- 만약 실행해도 Android Studio가 열리지않는다면...
이 폴더에 직접 들어가서 studio 배치 파일을 열어보기
- 그러면 명령 프롬프트 창이 하나 켜지면서 프로그램이 실행된다.
- studio 윈도우 배치 파일을 계속 열어놓아야 함
이 창을 닫으면 스튜디오도 종료된다..ㅠㅠ
- 설정은 standard. 그냥 default 상태로 설치
- 라이센스를 물어보면 다 ok 하면 된다.
- 이 프로그램을 사용하기 위해서는 컴퓨터에 윈도우, intel chip 이 필요하다.
[ Java, web, spring ]
- IDE : Eclipse 사용
- build system : ant & maven (pom.xml 사용)
(java, jsp 등은 이클립스가 ant로 빌드해주었다.)
[ Android App Dev ] (안드로이드 앱 개발)
- language: Java or Kotlin
(장기적으로 코틀린으로 옮겨가고 있는 추세이다. 나중에는 자바 관련 지원을 하지 않을수도있다. Kotlin도 익혀야 한다.)
- 개발 IDE : android studio (intelliJ)
- build system : gradle (build.gradle 사용. 그래들 문서!)
- intelliJ는 전혀 다른 개발도구이다. 이클립스와는 사용법이 전혀 다르다.
- 안드로이드 스튜디오를 사용하면 intelliJ를 사용하는 것이다.
(이클립스는 무료. intelliJ는 수업용은 무료가 있으나 회사에서는 유료로 사용한다)
- 이클립스보다 버그도 적고 성능도 월등히 좋다.
** MVN Repository : https://mvnrepository.com/
- 필요한 라이브러리를 찾을 수 있다.
- 필요한 jar 파일을 다운받을 수도 있고,
아래 탭을 보고 maven인 경우 문자열을 pom에 복사 붙여넣기하면 되고,
gradle인 경우 그래들 문서에 이 문자열을 붙여넣으면 된다.
- key:value, key2:value2, ... 형태로 작성된다.
- 안드로이드에 관련된 문서 보기
- 안드로이드는 책을 살 필요가 없다.... 기본 설명 문서가 너무 잘 되어 있다.
- 하단의 개발자 리소스. 모든 정보, 공부는 여기서 찾아서 할 수 있다.
* 개발자 가이드 : 링크
- UI 가이드, 샘플 등도 전부 볼 수 있다.
- 모두 한글로 볼수있는 것은 아니다!
** 안드로이드의 앱 구성 요소 4가지!!!
- 앱 기본 요소 (4가지) : 4대 컴포넌트
1) Activity , 2) Service , 3) Broadcast Receiver , 4) Content Provider
1) Activity : 화면(ui)을 제어해주는 컨트롤러.(ui가 있는 컨트롤러) 사용자 입력에 대해 반응한다.
- 앱의 화면 전환이란? 액티비티가 교체되는 것. 하나의 앱에서 화면 하나당 하나의 액티비티가 필요하다.
- UI전개. UI에 어떤 이벤트가 발생하면 그거에 어떤 동작을 해주는 역할을 한다.
- 모바일 앱의 화면 하나하나를 제어하는 것이다.
2) Service : 화면(ui)이 없는 컨트롤러이다. 백그라운드에서 돌아가는 것
- 음악 재생, 동기화나 앱 업데이트 등
ex) 음악 재생 - 화면을 앞에 띄워놓지 않아도 음악이 나온다. 이런 역할을 서비스라고 한다.
- 안드로이드 개발에서는 플랫폼(운영체제)이 Android 이다.
- 아이폰에서는 플랫폼은 ios 이다.
- pc : window / mac os 를 사용
- 전부 전혀 다른 개념이다. 폰에 window, mac os 등을 설치하는 것은 폰에 무리도 가고 사실상 불가능하다.
- 모바일에서 사용하는 플랫폼은 자원이 한정된 이 작은 기기를 위해 만들어진 운영체제이다.
- 처음에는 다양한 플랫폼이 있었으나(블랙베리 등) 지금은 2개만 살아남았다.
- 이 폰에서 돌아가는 어플리케이션을 만든다! app 종류의 다양성은 무궁무진하다.
- 안드로이드 개발자도 범위가 엄청나게 넓다. 그중 좁은 범위만을 개발하는 것..
3) Broadcast Receiver : 방송 수신자. 안드로이드 기기에 발생하는 수많은 이벤트(앱과 상관없음)가 있다.
ex) 와이파이 on/off. 배터리 부족. 전원 연결. LTE on/off 등
- 이런 이벤트가 생겼다고 운영체제가 방송을 한다.
- 방송을 할 테니 이 이벤트가 필요한 앱에서는 이것을 받아서 뭔가 동작해라! 라는 의미로 하는 방송이다.
ex) wifi가 켜졌으니 wifi 기능이 필요한 앱이 있다면 받아서 사용해라~
- 이 방송을 받을 무언가가 Broadcast Receiver 이다. 그러면 방송은 알아서 들어온다.
- 앱 업데이트를 해야하는데 wifi가 켜졌을때만 가능하다면? 방송을 받으면 그때 작업하면된다.
- 기기에서 일어나는 여러 이벤트들을 받아볼 수 있다.
4) Content Provider (컨텐츠 제공자)
- android 운영체제의 기본 앱이 위와 같이 있다고 가정
- 연락처 contracts / 갤러리 gallery 기본앱
- 어떤 앱을 만들고 사용하는 데 연락처나 갤러리정보가 필요할 수 있다.
- 기기에 install 된 다른 앱이 가지고 있는 정보를 가지고와야 할 때가 있다.(마치 DB에서 가져오듯이)
- 그 앱이 컨텐츠를 공급할 수 있도록 만들어놓아야 한다.
다른 앱에게 내가 가지고있는 정보를 공급해줄 수 있도록!
- Contencts Provider는 직접 만들 일은 없고 이미 만들어진 것을 사용한다.(연락처,갤러리 등)
- 내가 원하는 정보만 딱 추려서 가지고 올 수 있다.
- 메인 화면 new project
- 원래는 프로젝트 하나당 앱 하나!! 인데
우리는 연습용으로 프로젝트 하나당 앱 여러개를 만들 것ㅎㅎ
- Activity를 고를 수 있게 되어 있다. Empty Activity 선택.
- 여기서 선택하는 것은 앱이 처음에 런칭되면 사용자를 처음 대면하는 인덱스 화면이다.
- 기본으로 저장되는 경로 기억하기!
- 언어: Java 사용
- Minimum SKD : 버전을 낮출수록 많은 기기를 지원할 수 있지만 개발 난이도가 올라간다.
(5.0으로만 해도 98.8%의 기기를 커버 가능하다.)
- legacy는 구버전 프로그램으로 보이는 것인데, 처음 배우는 것이라서 필요없다.
- 이 편집기는 intelliJ인데 구글에서 안드로이드용으로 개조해놓은 것이다.
MainAcivity
- 화면 구성, 화면을 제어해주는 컨트롤러
- 첫 사용자를 대면해주는 액티비티이다.
- intelliJ 프로그램 설정 변경 : file-settings
- 이클립스의 window-preference와 비슷하다.
- Appearance에서 테마- Light로 바꿔줌
- font 검색해서 크기 조정해주기
MainActivity.java
package com.example.hello;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
//첫 화면을 제어하는 컨트롤러(Activity)
public class MainActivity extends AppCompatActivity {
//액티비티가 활성화될 때 최초 호출되는 메소드
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// res/layout/activity_main.xml 문서를 전개해서 화면 구성하기
setContentView(R.layout.activity_main);
}
//버튼을 눌렀을대 호출될 예정인 메소드
public void clicked(View v){
Toast.makeText(this, "버튼을 눌렀네요", Toast.LENGTH_SHORT).show();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hi Hi World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="19dp"
android:onClick="clicked"
android:text="Button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="58dp"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:srcCompat="@tools:sample/avatars" />
</androidx.constraintlayout.widget.ConstraintLayout>
- 이 App를 Module 이라고 부른다.
- 보통 모듈 하나당 앱 하나라고 보면 된다.
- 우상단에 App이 선택되어있고 기기가 정해져있다. 옆의 ▶ 버튼으로 run!
- 우측하단에 가상기기가 있다. 이 기기의 로딩이 좀 오래걸림ㅋㅋㅋ
- 이게 잘 돌아가려면 pc의 메모리가 커야 한다...
- empty 를 선택하면 첫화면이 이렇게 출력된다.
- run 하니까 많은 일이 일어났다 1-2-3 이 프로그램 안에 자동화되어 있다.
1) xxx.apk file을 만든 다음 (안드로이드 앱용 파일)
2) 가상기기에 install (설치) 하고
3) launch (실행) 해준 것!
- App을 apk 파일로 만들어주는 것이 gradle이다.
- 가상기기 구동이 오래걸리므로 좀 미리 띄워놓는 것이 좋다.
- 너무 느리면 좀 성능을 낮게 해서 다시 만들 수도 있다.
- 이렇게 기기에 앱이 인스톨 된 것을 볼 수 있다.
- 기본 구성: manifests, java, res(리소스)
- manifests : 앱 설정 파일(configuration)
- java : 동작을 코딩하는 곳(프로그래밍). 맨 위의 폴더만 보면 된다.
- res : 이미지, html, xml, text 등 여러 자원을 넣어두는 곳
- 모든 화면 레이아웃을 코딩으로 하면 너무 힘들다... html없이 js만으로 웹페이지를 만드는 것과 같다.
- res 안에 들어가보면 layout 이 있다. 화면 구성은 이 xml 파일에서 한다.
- 만약 실수로 어떤 창을 껐다면, Android Studio의 기본 레이아웃으로 돌아가는 방법!
- window-restore default layout
- Activity 하나가 화면 하나! 어떤 화면을 전개할지는 이 안에 들어있다.
- 우상단 Code 눌러보면 원본 소스를 볼 수 있다.
- html 소스 만들듯이 작성되어 있다.
- textView 내용 수정해보기
- 이 버튼을 누르면 앱을 다시 런칭하는것이 아니고, 변경된 사항만 적용시킬 수 있다.
- 아니면 굳이 다시 적용하지 않아도 design 탭에서도 볼 수 있다.
- 저 버튼 메뉴를 그대로 드래그해서 버튼을 만들 수 있다.
하지만 그냥 만든 상태로는 오류가 나는데,
- 이 요술봉 버튼을 눌러서 배치하면 된다.
- 대충 넣으면 저 요술봉이 알아서 여러 제약조건을 피해서 자리를 넣어준다.
- 코드에 버튼 요소가 들어와 있다!
- 드래그앤 드랍으로 UI를 코딩해준다.
- 어떤게 편한지는 때에 따라 다르다. 둘다 해볼 예정
- 지금은 버튼을 눌러도 동작하지 않는다. 그냥 버튼만 있을 뿐이다.
- 이것을 실행하려면? 어떤 메소드가 호출되고 어떤 동작을 하도록 코딩해야 한다.
- ctrl+space 하지않아도 자동으로 나온다. 엔터만 치면 import된다.
- View를 전달받는 메소드를 만들어서, 클릭시 호출되도록 했다.
- Android Studio는 개발자를 도와주는 게 많은 프로그램이다.
- 저렇게 자리 앞에 context: 라고 이 자리에 들어가야 할 매개변수가 뭔지 보여준다.
public void clicked(View v){
Toast.makeText(this, "버튼을 눌렀네요", Toast.LENGTH_SHORT).show();
}
- 클릭하면 토스트 메시지가 뜨는 메소드 만들기
- 지금 이 메소드는 버튼과 연결되어 있지 않다. 버튼과 아무 상관이 없다.
- 레이아웃 - code 로!
- 이 버튼을 클릭하면 clicked 라는 메소드를 호출한다는 뜻이다. 적당한 위치에 넣어준다.
- 다시 실행해보면 클릭시 어떤 이벤트가 발생한다.
- 가볍게 살짝 떴다가 사라지는 메세지를 Toast 메세지라고 한다.
<button onclick="clicked()">push</button>
<script>
function clicked(){
alert("clicked!!");
}
</script>
- html 로 작성하면 이런 내용과 비슷한 느낌이다.
- javascript를 미리 준비해놓고 그 안에서 뭘 할것인지를 저 안에 적어주는 것.
- 하지만 저렇게 하는 대신 기본적으로 id를 부여해서
document.querySelector(#id) 이벤트 리스너를 등록하는 형태로 주로 했다.
- 위와 같이 하는 것은 별로 좋은방식은 아니다.
- button에도 기본으로 id가 붙어있다.
- 저 id를 사용해서 이벤트리스너를 불러와서 동작을 정의할 수도 있다.
- imageView도 끌어놓아 보기. 마찬가지로 요술봉을 쓰면 위치가 자동으로 조정된다.
- 저 이미지는 진짜로 run하면 기기에 나오지 않는다. 실제 이미지를 써야만 나온다.
'국비교육(22-23)' 카테고리의 다른 글
65일차(2)/Android App(3) : Button, Toast 메시지 (1) | 2023.01.10 |
---|---|
65일차(1)/Android App(2) : 주요 파일 구성 및 Layout 익히기 (0) | 2023.01.09 |
64일차(1)/Spring Boot(13) : static 폴더 활용하기 (0) | 2023.01.06 |
63일차(2)/Spring Boot(13) : Boot에서 war파일 생성(3) (0) | 2023.01.05 |
63일차(1)/GitHub : Pull Request (0) | 2023.01.05 |