이클립스 설치 후  (저는 Version: Mars.2 Release (4.5.2) 설치함)


메뉴에서 Help에서  Install new software를 선택합니다


그리고 Add를 누르고


Name 에는 ADT

Location 에는 https://dl-ssl.google.com/android/eclipse/


를 입력하고 OK를 누르면 아래와 같이 생깁니다

Developer Tools를 체크한 후 next 한 다음 동의를 하고 피니쉬를 누릅니다.


그러면 이클립스를 리스타트 합니다.





이클립스가 리스타트 되면 sdk경로를 잡아주라고 하는데

sdk를 설치한 경로를 잡아주면 됩니다. (sdk설치는 따로 설명하지 않습니다)




네이버 개발자센터에서 프로젝트관리로 들어간 후 


멤버관리에서 사용자 추가를 누른후 


멤버로 등록할 사람의 네이버 아이디를 입력하고 추가하면


그 아이디로 메일이 날라간다.


그 메일을 확인해서 비밀번호를 설정하면


15분후 프로젝트에 접근가능해진다.

이미지뷰나 이미지버튼의 src

이미지를 넣었는데 너무 커보이거나, 공백을 없애거나, 영역에 안맞춰져 보일 때


setScaleType을 쓰면 조절 가능 하다


///////////////////////////////


<ImageButton
android:id="@+id/btn_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:src="@drawable/btn_back"
android:scaleType="centerInside" //이 부분
/>


////////////////////////////////


MATRIX = 원본 크기 그대로 보여줌 (왼쪽상단 정렬) 
CENTER = 원본 크기 그대로 보여줌 (가운데 정렬)
CENTER_CROP = View 영역에 공백이 있으면 채워서 보여줌(비율유지)
CENTER_INSIDE = View 영역을 벗어나면 맞춰서 보여줌(비율유지)
FIT_START = View 영역에 맞게 보여줌 (왼쪽상단 정렬, 비율유지)
FIT_CENTER = View 영역에 맞게 보여줌 (가운데 정렬, 비율유지)
FIT_END = View 영역에 맞게 보여줌 (왼쪽하단 정렬, 비율유지)
FIT_XY = View 영역을 가득 채워서 보여줌(비율유지 안함)


drawable 폴더에 이미지를 넣으려고 하는데


원래 나는 drawable-xxhdpi 폴더에만 고해상도 파일을 넣어놓고 다른 폴더에는

넣어놓지 않았었는데

폴더별로 해상도크기에 맞춰 넣어놓는 것이 좋다는 이야기를 들었다.


폴더별 해상도는


◎ drawable-hdpi(high) : 고화질 ~240 dpi


◎ drawable-ldpi(low) : 저화질 ~120 dpi


◎ drawable-mdpi(medium) : 중간화질 ~160 dpi


◎ drawable-xhdpi(extra-high) : ~320dpi


◎ drawable-xxhdpi(extra-extra-high) : ~480dpi



//////////////////////////////////



고해상도 파일을 이용해 자동으로 저해상별로 파일을 만들어 주는 사이트


http://romannurik.github.io/AndroidAssetStudio/icons-launcher.html#foreground.space.trim=1&foreground.space.pad=0&foreColor=607d8b%2C0&crop=0&backgroundShape=square&backColor=ffffff%2C100&effects=none




현재 클래스의 이름을 가져오려면


public String getClassSimpleName() {

        return this.getClass().getSimpleName();

}


요걸 사용하면 되고


/////////////////////////////////////////


패키지 + 클래스 이름을 원하면


public String getClassName() {

        return this.getClass().getName();

}


요걸 사용하면 된다

개발하다 보면 APP을 종료해도 저장되있는? 그런 저장 공간이 필요하다.


예를들어 환경설정에서 설정한 내용을 저장해서 APP을 실행할 때 저장한 설정 내용을 불러오거나 


간단한 데이터를 저장해 놓앗다가 가져오거나 할 때 preference를 사용하면 편리하다


/////////////////////////////////////////////////////////

Preferences.java


public class Preferences {

protected SharedPreferences preferences;
protected SharedPreferences.Editor editor;

public Preferences(Context context) {
this.preferences = context.getSharedPreferences("APPNameData", context.MODE_PRIVATE);
this.editor = this.preferences.edit();
}

public boolean getBoolean(String key) {
return this.preferences.getBoolean(key, false);
}

public boolean getBoolean(String key, boolean defValue) {
return this.preferences.getBoolean(key, defValue);
}

public void putBoolean(String key, boolean value) {
this.editor.putBoolean(key, value);
this.editor.commit();
}

public String getString(String key) {
return this.preferences.getString(key, "");
}

public String getString(String key, String defValue) {
return this.preferences.getString(key, defValue);
}

public void putString(String key, String value) {
this.editor.putString(key, value);
this.editor.commit();
}
//밑으로는 실제로 사용할 데이터 get set

public boolean isPushIdInsert() {
return this.getBoolean("PUSH_STATE_INSERT", false);
}

public void setPushIdInsert(boolean value) {
this.putBoolean("PUSH_STATE_INSERT", value);
}

public String getMainWebUrl() {
return this.getString("MAIN_WEB_URL", "def_data_str");
}

public void setMainWebUrl(String value) {
this.putString("MAIN_WEB_URL", value);
}

}




//////////////////////////////////////////////////////////////////////

MainActivity.java


public class MainActivity extends AppCompatActivity{

private Preferences preference;

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

preference = new Preferences(this);
 

//사용법
setupWebview(preference.getMainWebUrl());

//preference에 저장되어있는 MainWebUrl String을 가져온다

}

}




'공부 > Android' 카테고리의 다른 글

(Android) drawable 이미지 관리  (0) 2016.03.21
(Android) class 이름 가져오기  (0) 2016.03.20
(에러) Default Activity not found  (1) 2016.03.08
(Android) 키 해시 구하기  (1) 2016.03.07
(Android) WebView 사용법  (0) 2016.03.06

Could not identify launch activity: Default Activity not found


이런 에러가 날 때가 있다.

////////////////////////////


불러오려는 Activity가 정의? 되어 있지 않아서 찾지 못하여 에러가 나는 것 같다.

보통 Activity를 생성하면 AndroidManifest.xml 에 등록하는데


이 과정에서 AndroidManifest.xml에 잘 못 등록 되었거나, 등록되지 않았을 때

에러가 발생한다.


보통 나 같은 경우에는 급하게 해서

AndroidManifest.xml에서 </activity> 태그를 빠뜨리거나 잘 못써서

에러가 한번씩 났었다.

카카오 api를 사용하려고 kakaoDevelopers 에서 개발가이드를 보며

따라하고 있는데 앱 생성/등록을 하여야 되서 하고있던 중에


키해시를 등록해야만 가능하다 해서 가이드에 있는

keytool을 이용한 방법, openssl을 이용한 방법 등을 해보았는데

나는 둘다 할 수 없었다. 


(cmd에서 keytool을 써서 해보니 키가 제대로 나오지 않고 깨어진?글자들이 나왔고

openssl을 쓰니 base64 부분에서 에러가나면서 openssl이 종료되었다.)


그래서 다른 방법을 알아보던 중

메소드를 이용해 로그를 찍어 해시 키를 구하는 방법이 있는 것을 알았다.


///////////////////////////////////


private void getAppKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
Log.d("Hash key", something);
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("name not found", e.toString());
}
}


//////////////////////////////////


이렇게 하고 getAppKeyHash(); 을 실행하면

로그부분에 D/Hash key: !#()%*&!#(%*&)!%)!= 이런식으로 찍히는 것을 확인 할 수 있다.


toByteArray에서 에러가 생긴다면 import를 잘못한 것이다. (Signature 부분 import를 확인해보기 바랍니다)

(android.content.pm.Signature; 이거로 임포트 되어야 함)


웹뷰는 웹페이지를 보여주는 위젯


/////////////////////////

MainActivity.java


private WebView  mainWebView;


@Override

protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.activity_main);


     mainWebView = (WebView ) findViewById(R.id.main_web_view);


     mainWebView.getSettings().setJavaScriptEnabled(true);

     mainWebView.getSettings().setSavePassword(true);

     mainWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

     mainWebView.getSettings().setAppCacheEnabled(true);

     mainWebView.getSettings().setSupportMultipleWindows(true);

     mainWebView.getSettings().supportZoom();


     mainWebView.loadUrl("https://m.facebook.com");

}



/////////////////////////

content_main.xml


<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 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:id="@+id/main_r_view"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    app:layout_behavior="@string/appbar_scrolling_view_behavior"

    tools:context="~~~~~~~~~~~~"

    tools:showIn="@layout/activity_main">


    <WebView

        android:id="@+id/main_web_view"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_margin="8dp">

    </WebView>


</RelativeLayout>


※ 물론 AndroidManifest.xml 에 
<uses-permission android:name="android.permission.INTERNET" /> 
권한 추가

/////////////////

webview에 여러가지 기능들을 입힐 수 있는데 
자세한 설명은

참조




웹뷰를 구현하고 테스트 하다 보면 뒤로가기가 이상하다는 것을 느낄 수 있다.

웹페이지에서 링크를 타고 다른 페이지로 넘어간 뒤

뒤로가기 버튼을 누르면 이전페이지가 나올것 같지만 그렇지 않다.

앱이 종료되거나 액티비티가 종료되고 이전 액티비티로 넘어간다.


해결방법은

////////////////////////////////


@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {


    if((keyCode == KeyEvent.KEYCODE_BACK) && mainWebView.canGoBack()){

        mainWebView.goBack();

        return true;

    }

    return super.onKeyDown(keyCode, event);

}

위 소스를 추가해주면된다


onKeyDown 는 키가 눌러지는 것을 확인하는 리스너인데


뒤로가기 키가 눌러졌을 때 

뒤로갈 페이지가 있다면(  mainWebView.canGoBack())  )

페이지 뒤로가기를 하고

없다면 원래 뒤로가기 기능을 수행하게 한다.



android 에서 웹페이지를 띄우기 위해서는 webview를 사용하면 된다


밑에 구조는 content_main.xml을

activity_main.xml 이 include하고 있는 형태다


/////////////////////


content_main.xml


<WebView

    android:id="@+id/main_web_view"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

</WebView>

/////////////////////


MainActivity.java


public class MainActivity extends AppCompatActivity {

    private WebView  mainWebView;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        mainWebView = (WebView ) findViewById(R.id.main_web_view);


        mainWebView.getSettings().setJavaScriptEnabled(true);

        mainWebView.loadUrl("http://m.naver.com");


    }

}


///////////////////////


이렇게하면 webview를 배치했던 곳에 모바일 네이버가 띄게 된다.


웹페이지를 띄우는 것이기 때문에 당연히 

<uses-permission android:name="android.permission.INTERNET" />

권한이 필요하다.



svn연동을 하고 commit테스트를 하려고 보니 

Local Changes에 엄청나게 많은 소스들(변경되어 커밋 할수있는..)이 표시 되어 있었다.


항목을 눌러 자세히 보니 build폴더안의 파일들, gradle안의 파일들 등

커밋 할 필요없는 파일들도 커밋 항목에 올라가 많아 보였던 것이다.


커밋체크가 필요하지 않는 파일들은 ignore (무시) 를 해주면 되어

하는 방법을 검색 후 ignore 해보려 했지만 계속 실패 했다.

(해당 폴더 또는 파일 오른쪽 클릭 후 subversion -> ignore 에 들어가는 메뉴가 

 애초에 클릭이 안되어 좀 이상했다.)


여러가지 방법이 있었는데



1) svn:ignore에다가 하면된다.

-> svn:ignore을 찾을 수 없었음


2) File -> settings -> version control -> ignored Files 에서 등록

-> 등록은 해보았는데 ignore 되지 않았다.


3) .gitignore 파일에서 등록

-> 구글에서 검색하니 .gitignore에 등록하는 방법은 git을 사용할 때만 되는 것이 아니라

   svn에서도 통한다고 해서 설정 해보았는데 이것도 안되었다.


4) Tortoise SVN 설치

-> 나는 Apache Subversion을 연동하여 사용했는데 구글에 검색하니 Tortoise SVN을 사용하면

    된다고 하는 것 같아 해보려했지만 귀찮아서 해보지 못했다.


위에 방법으로 다 안되거나 해보지 못하여

결국 선택한 방법은


VCS -> commit Changes에서 커밋 할 필요없는 폴더를 오른쪽 클릭 후

Move to another changelist 를 선택하여 default 리스트에서 빼버렸다.


이렇게 하고 change list를 default를 해놓고 커밋을 하니

내가 원하는 파일들만 커밋 되었다.


약간 완벽하지 않은 방법이긴 하지만 간편하게 할 수 있는 방법이다.

소스 형상관리를 위해 git을 써보려다 git은 private (비공개)로 하려면 돈이 들어서


네이버 svn 을 이용해서 안드로이드 스튜디오와 연동해 보았다.


/////////////////////////////////////////////////////////////////////


우선 네이버 개발자센터에서 로그인 후 -> 오픈 소스 -> 오픈 프로젝트 -> 프로젝트 등록

에서 이름, 아이디, 공개설명, 관리시스템 항목을 입력하고 확인을 누른다.


그리고 만든 프로젝트로 들어가서 왼쪽 메뉴에 프로젝트 관리 -> 공개정보 에서

모두 비공개로 설정 후 확인을 누른다


왼쪽 코드 -> 코드 트리보기 를 눌러 비밀번호를 바꾸고 15분 기다린다.


15분 기다린 후 다시들어와 보면 코드 트리가 생성되있는 것을 확인 할 수 있다.


여기까지 네이버에 svn 저장공간을 만든거고


///////////////////////////////////////////////////////////////////


이제는 안드로이드 스튜디오와 연동을 하고 

작업중이던 프로젝트나 작업하려는 프로젝트의

파일을 저장소에 올려놓는 작업(import)을 하겠다.


안드로이드 스튜디오는 svn프로그램이 설치되어있지 않으니

설치해주고 연동을 해주어야 한다.


https://www.visualsvn.com/downloads/

이곳에 들어가서 Apache Subversion command line tools 을 설치 후 

적당한 곳에 압축을 풀어놓는다.


안드로이드 스튜디오(이하 안스) 를 실행하여 File -> settings 로 들어가

verision control 의 subversion에 들어가서 

use command line client에 설치한 svn의 경로 (bin안의 svn.exe)를 지정 해 준다.


여기까지 안스와 설치한 svn이 연동되었고

네이버 svn 과 연동해 보겠다.


//////////////////////////////////////////////////////////////////////////////////////


안스에서 file -> new -> project form version control -> surbversion 에 들어가

플러스 버튼을 누른 후 

네이버 개발자센터에서 코드트리보기 항목에서 보았던 https://dev.naver.com/svn/아이디   주소를 입력한다.


이렇게하면 네이버 svn 저장소와 연동된것이다.


////////////////////////////////////////////////////////////


다음은 최초 프로젝트를 저장소에 올려야 하는데 (import)


안스에서 vcs -> import into  version control -> import into subversion 을 누른다


실행된 팝업창에서 trunk 폴더 밑에 해당 프로젝트 이름으로 폴더를 하나 더 생성하고 확인을 누른 후


만든 폴더를 선택하고 import를 누른다


그러면 import할 프로젝트의 경로를 지정하는 창이 뜨는데

그 창에서 최초의 프로젝트 파일을 선택 해 준다.


commit message 를 대충 ( ex) project start!! ) 써준 후 ok를 누르면 import 된다


아이디와 비밀번호 입력 창이 나오면 네이버 개발자센터에 로그인햇던 아이디와 

소스트리보기에서 설정했던 비밀번호를 입력하면 된다.


import가 끝나면 네이버 개발자센터에서 소스트리 보기 항목에서

최초의 프로젝트 소스가 올라가 있는 것을 확인 할 수 있다.


여기까지가 최초의 프로젝트를 네이버 저장소에 옮겨놓은 것이 된다


/////////////////////////////////////////////////////////


이제 올려놓은 최초프로젝트를 내려받아야 하는데 


File -> new -> project from version control -> subversion 을 선택하여

trunk 밑의 만들었던 폴더를 선택한 후 check out 해주면 된다.



 


안드로이드 스튜디오로 넘어오면서 mipmap 이라는 폴더를 처음보았다.

안에보니 drawable에 들어가 있어야할 안드로이드 기본 아이콘(ic-launcher)  들어가있었다.


drawable 과 mipmap의 차이점에 대해 알아보니


drawable

 For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe Drawable shapes or Drawable objects that contain multiple states (normal, pressed, or focused). See the Drawable resource type.


mipmap

 For app launcher icons. The Android system retains the resources in this folder (and density-specific folders such as mipmap-xxxhdpi) regardless of the screen resolution of the device where your app is installed. This behavior allows launcher apps to pick the best resolution icon for your app to display on the home screen. For more information about using the mipmap folders, see Managing Launcher Icons as mipmap Resources.


이렇게 설명되어 있는데 해석하자면


drawable 폴더는

이미지 자원을 위한 폴더이고


mipmap 폴더는

런처이미지 아이콘을 위한 폴더이다.



참조

http://sunphiz.me/wp/archives/1608

Editing

 

Ctrl + Space : 기본 코드 완성

Ctrl + Shift + Space : 스마트 코드 완성(예상되는 타입의 메소드또는 변수명 )

Ctrl + Q : 빠른 문서보기

Shift + F1 : 외부 문서보기(http://developer.android.com/reference로 이동)

Ctrl + mouse over code : 간단한 설명.

Alt + Insert : Generate code( Getters, Setters, Constructors, hashCode/equals, toString )

Ctrl + O : Override methods

Ctrl + I : Implement methods

Ctrl + Alt + T : Surround with… (if..else, try..catch, for, synchronized, etc.)

Ctrl + / : 한줄주석

Ctrl + Shift + / : 블럭주석

Ctrl + W : 연속적인 코드블럭 선택

Alt + Enter : 빠른수정.

Ctrl + Alt + L : Reformat code
Ctrl + Alt + O : Optimize imports
Ctrl + Alt + I : Auto-indent line(s)

Ctrl + Shift + V : 이전에 클립보드에 복사한 히스토리 열기.

Ctrl + D : 라인복제 또는 선택블록 복제

Ctrl + Y : 라인삭제

Ctrl + Shift + J : 라인합치기(Smart line join)

Ctrl + Enter : 라인분리(Smart line split)

Ctrl + Shift + U : 대소문자 변환

Ctrl + Shift + ] / [ : 코드블럭 처음또는 끝까지 선택

Ctrl + Delete : 단어끝까지 삭제

Ctrl + Backspace : 단어처음까지 삭제

 

 

 

Search/Replace

 

Double Shift : 모든곳에서 찾기.

Ctrl + F : 찾기

F3 : 다음찾기

Shift + F3 : 이전찾기

Ctrl + R : 바꾸기

Ctrl + Shift + F : 경로에서 찾기(Find in path)
Ctrl + Shift + R : 경로에서 바꾸기(Replace in path)

 

 

 

Usage Search

 

Alt + F7 / Ctrl + F7 : 사용내용 전체찾기 / 파일에서 사용한것 찾기
Ctrl + Shift + F7 : 현재파일에서 하이라이트
Ctrl + Alt + F7 : 사용된것 새창으로 보여줌.

 

 

 

Compile and Run

 

Shift + F10 : Run

 

 

 

Debugging


F8 : Step over
F7 : Step into
Shift + F7 : Smart step into
Shift + F8 : Step out
Alt + F9 : Run to cursor
Alt + F8 : Evaluate expression
F9 : Resume program
Ctrl + F8 : Toggle breakpoint
Ctrl + Shift + F8 : View breakpoints

 

 

 

Navigation


Ctrl + N : 클래스 열기
Ctrl + Shift + N : 파일열기
Ctrl + Alt + Shift + N : Go to symbol
Alt + Right/Left : 문서탭이동

F12 : 이전에 사용한 도구창 열기

Shift + Esc : 마지막에 사용한 도구창 닫기
Ctrl + G : 줄번호로 이동.
Ctrl + E : 이전에 열었던파일 목록창 열기
Ctrl + B or Ctrl + Click : Go to declaration
Ctrl + Alt + B : Go to implementation(s)
Ctrl + Shift + I : Open quick definition lookup
Ctrl + Shift + B : Go to type declaration
Ctrl + U : super-method/super-class 이동.
Alt + Up/Down : 이전/다음 함수 이동

Ctrl + ] / [ :  코드블럭 처음/끝 이동
Ctrl + F12 : 파일 구조보기

F2 / Shift + F2 : 다음/이전 하이라이트된 에러로 이동.
F4 : 해당 소스로 이동

 

 

 

Refactoring

 

F5 : 복사
F6 : 이동
Alt + Delete : 안전하게 삭제(지우기전에 사용된곳 확인 가능)

Shift + F6 : 이름바꾸기

 

 

 

Live Templates


Ctrl + Alt + J : Surround with Live Template
Ctrl + J : Insert Live Template
iter : Iteration according to Java SDK 1.5 style
inst : Check object type with instanceof and downcast it
itco : Iterate elements of java.util.Collection
itit : Iterate elements of java.util.Iterator
itli : Iterate elements of java.util.List
psf : public static final
thr : throw new


출처 http://blog.naver.com/komseki/130185867089

한글이 ???? 이렇게 깨지는 경우가 있다.


이럴 떄는 상단메뉴의


File -> Settings -> Editor -> File Encodings 에서


IDE Encoding, 

Project Encoding, 

Default encoding for properties files


3개의 항목을 전부다


UTF-8   로 바꾸어 주고 안드로이드 스튜디오를 재실행 하면 된다.

안드로이드 스튜디오를 설치하고나서 테마를 변경해보고 싶다면


상단메뉴에서


FILE  -> Settings -> Appearance & Behavior -> Appearance 로 들어간다음


UI Options 에 있는 theme 를 수정해 주면된다


테마는  windows, IntelliJ, Darcula  3개가 있다


Darcula가 난 마음에 든다

+ Recent posts