728x90


모바일 플랫폼은 저성능 CPU,  용량이 작은 메모리, 적은 화면 크기, 배터리 용량 등 제약조건이 있는 환경이다. 따라서 윈도우 기반의 PC/노트북  실행환경과는 프로그램 처리 방식이 다르다.


안드로이드 앱(APP)은 여러개의 Activity들로 구성된다.

안드로이드에서는 앱을 실행시키면 실행되는 단위가 Activity 이다.

하나의 Activity 에서 다른 Activity 를 시작하려면 startActivity()를 호출한다.

안드로이드는 새로운 Activity 가 시작될 때마다 Activity 를 스택에 추가한다. 사용자가 back 키를 누르면 현재 Activity는 스택에서 제거되고 스택에 저장된 이전 Activity로 되돌아간다. 즉, 이전 Activity가 실행 Activity로 복귀된다.


안드로이드 장치에서 사용자와 상호 작용하는 객체(object)는 View 클래스이다.
버튼을 클릭했더니 화면이 바뀐다. 이것은 하나의 Activity 에서 또다른 Activity 로 전환되는 것이다.

안드로이드에서는 Activity 간에 정보 전송을 Intent 라는 메커니즘을 사용하여 한다.

안드로이드는 사용될 Activity 를 AndroidManifest.xml 에 꼭 등록해줘야 한다.

메인 Activity는 자동 등록되지만, 추가한 Activity는 별도로 직접 등록해줘야 한다. (Android Studio 에서는 자동 추가됨)


앱(application) 하나를 만들 때 화면에서 다른 화면으로 데이터가 전송되고 다른 화면에서 데이터를 받는 것을 처리하는 과정을 살펴보자. (테스트 첨부파일은 제일 하단에 있음)


Intent 에는 명시적 인텐트와 암시적 인텐트가 있다.

Intent(Context, Class) 형태는 명시적 인텐트다.


MainActivity.java

 public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.btn01);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,NewActivity.class);
                intent.putExtra("key","값전달 : 90");

                intent.putExtra("age", 32);
                startActivity(intent);
            }
        });
    }
}

 NewActivity.java

 public class NewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        // startActivity 로 보낸 Intent 를 getIntent 메서드를 호출하여 가져온다.
        Intent intent = getIntent();
        // MainActivity 의 putExtra로 지정했던 key 값
        String key = intent.getExtras().getString("key");

        int age = intent.getExtras().getInt("age");

        TextView textView = (TextView) findViewById(R.id.tv_received);
        textView.setText(key);
    }
}


코드의 실행순서

1. NewActivity 인스턴스가 생성된다.

2. 이 인스턴스가 현재 태스크 스택의 최상단에 푸시된다.

3. 액티비티가 시작되며 포그라운드로 가져온다.




// 화면 하단에 글자가 잠깐 나왔다가 사라지는 기능(Toast)

Toast.makeText(getApplicationContext(), "주소록에 저장되었습니다.", Toast.LENGTH_LONG).show();


// 화면에 나타낼 View를 지정, XML Layout의 내용을 메모리상에 객체화하는 역할

// Activity 화면 전체를 설정하는 역할을 한다.

setContentView(R.layout.activity_main); 


// id가 button1 인 것을 찾아 참조변수 button1 에 저장.

Button button1 = (Button) findViewById(R.id.button1); 


// 무명(anonymous) class로 이벤트를 처리 (이벤트를 처리하는 클래스는 다른 곳에서는 전혀 필요 없음)

button1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(), "번호 저장버튼이 눌렸습니다.", Toast.LENGTH_LONG).show();
    }           
});


invalidate();  // View 의 화면을 다시 그리게 하는 메소드



※ 다른 Activity 로 데이터를 보내기만 할 경우에는 startActivity(intent); 메서드를 사용하면 된다.

    응답을 받으려면 startActivity가 아니라 반드시 startActivityForResult를 호출하여 Activity를 실행해야 한다.


MainActivity.java

 public class MainActivity extends AppCompatActivity {

    // requestCode 정의
    public static final int REQUEST_CODE = 101;
    TextView received_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        received_text = (TextView) findViewById(R.id.tv_received);

        Button button = (Button) findViewById(R.id.btn01);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,NewActivity.class);
                intent.putExtra("key","값전달 : 90");
                startActivityForResult(intent,REQUEST_CODE);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent intent){
        if(requestCode == REQUEST_CODE){
            Toast.makeText(getBaseContext(), "응답 요청코드:"+requestCode +" ,
            결과코드:"+resultCode, Toast.LENGTH_LONG).show();
            if(resultCode == RESULT_OK){
                String key = intent.getExtras().getString("newkey");
                Toast.makeText(getBaseContext(), "응답 key :"+ key, Toast.LENGTH_LONG).show();
                received_text.setText("응답 key :"+ key);
            }
        }
    }
}

 NewActivity.java

 public class NewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        // startActivity 로 보낸 Intent 를 getIntent 메서드를 호출하여 가져온다.
        Intent intent = getIntent();
        // MainActivity 의 putExtra로 지정했던 key 값
        String key = intent.getStringExtra("key");

        TextView textView = (TextView) findViewById(R.id.tv_received);
        textView.setText(key);

        Button prevBtn = (Button) findViewById(R.id.btn_replay);
        prevBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {               

                Intent resIntent = new Intent(NewActivity.this,MainActivity.class);
                resIntent.putExtra("newkey","3000");

                // 응답을 하기 위한 메소드
                setResult(RESULT_OK, resIntent);
                finish(); // 현재 화면을 종료(다른 화면을 나타내기 위해)
            }
        });
    }
}



2. 암시적 인텐트

약속된 Action 을 지정하여 안드로이드에서 제공하는 기존 응용 프로그램을 실행하는 것이다.

- 전화번호 입력(Dial)
- 전화 걸기 (Call)
- 오디오 파일 불러오기
- 전화번호부 데이터 불러오기


public void onClick(View v) {
  Intent intent = new Intent(Intent.ACTION_CALL); // 전화를 즉시 걸어주는 기능
  intent.setData(Uri.parse("tel:01067604567"));

  if(intent.resolveActivity(getPackageManager()) != null){

      startActivity(intent);

  }

}



public void onClick(View v) {
  Intent intent = new Intent(Intent.ACTION_DIAL); // 전화번호를 표시만 해주는 기능
  intent.setData(Uri.parse("tel:01067604567"));
  startActivity(intent);
}



public void onClick(View v) {
   Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
   intent.setType("audio/*");
   startActivityForResult(intent, 0);
}


AndroidManiFest.xml 파일에 아래의 퍼미션을 추가해줘야 한다.
<uses-permission android:name="android.permission.CALL_PHONE" />


전화를 거는 동작은 액션으로 ACTION_CALL을 가지고, 전화번호를 입력하는 동작은 액션으로 ACTION_DIAL을 가지며, 두 액션 모두 데이터(Data)로 전화를 걸거나 입력할 번호를 필요로 한다.

보통, 데이터에는 실제 데이터가 아닌 데이터의 주소(URI; Uniform Resource Identifier)가 들어가는데, Dialer, 웹 브라우저, 구글맵 어플리케이션 등에서는 위의 데이터처럼 실제 값을 받게 된다.


다른 어플리케이션 상에 존재하는 Acitivity를 수행 시키고 싶은 경우가 있다.
이런 경우 ComponentName을 이용하여 해당 어플리케이션의 Activity를 호출 가능하다.
ComponentName의 인자로 들어가는 packageName은 패키지명
- 예) com.tistory.link2me.addresschart
ComponentName의 인자로 들어가는 className은 패키지명을 포함하는 클래스명
- 예) com.tistory.link2me.addresschart.MyActivity

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName name = new new ComponentName(String packageName, String className);
intent.setComponent(name);
startActivity(intent);



3. 배열 데이터를 전달하고 싶은 경우

다른 Activity로 넘길때 데이터를 옮길 수 있게 아래의 코드와 같이 getter, setter가 있는 Value Object를 준비한다.
그리고 직렬화 할 수 있도록 Serializable 상속한다.


public class Person implements Serializable {
    private static final long serialVersionUID = 789722909905522166L;
   
    String name;
    int age;
   
    // 생성자 추가
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
   
    // 마우스 우클릭하여  Source --> Generate Getters and Setters ... 선택 (Eclipse 방법)

    // 마우스 우클릭하여 Generate (Alt + Enter)를 선택하고 Getter, Setter 선택(Android Studio)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }   

}

Serializable(직렬화)는 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 스트림(송수신)이 가능하게 하는 것이다.
 - 객체 직렬화를 하기 위해서는 먼저 객체의 Serializable 인터페이스를 구현해야 한다.
 - ObjectInputStream 클래스는 객체를 직렬해제 하는 기능을 제공해 주고 있다.
   . 파일에 저장되어 있는 객체
   . 네트워크를 통해 직렬화되어 전달된 객체
 - ObjectOutputStream 클래스는 객체들을 출력하는 기능을 제공해 주고, 출력 스트림에 출력하기 전에 직렬화를 수행한다.


 보내는

 Activity

 // 보낼 데이터 생성
 Person person = new Person();
 person.setName("홍길동");
 person.setAge(25);

 // 명시적 인텐트 생성 및 보낼 객체 담기
 Intent intent = new Intent(getApplicationContext(), TargetActivity.class);
 intent.putExtra("OBJECT", person);

 // 액티비티 시작
 startActivity(intent);

 받는

 Activity

 Intent intent = getIntent();
 Person person = (Person) intent.getSerializableExtra("OBJECT");


보내는

 Activity

 Intent intent = new Intent(this, ClassB);
 String[] myStrings = new String[] {"test", "test2"};
 intent.putExtra("strings", myStrings);
 startActivity(intent);

 받는

 Activity

 Intent intent = getIntent();
 String[] myStrings = intent.getStringArrayExtra("strings");



마지막으로 새로운 Activity를 작성하면 반드시 AndroidManifest.xml 파일에 등록하여 안드로이드 시스템이 찾을 수 있도록 해야 한다.

Android Studio 에서는 java 파일과 xml 파일을 한꺼번에 생성한 경우에는 AndroidManifest.xml 파일에 자동 등록된다.


----------------------------------------------------------------------------------------------------------------------------------


intent_src.zip


Android Studio 는 main 폴더 파일만 복사하면, 내가 생성하여 연습하는 코드에 붙여넣기가 쉽다.

블로그 이미지

Link2Me

,
728x90

화면 구성된 Graphical Layout 에서 해당 소스가 어디이며 값이 어떻게 넘어가는지 알고 싶다.

물론 대개는 이름을 식별할 수 있게 되어 이름을 지정했을 것이다.


하지만 값을 가지고 File 에서 검색하는 방법으로 찾아보자.

1번 버튼을 클릭하면 우측 화면에 해당되는 버튼명이 Outline 에 표시된다.



버튼명 login_btn 을 검색어에서 검색하고 File name pattens 에서 소스를 찾는거니까 *.java 로 적어준다.




검색된 결과가 나온다. Login.java 파일에 있다는 걸 알 수 있다.

더블클릭하면 해당 파일이 열린다.


블로그 이미지

Link2Me

,
728x90

Spinner 기능은 HTML 의 select 와 유사하다.


Drop down list 로 보여지는 기능을 http://android-town.org/ 사이트에 나오는 DoIt 안드로이드 동영상 강좌를 보고 따라서 해보고 구글링을 해서 약간 변경을 해본 것이다.

동영상 강좌를 보면서 배우는 가장 좋은 점은 eclipse 사용법인 거 같다.

이 사이트에 나오는 동영상은 예제 중심으로 연습하면서 안드로이드가 이런 것이구나 하도록 알려주는 데 효과가 좋은거 같다.

책은 들여다봐도 아직은 감이 잘 잡히지는 않는다. 동영상을 들어야만 비로소 이해가 된다고나 할까...


SQL 교육을 받을 때에도 계속 연습을 시키는데 처음에는 왜 개념 완전히 잡히게 설명안해주고 실습부터 시킬까 하는 의구심이 들었던 적이 있다.

하지만 계속 실습을 하면서 아하 이렇구나 하고 도움이 되기는 하더라.

물론 나중에 다시 복습하고 개념이 이런 것이구나 하고 개념이 잡히는 순간에 활용이라는 걸 할 수 있게 되었지만 말이다.


내것으로 만들기 위해 간단하지만 적어두고 나중에 추가하여 완전히 내것으로 소화를 할 것이다.

이것만으로는 응용할 수는 없다. DB 자료와 연동하여 처리가 될 때 이 기능의 가치가 발휘될 것이다.

개념파악이 되고 나면 다시 이 자료에 살을 붙여서 추가를 할 것이다.


Graphical Layout 에서는 세밀한 조정을 할 수가 없다.

세부적인 화면 구성을 하려면 XML 파일에서 직접 적어줘야 된다는 걸 알았다.

따라서 Layout 에 대한 의미를 제대로 파악하고 있어야 한다.



아래 Graphcal Layout 의 의미를 파악하려면 XML 소스를 살펴보면 된다.


@ : 리소스에서 참조한다는 의미

+ : 새로 생성한다는 의미

id : 식별자를 나타내는 패키지

textView1 : 식별자


XML Layout 에 정의된 View들은 앱이 시작될 때 메모리 상에서 Inflation 이라는 객체화 과정을 거쳐 만들어진다. 메모리상에 만들어진 객체를 참조하기 위해 id 를 지정한다.

id 값은 유일해야 한다. id가 중복되면 에러가 발생한다.

컴파일할 때 eclipse  JUNO 버전에서 문제가 없었는데 eclipse LUNA 버전에서는 에러 메시지가 나오는 걸 확인했고 이 원인으로 인해서 삼성 갤럭시 S7 폰에서 앱이 동작이 안되는 걸 알게되었다.

eclipse Mars 버전에서는 기존 기능이 제대로 동작 안되는 현상도 겪어서 eclipse LUNA 버전 중심으로 코드 연습을 하고 있다.




setContentView(R.layout.activity_main);  // 보여주는 View 가 어떤 Layout 인지 알 수 있다.


spinner1 = (Spinner) findViewById(R.id.spinner1); // id가 spinner1 인 것을 찾아 참조변수 spinner1 에 저장한다.


list 는 C#과 비슷한 거 같은데 세부적인 것은 아직 파악하지 못한 상태다.

list.add 를 하면 계속 사용자를 추가할 수 있고, 중간 끼어넣기 등이 편리하다.

이렇게 직접 처리하는 것보다는 DB 연결해서 처리하는 영역이 될 것이므로 이 부분은 나중을 위해 그런가보다 참고만 하면 된다.



연습하며 작성한 소스코드

MySpinner.zip


참고 : http://www.tutorialspoint.com/android/android_spinner_control.htm 에 가면 설명이 잘되어 있다.


간단한 예제 읽어보기 좋은 곳 http://www.mkyong.com/tutorials/android-tutorial/



Audio Player 만들어보면서 추가한 재생속도 조절 부분만 일부 발췌한 것이다.


public class Player extends AppCompatActivity implements View.OnClickListener {
    // speed values displayed in the spinner
    private String[] getSpeedStrings() {
        return new String[]{"1.0","0.9","1.1","1.2","1.3"};
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player);

        setSpeedOptions();
    }

    private void setSpeedOptions() {
        // 재생 속도 조절
        final Spinner speedOptions = (Spinner) findViewById(R.id.speedOptions);
        String[] speeds = getSpeedStrings();
        ArrayAdapter<String> arrayAdapter =  new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, speeds);
        speedOptions.setAdapter(arrayAdapter);
        // change player playback speed if a speed is selected
        speedOptions.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                if (mediaPlayer != null) {
                    float selectedSpeed = Float.parseFloat(
                            speedOptions.getItemAtPosition(i).toString());

                    changeplayerSpeed(selectedSpeed);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
    }

    private void changeplayerSpeed(float speed) {
        // this checks on API 23 and up
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed));
            } else {
                mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed));
                mediaPlayer.pause();
            }
        }
    }

}



블로그 이미지

Link2Me

,
728x90

eclipse 에서 Pager 연습을 하려고 하는데 에러가 발생하여 메시지를 보여준다.



대체 이걸 해결하려면 어떻게 해야 하나?


구글링을 했더니 Android Studio 사용할 경우의 것은 찾아냈다.

아직은 Android Studio 를 사용하지 않으니까 이것도 맞는 것인지 잘 모르겠다.


http://stackoverflow.com/questions/16993341/cannot-resolve-symbol-drawerlayout


In android studio go to File-> Project Structure -> Modules -> Dependencies -> + symbol -> Library Dependency.
Now search for support library. you will find something like this com.android.support:support-v13
Now, select Jar file named support-v13 (Whatever the version is) and click OK.


Eclipse 에서 Add  하는 방법을 찾아내려고 열심히 탐색을 했지만 대부분 글씨로 되어 있어서 구글링은 포기하고 네이버 검색을 시도했다.

Android SDK Manager Extras 에서 옵션 체크하면 된다고 하는데 해당 옵션이 없다.



힘들게 찾아냈더니 그림으로 설명된 곳을 하나 발견했다. http://ralf79.tistory.com/373

그림을 참조하여 해봤더니 에러 메시지가 사라졌다.






Android SDK Manager 가 계속 버전업이 되면서 메뉴가 바뀌는 거 같다.

이러다보니 자료를 찾아내도 내가 원하는 해결책이 안될 수도 있다는 거....


MAC OS 버전에 대한 자료가 나온 곳인데 https://developer.android.com/studio/intro/update.html

나중에 MAC 버전에서 맞는지 확인하고 필요시 업데이트 해야겠다.


블로그 이미지

Link2Me

,
728x90

소스코드를 정리할 때

코드를 말끔하게 정리하고 싶을 때에는 CTRL + Shift + F 또는 마우스 우클릭하여 Source -> Format 선택한다.


Edit
Content Assist : CTRL + SPACE
- 코드 작성을 도와준다. 자동완성을 지원함


자동 Import 기능

- CTRL + Shift + O 키를 누르면 자동으로 코드에서 사용된 클래스를 찾아서 포함시킨다.


Organize Imports : CTRL + SHIFT + O
- 필요없는 import 제거 (자동으로 사용된 클래스를 추가하기도 하지만 제거하기도 한다)


Add Block Comment : CTRL + SHIFT + /
- 선택된 영역에 대해 주석 처리

Remove Block Comment : CTRL + SHIFT + \
- 주석처리 된 영역 주석 해제

Add Javadoc Comment : ALT + SHIFT + J
- Javadoc타입의 주석 붙임

Format : CTRL + SHIFT + F
- 탬플릿에 지정된 대로 코드 포맷 변경

Indent Line : CTRL + I
- 제대로 된 위치의 들여쓰기

Source Quick Menu : ALT + SHIFT + S
- 빠른 소스메뉴

Toggle Comment : CTRL + /
- 한줄에 대한 주석 처리


생성자 자동 생성

ALT + Shift + S 누른 다음, Generate Constructor From Superclass 선택


Text Editing

Ctrl + W
- 창 닫기

Delete Line : CTRL + D
- 줄 삭제

Duplicate Lines : CTRL + ALT + UP or DOWN
- 줄 복사

Insert Line Above Current Line : CTRL + SHIFT + ENTER
- 현재 줄에 새로 추가

Insert Line Below Current Line : SHIFT + ENTER
- 다음 줄에 새로 추가

Next Word : CTRL + RIGHT
- 다음 문자로 이동

Previous Word : CTRL + LEFT
- 이전 문자로 이동

Window
Maximize Active View or Editor : CTRL + M
- 선택된 뷰 최대화

Switch to Editor : CTRL + SHIFT + E
- 열려있는 에디터간 이동



Navigate
Open Type Hierarchy : F4
- 현재 클래스의 상속관계를 보여주는 창이 열린다.

Quick Hierarchy : CTRL + T
- 간단하게 현재 클래스의 상속 관계를 보여준다.

Quick Outline : CTRL + O
- 현재 클래스의 메서드, 맴버변수등을 보여준다.

Open Resource : Ctrl+Shift+R
- 찾고자 하는 파일을 검색하여 보여준다.

Refactor
Refactor Quick Menu : ALT + SHIFT + T
- 리펙토링 메뉴 바로가기

Rename : ALT + SHIFT + R
- 변수명, 클래스명 등 이름 변경


Layout
버튼 글씨 변경 : F2

- Layout 그래픽 화면에서 버튼을 선택한 다음에 F2키를 누르면 글자를 변경하기 쉽다.


출처 : http://develop.sunshiny.co.kr/175?category=6

자료와 일부 내용은 책을 참조하여 추가했다.

블로그 이미지

Link2Me

,
728x90

eclipse 에서 안드로이드 컴파일 버전이 변경되어야 하는데 변경이 안된다.


아래 그림처럼 하면 변경하는 체크박스가 활성화되는데 설치가 잘못된 것인지 변경할 수가 없다.




checkbox 가 없어서 변경을 할 수가 없다.


테스트하는 폰에 설치한 안드로이드 버전은 5.0.1 까지 지원한다. 4.4.2 에서 OS를 업데이트 했더니 5.0.1 로 변경되었다.

Android 6.0 으로 컴파일을 해서 폰에서 확인하니까 바로 앱이 중지되어 버린다.

변경하는 방법이 없을까 고민하다가 혹시나 하고 project.properties 파일의 내용에서 숫자를 변경하고 저장한 다음에 종료하고 다시 읽어들이기를 했더니 아래 그림처럼 Anroid 4.0.3 으로 변경되었다.




Android 6.0 또는 Anroid 4.0.3 둘다 선택해서 컴파일을 다시 해봤다.

앱이 중지되는 원인은 코드에 참조가 잘못되어서 발생하는 현상이었다.


Visual Studio 2015 에서는 버튼을 생성할 때 Double-Click 을 하면 자동으로 연결되는 event 가 생성되는데 eclipse 안드로이드에서는 버튼 연결의 코드가 자동으로 생성되지 않고 수동 생성해야 한다.

아무튼 원인은 다른 곳에 있었지만, target=android-15 를 수동 변경하는 방법을 해본 것에 의의를 두고 싶다.



블로그 이미지

Link2Me

,
728x90

Windows 10 에서 악성코드가 있다면서 치료하겠나고 해서 치료하겠다고 했더니 그 후에 eclipse 동작이 제대로 안된다. ㅠㅠㅠ 망할 windows 10


그래서 eclipse 를 완전히 새로 설치하겠다고 마음먹고 기존 폴더 전체를 지우고 다시 설치했더니 ADT 설치까지는 잘 된다.


그런데 SDK 인식을 못한다. could not find folder tools inside sdk

폴더 경로를 지정해줘도 안된다.


구글링을 했더니 내가 아는 내용으로만 답변이 나온다.

다시 네이버 블로그 검색을 했더니 구글링 했을 경우와 별반 다른게 없다.

네이버지식인에 답변이 올라온 것을 보고 연결된 블로그를 찾아갔더니 경로설정 부분을 한다고 했던 것이 좀 빠진게 있었다.


http://blog.naver.com/theparanbi/80153328747


정말 정성들여 작성한 흔적이 느껴진다. 아울러 네이버의 쓰레기 검색기준에 대해서도 성토하고 있다.

네이버는 회사이기 때문에 이익을 반영하는 형태로 검색을 하고 있다는 걸 그냥 받아들이지 않으면 나만 피곤해진다.

네이버에서 저품 블로그 현상 겪고 나서 네이버 블로그는 버리고 이곳 티스트리 블로그로 옮겼다.


아무튼 이분 덕분에 SDK 다시 설치하게 되었다.


1. 환경설정 Path 경로 설정이 정말 중요하다.

    컴파일 할때에도 설치된 jdk 를 찾아서 컴파일을 한다.

   SDK 설치할 때에도 환경설정 정보를 제대로 잡아줘야 된다는 거 알았다.

   최초 설치가 아니라 재설치하는 경우라서 그런지 더 중요하다. 




에러 메시지 반복으로 설치, 삭제, 다시 설치를 몇번이나 했는지 모른다.

집에서 설치하는 경우와 회사에서 설치하는 경우 동일한 거 같은데 동작이 집에서는 되는데 회사에서는 안되는 경우도 겪으면서 왜 그런가 하는 의구심만 가지고 .....


windows 10 이 자동 업데이트를 하더니 windows.old 라는 폴더를 만들고 16G 정도 공간을 차지하고 있다.

이러면서 기존 PATH 정보 일부가 빠진건가 하는 의구심도 가져보기도 하고...


아무튼 제대로 모른 상태에서 대략 프로그램 설치하니까 공부 좀 하라고 그러나 보다 생각하련다.

블로그 이미지

Link2Me

,
728x90

안드로이드 개발 배워야 되어서 동영상 강좌 열심히 듣고 있다.


코드에 에러가 생기면

Ctrl + Shift + O 키르를 누르라고 나온다.

누르니까 자동으로 코드가 한줄 import 로 추가된다.


eclipse 프로그램 정말 잘 만들었다는 걸 알게 되었다.

윈도우에서 맨날 EditPlus 로 PHP 코딩만 약간 해서 eclipse 를 사용할 일이 없어서 사용을 안했었는데 정말 잘 만들었다는 걸 동영상 강좌를 들으면서 새삼 감탄하고 있다.

블로그 이미지

Link2Me

,
728x90

eclipse 에서 프로젝트를 생성하는 과정이다.








그래픽 화면이 보이지 않으면 우측 숫자를 변경하면 보일 것이다.

Layout 설정하는 방법이나 코딩에 대한 설명은 안 적는다.




a 는 5번에서 Compile with 를 선택해서 나온 것이다.

이걸 변경해주는 방법은 Project --> Properties 를 선택한다.


블로그 이미지

Link2Me

,
728x90

기존 프로젝트를 받아서 Import 를 해보니 그래픽(Layout)이 인식이 안된다.

기존 프로젝트는 eclipse 버전이 낮은 상태에서 컴파일을 했고 새로 설치한 eclipse 는 버전이 좀 더 높아서 그런가보다.


Layout 에 있는 파일을 실행했더니

This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in

메시지가 뜬다.

구글링을 했더니

  1. Click Help > Install New Software.
  2. In the Work with field, enter: https://dl-ssl.google.com/android/eclipse/
  3. Select Developer Tools / Android Development Tools.
  4. Click Next and complete the wizard.

로 해결책을 제시하는데 설치된 SDK 버전이 더 높은 버전으로 이미 설치가 되어 있는 상태라 이런 방법은 해결책이 안된다.


정답을 모르니까 일단 적어둔다.

아래 방법처럼 해서 해결은 되었다. 그런데 정확한 해결책이 뭔지를 모르겠다.



SDK에 설치된 항목에 따라서 인식이 안될 수도 있어서 화면을 캡쳐해둔다.



하디보니 이걸 설정해줘야 하는 경우도 있는거 같아서 적어둔다.



그런데 왜 체크박스가 안보이는지 모르겠다..

블로그 이미지

Link2Me

,
728x90

안드로이드 개발을 배워야 하는데 폰 인식이 안되어서 삼성 갤럭시 S4 LTE 를 중고로 구입했다.

아이폰 6 PLUS 를 사용하고 있고 그동안 아이폰만 죽 써와서 안드로이드 계열의 폰은 잘 모른다. 필요해서 삼성 갤럭시 S2 를 선불폰으로 개통하여 테스트 했었는데, 이 폰이 인식이 안된다.

아직 다루는 법을 잘 몰라서 발생하는 증상일 수 있다.


가장 먼저 해줘야 할 일은
http://local.sec.samsung.com/comLocal/support/down/kies_main.do?kind=usb

통합 USB 드라이버를 다운로드 받아서 설치해야 한다.


드라이버를 설치하고 나면 윈도우에서 자동으로 폰을 인식한다.

폰 인식이 안되면 개발 디버깅 모드 기능은 동작되지 않으므로 폰 인식부터 시키도록 하는게 첫번째 할일이다.


폰 인식이 된 것을 확인하고 폰과 PC에 USB 케이블을 꼽고 eclipse를 실행했더니 아래 화면처럼 나온다.

테스트는 Macbook Pro 에서도 해보고 윈도우7, 윈도우10 에서도 해봤다.




해결하는 방법은 1번과 2번 둘중의 하나로 ...

1. 폰의 전원키를 길게 눌러서 재시작을 눌러서 재부팅한다.

   그러면 "USB 디버깅을 허용할까요?" 라는 팝업창이 나타난다.

2. 냥 USB 케이블만 뺐다가 다시 꼽으면 USB 디버깅을 허용할까요? 라는 메시지가 나온다.

항상 허용을 체크해주면 다음부터는 체크하지 않는다.

체크후에는 아래 화면처럼 인식된 것을 알 수 있다.




실제 폰에 앱이 설치되게 하려면 안드로이드 디바이스를 선택해줘야 OK 버튼이 활성화된다.


블로그 이미지

Link2Me

,
728x90

이클립스(eclipse) 설치까지 완료되고 나면, 이클립스 안에서 안드로이드 개발을 하기 위해서는 ADT(Android Development Tool) 를 설치해야 한다.


설치를 성공하지 못해서 몇번을 다시 재설치를 했는지 모른다.

기본적으로 설치하는 것은 잘 설치되는데 폰을 인식하는 것에서 실패를 하다보니 전반적으로 뭔가가 꼬인것이 아닌가 싶어서 계속 재설치를 하면서 설치 부분을 파악하고 있는 셈이다.

삼성폰이 오래된 거라 제대로 인식을 못한 것이 아닌가 하는 생각이 들어 중고로 삼성 갤럭시 S4 LTE 를 구입하고 나서 테스트를 해보니 인식이 잘 되었다.

안드로이드 프로그래밍 입문이 쉽지 않군.


아예 캡처를 해서 적어둔다.
















블로그 이미지

Link2Me

,
728x90

안드로이드 개발을 위한 환경 구축


- 안드로이드 앱은 Java 언어와 Kotlin 언어로 작성한다.

  Android SDK 도구를 이용하면 자바 코드를 컴파일하고 리소스와 결합하여

  Android package .apk 를 만들 수 있다.

  apk 파일을 스마트폰으로 다운로드하여 설치한다.

- 안드로이드는 클라우드 컴퓨팅을 지원한다.

- 안드로이드는 사용자 인터페이스를 XML을 사용하여 정의한다.

- 자바 언어의 Class, 인터페이스, 객체(Object) 생성 등을 이해하지 못하면 코드를 읽을 수 없고 응용할 수 없다.

- 자바의 정석 유투브 강좌 듣는 것은 꼭 해야 한다.


개발에 필요한 소프트웨어 준비

1. 자바(java) jdk(java developement kit) 설치

    - Java는 소스코드를 class 파일로 변환하거나, 실행을 하도록 만드는 컴파일러다.

    - 오라클 사이트에서 다운로드 (http://link2me.tistory.com/576 참조)

      윈도우 32비트, 64비트, MAC용 등 자신의 환경에 맞는 것을 설치한다.


2. 안드로이드 스튜디오 설치

    - 안드로이드 스튜디오 (또는 eclipse)는 개발환경을 쉽게 만들어주는 툴이다.

    - 구글이 eclipse 지원을 중단할 것이라고 해서 안드로이드 스튜디오를 설치해야 한다.

    - http://developer.android.com/sdk/index.html 에서 Android Studio 최신버전을 다운로드 받아 설치한다.

      자세한 내용은 책을 구입해서 보면 좋다.

      Do it ! 안드로이드 앱 프로그래밍, 정재곤 지음, 이지스퍼블리싱

      될때까지 안드로이드 - 오준석 (유투브 강좌랑 같이 보면 좋음)

      그림으로 쉽게 배우는 안드로이드 프로그래밍, 천인국 지음, 생능출판

    - PC/노트북의 충분한 처리속도를 보장할 수 있는 고성능(빠른 CPU, 메모리, SSD)을 요구한다.

      eclipse 보다 훨씬 높은 사양을 요구한다.


2.1. 안드로이드 sdk

    - 안드로이드 개발을 위한 인터페이스를 제공해준다.

    - 경로만 설정하면 eclipse 에서 설치된 android-sdks 를 같이 사용해도 된다.


2.2. 안드로이드 에뮬레이터

    - 만든 앱을 테스트로 돌려보는 것이다.

    - 하지만 직접 폰에서 테스트할 수 있게 하는게 좋다.


개발에 필요한 하드웨어(H/W) 준비

- Desktop 컴퓨터 또는 노트북, Macbook

- 최신버전의 안드로이드가 설치된 스마트폰

- USB 케이블 (PC/MACBook 에서 개발하고 컴파일한 apk를 스마트폰으로 다운로드하여 개발 검증)

  삼성폰 통합 USB 드라이버 : http://local.sec.samsung.com/comLocal/support/down/kies_main.do?kind=usb

  다운로드 받으면 용량 25MB 정도 된다.

  케이블을 분리하고 다운로드 받은 파일을 설치한다. 설치한 후에 USB케이블을 연결한다. 



사용자에게 배포하기 전에 실제 장치에서 애플리케이션을 테스트하는 것은 중요하다.

USB 드라이버 설치가 끝나면 실제 장치에서 USB 디버깅 항목을 켠다.

디버깅 항목은 구글에서 숨겨놓아서 보이지 않는다. 장치 설정의 디바이스 정보에서 빌드 번호를 7번 정도 빠르게 터치하면 개발자모드로 전환되었다는 메시지가 등장하면서 USB 디버깅 항목이 나타난다.

USB 케이블과 폰을 연결하고 나서 기기 인식이 되는지부터 확인해야 한다.


개발 준비를 위한 환경 설정

File Encodings

- 통신을 하려면 문자 인코딩 방식이 서로 일치해야 한다. (한글말 하는데 영어로 받아들이면 안되니까~)

- File --> Setting --> Editor --> File Encodings


화면 글꼴이 너무 작다?

- File --> Setting --> Editors --> Colors & Fonts --> Font

- 기본 글꼴은 수정이 불가능하다. 내가 원하는 걸 만들어야 한다.



'안드로이드 > Android Studio' 카테고리의 다른 글

Android Studio Project name 변경  (0) 2017.03.26
Android Studio 메뉴 만들기  (0) 2017.03.25
New Resource File 및 LayoutInflater  (0) 2017.03.17
Android Studio 단축키  (0) 2017.03.13
Android Studio 간편 설치 방법  (0) 2017.02.24
블로그 이미지

Link2Me

,