국비교육(22-23)

64일차(2)/Android App(1) : Android Studio 설치, 초기 세팅, 기초

서리/Seori 2023. 1. 6. 18:30

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하면 기기에 나오지 않는다. 실제 이미지를 써야만 나온다.