728x90

●카페24 톰캣 재시작

- putty 프로그램을 다운받아 실행한다.

 

-아래 그림처럼 '카페24아이디.cafe24.com'를 입력한다.

 



 

- 아이디, 비밀번호를 입력한다.

 

 

 

 



 

 

 

- ./toomcat/bin/shutdown.sh 를 입력하면 톰캣이 정지한다.

 

 



 

 

 

./tomcat/bin/startup.sh 를 입력하면 톰캣이 시작한다.



시작을 할려면
tomcat/bin/catalina.sh start

중지를 할려면
tomcat/bin/catalina.sh stop 



출처:http://hyunssssss.tistory.com/210

Posted by 앗뜨거
,
728x90

보통 Mysql DB 덤프를 뜰때 OS 가 리눅스인 경우가 많았다리눅스에서는

shell 로 들어가서 아래와 같은 명령어로 dump 를 떠서 백업하고 복구를

하면 된다.

 

특정 데이타베이스 하나만을 백업

백업형식 : myslqdump -u DB계정명 -p 백업대상데이터베이스명 > 저장할파일명

복구형식 : mysql -u DB계정명 -p 복구할테이터베이스명 < 저장할파일명

 

# ./mysqldump -u root -p mysql > mysql.sql      //mysql 디비 백업 예

# ./mysql -u root -p mysql < ./mysql.sql           //mysql 디비 복구 예

 

하지만 OS  ms 계열일때 어떻게 할까? MySql 을 설치하게 되면

MySQL Command Line Client 라는게 있는데 여기에서 명령어를

실행하면 되지 않을까아래 그림에서 보는것과 같이 문법 에러가 난다.



mysqldump 명령어를 실행하기 위해서는 mysql 이 설치 되어있는 곳에 bin 폴더로 간다

그중 mysqldump.exe 가 있는데 cmd 창에서 이것을 이용해 명령어를 실행하면 된다.

문법은 위에서 제시한 것과 동일하다.

문법에 맞게 계정명과 DB명을 입력하고 출력될 파일명을 적은후 Enter 를 치면

패스워드 입력창이 나타나게 되는데 DB 접속 패스워드를 입력하면 된다.



복구는 문법이 mysql 로 시작한다그러므로 bin 폴더안에 mysql.exe. 를 커맨드

창에서 실행해서 복구를 하면 된다.

만약 DB 복구가 여의치 않다면 파일을 문서유틸로 열어서 Toad 같은 DB 관리 툴에

복사한후 실행을 시키면 DB 테이블 생성과 데이타가 함께 들어가서 원상 복구가 된다.



출처: http://mainia.tistory.com/590


'프로그래밍 > MySQL' 카테고리의 다른 글

MySQL 사용자 관리 명령어  (0) 2014.09.14
mysql에 cvs 파일을 넣는방법  (0) 2014.09.11
[MySQL]데이터베이스의 생성 및 관리  (0) 2014.07.13
[MySQL] 명령어 정리2  (0) 2014.07.09
[MySQL] Rank계산  (0) 2014.07.08
Posted by 앗뜨거
,
728x90

MySql 기준으로 설명하겠습니다.

 

1. 라이브러리 다운로드 및 복사

 

http://dev.mysql.com/downloads/connector/j/ 에서 환경에 맞는 커넥터를 다운받습니다.

 

 



 

 

mysql-connector-java-5.1.20-bin.jar 파일을 복사하여 %CATALINA_HOME%\lib 폴더 안에 넣어주세요.

(저의 경우는 C:\tomcat\lib 입니다.)

 

해당 폴더내에 tomcat-jdbc.jar 파일이 있는지 확인하시고 없다면,

http://tomcat.apache.org/download-70.cgi 을 통해서 재설치하시는걸 권합니다.

 

Tomcat 7.0 에서 DataSource를 연동하기 위해서는 이전 버전과 달리 위 2개의 라이브러리만 필요로 합니다.

 

2. server.xml 수정하기

 



 

이클립스와 톰캣을 연동하셨다면 이클립스내에서 server.xml을 열어서

<GlobalNamingResources>이 사이에 아래 굵게 표시된 내용을 각자 맞게 수정하여 추가합니다. </GlobalNamingResources>

(연동이 안된 상태라면 %CATALINA_HOME%\conf\server.xml을 수정)

 

<GlobalNamingResources>

 

  <Resource auth="Container" 

     driverClassName="com.mysql.jdbc.Driver" 

     maxActive="8" 

     maxIdle="4" 

     name="jdbc/mysqlDB(디비 이름)" 

     password="비번" 

     type="javax.sql.DataSource" 

     url="jdbc:mysql://localhost:3306/dbapp?" 

     username="root"/>

 

</GlobalNamingResources> 

 

그리고 한가지 더!

 

<Context> 이 사이에 아래 굵게 표시된 내용을 각자 맞게 수정하여 추가합니다. </Context>

 

<Context docBase="Exam001" path="/Exam001" reloadable="true" source="org.eclipse.jst.jee.server:Exam001">

 

<ResourceLink global="jdbc/리소스명" name="jdbc/리소스명" type="javax.sql.DataSource" />

 

</Context>

 

여기서 유의 사항은 <Resource> 에서 정한 name과 같아야 합니다.

 

 

 

3.web.xml 수정

 




 

WEB-INF 안에 있는 web.xml을 열어서

<web-app>이 사이에 아래 굵게 표시된 내용을 각자 맞게 수정하여 추가합니다.</web-app>

(WEB-INF안에 web.xml이 없을때에는 새로 만들어서 아래 내용을 추가해주도록 합니다.)

 

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

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 version="3.0" metadata-complete="true">

 

 <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/exam</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>

 

</web-app>

<res-ref-name>은 반드시 위에서 설정한 “<ResourceLink>” 태그의 “name”속성의 값과 동일 해야 합니다.

Posted by 앗뜨거
,
728x90

출처:http://manfromearth.tistory.com/79


cafe24에 64bit JSP를 신청한 상태여야 한다.


개발용 PC에서 톰캣을 설치할 때 6.0 버전으로 설치하도록 하자. cafe24는 톰캣6.0을 사용하기 때문에 안그러면 cafe24내에서 Java소스 파일을 다시 컴파일해주어야 한다. 본 글에서는 cafe24내에서 컴파일하는 것까지 해보겠다.


이클립스 EE버전에서 완성된 프로젝트를 패키지 익스플로러에서 우클릭하여 익스포트한다. 이때 Web -> WAR file 을 선택하여 접근하도록 한다. 그 다음 다이얼로그에서는 파일이 생성될 경로와 이름 톰캣의 버전을 지정해주는데, 적절한 버전을 지정해주고 적절한 경로르 지정해준다. 단, 파일명은 www.war 로 한다. 파일명은 www 확장자는 war이다.


 putty한글.exe


 FileZilla_3.5.3_win32-setup.exe


그 후 서버에 명령을 내리고 파일을 수월하게 관리하기 위해 putty와 FileZilla를 다운받아 설치하자.


먼저 putty를 이용해 내 서버에 들어가보도록 하자.

yourId부분에는 각자의 cafe24 아이디를 써주자.

그리고 아래쪽에 열기를 클릭하면 cafe24와 연결된다.

연결된 후에 다시 cafe24아이디를 쳐주고 ex:id가 yourId이면 yourId만

그리고 이어서 나오는 패스워드를 쳐준다. 패스워드를 타이핑해도 커서가 이동하지 않기 때문에 커서가 이동하지 않아도 이상하게 생각하지 말고 패스워드를 입력 후 엔터를 쳐주자.

로그인하면 아래화면과 같이 뜬다. 본인의 아이디는 killroad이다.

ls 명령을 타이핑하면 ROOT, tomcat, www라는 3개의 폴더가 보일 것이다.

일단 현재 동작하는 서버를 정지시키자.

정지시키는 명령은 현재 폴더에서

./tomcat/bin/shutdown.sh

이다.

그리고 파일질라를 실행시켜 보자.

위의 처럼 실행 시킨 후 호스트, 사용자명, 비밀번호를 putty에 입력했던 것처럼 입력 후 빠른 연결을 누르면 정상적으로 연결 된다. 파일질라의 우측은 연결된 원격지, 좌측은 로컬을 의미한다.

우측의 원격지에서 ..폴더를 눌러 상위 폴더로 나가면 아까 putty에서 봤던 그 폴더구조가 보일 것이다. 아까 putty에서 봤던 것과는 다르게 3개의 폴더만이 아니라 다른 파일 여러개가 보일 수도 있으나 그냥 놔두어도 무방하다.

아까 추출한 www.war 파일을 좌측 로컬창에서 찾아서 드래그&드랍으로 현재 폴더로 전송시킨다.

위의 사진 우측에 제일 아래 파일을 보면 www.war파일이 전송된 것을 볼 수 있다. 그리고 파일질라에서 www폴더를 지우자. 우리가 만든 www.war파일은 톰캣이 다시 실행되면 자동으로 압축이 풀리며, www폴더를 생성하게 된다. 기존의 www폴더는 필요없기 때문이다.

www.war파일도 전송하고 www폴더도 삭제했으면 이제 putty로 가보자.

putty로 가서 이제 톰캣을 켜보자.

명령창에 입력해라.

./tomcat/bin/startup.sh

이렇게 입력하면 톰캣은 다시 실행되고 www.war파일의 압축이 자동으로 풀리며 www폴더를 만든다.

이러면 완료....이겠지만 만약 war파일을 추출할 때 톰캣 6.0버전이 아니었다면 정상동작하지 않을 것이다. 톰캣 6.0에 맞게 다시 Java파일을 컴파일해주어야 한다. 일단 shutdown.sh로 다시 한번 톰캣을 정시지키자.

파일질라에서 www폴더 -> WEB-INF폴더 -> classes폴더 순으로 들어가보자.

여기에 로컬에서 Java파일을 찾아서 복사해 넣도록 하자. 그 후 putty로 컴파일하면 되는데 컴파일하기 전에 classes폴더보다 더 하위폴더로 들어가서 기존의 class파일을 지워주도록 하자.

그리고 putty도 www폴더 -> WEB-INF폴더 -> classes폴더 로 들어가자.

들어갈때는 cd www 입력 그리고 cd WEB-INF 입력 그리고 cd classes 입력

탭키를 이용하면 자동완성이 되기 때문에 유용하니 자주 써먹자.

classes폴더 내에서 putty로 아래 명령을 입력해주자.

javac -d . -classpath /home/hosting_users/USER_ID/tomcat/lib/servlet-api.jar 자바파일이름.java 

그러면 class파일이 각각의 패키지에 해당하는 폴더에 맞게 자동으로 생성될 것이다. 만약 컴파일할 java파일이 여러개라면 

javac -d . -classpath /home/hosting_users/USER_ID/tomcat/lib/servlet-api.jar 여러개중1.java 여러개중2.java 여러개중3.java 여러개중4.java

처럼 공백으로 구분하고 뒤에 쭉 나열해주면 된다.

그리고 다시 cd.. 명령을 이용해 ROOT,tomcat,www 폴더가 보이는 디렉토리까지 올라간다.

그리고 다시 startup.sh명령을 이용해 톰캣을 실행시켜주면 서버는 정상 동작하게 된다.

글을 작성하다보니 후반부에는 귀차니즘으로 스샷을 거의 안찍고 글로 썼다 -_-;

사진많이올리는 블로거들이 대단해보인다.


아래쪽에 서블릿 맵핑을 하는 스샷을 두개 올리고 끝내야겠다. 이 부분도 처음하면 헷갈리는 부분이니까..





Posted by 앗뜨거
,
728x90

[호스팅] cafe24 Tomcat 재시작 명령어

- putty 프로그램을 다운받아 실행한다.(카페24에가면 있다)

putty.exe




ptty나 telnet으로 접속한 후

-tomcat 정지
./tomcat/bin/shutdown.sh

-tomcat 시작
./tomcat/bin/startup.sh


Posted by 앗뜨거
,
728x90

데이터베이스 리스트 조회

ContextWrapper.databaseList();

ContextWrapper == ConText

 

데이터베이스 삭제

ContextWrapper.deleteDatabase("삭제할 데이터베이스명");

 

예)

if (Arrays.binarySearch(databaseList(), DATABASE_NAME) >= 0) {

   deleteDatabase(DATABASE_NAME);

}

 

어플리케이션내에 데이터베이스 열거나 생성

ContextWrapper.openOrCreateDatabase("데이터베이스명.db", 데이터베이스모드<읽기,쓰기전용 또는 기존에 파일있으면 열어라등.. 모드지정>, 쿼리가호출되는 커서를 선택<커서객체를 만들어 사용할지에입력 그렇지 않으면 null>);

 

예) SQLiteDatabase mydb=openOrCreateDatabase(DATABASE_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);  조회해보고 없으면 생성해주는 상수값

 

 

데이터베이스 위치 설정

SQLiteDatabase.setLocale(Locale.getDefault()); 

 

데이터베이스 접근권한 설정

SQLiteDatabase.setLockingEnabled(true); 

 

데이터베이스 버전 설정

SQLiteDatabase.setVersion(1);

 

 

데이터베이스 위치 추출

SQLiteDatabase.getPath());

 

데이터베이스 버전

SQLiteDatabase.getVersion();

 

현재 데이터베이스  페이지사이즈

SQLiteDatabase.getPageSize();

 

데이터베이스의 최대크기

SQLiteDatabase.getMaximumSize();

 

데이터베이스가 열려 있는지

SQLiteDatabase.isOpen();

 

 

데이터베이스가 읽기 전용 인지

SQLiteDatabase.isReadOnly();

 

현재 쓰레드에 의해 데이터베이스가 잠겨 있는지

SQLiteDatabase.isDbLockedByCurrentThread();

 

 

쿼리문 실행메서드

SQLiteDatabase.execSQL("쿼리문");

예)

SQLiteDatabase.execSQL("CREATE TABLE tbl_authors (id INTEGER PRIMARY KEY AUTOINCREMENT , firstname TEXT, lastname TEXT);");

 

 

테이블에 데이터를 삽입할 경우

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);       (어디에 필드명)과 ( 데이터) 한묶음으로

//long id = SQLiteDatabase.insert(테이블명, null, ContentValues);

long id  = SQLiteDatabase.insertOrThrow(테이블명, null, ContentValues);

* 두번째 인자에 null을 사용하는 이유 : 완전히 비어있는 행을 허용하지 않기 때문에 세번재 인자값이 null인 경우를 방지

 

예)

ContentValues values = new ContentValues();

values.put("title", newBook.mTitle); => values.put("title", "해리");

values.put("dateadded", newBook.mDateAdded.toLocaleString()); =>values.put("dateadded", "2011-06-23")

values.put("authorid", newBook.mAuthor.mAuthorId);

//long id = SQLiteDatabase.insert(TABLE_BOOK, null, values);

long id  = SQLiteDatabase.insertOrThrow(TABLE_BOOK, null, values); 필요에따라 

SQLiteDatabase.insertOrThrow(TABLE_BOOK, null, values);

 

 

테이블에 데이터를 수정할 경우

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);

SQLiteDatabase.update(테이블명, ContentValues, "조건필드=?", ?를 치환할 문자배열);

 

예)

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);

SQLiteDatabase.update(TABLE_BOOK, values, "id=?", new String[] { bookId.toString() });

 

 

테이블에 데이터를 삭제할 경우

SQLiteDatabase.delete(테이블명, "조건필드=?", ?를 치환할 문자배열);

 

예)

SQLiteDatabase.delete(TABLE_BOOK, "id=?", new String[] { bookId.toString() });

 

 

테이블에 데이터를 조회할 경우

Cursor c = mDatabase.query(테이블명, null, null, null, null, null, null);    select

 

Cursor.getCount(); 조회된 recode의 총갯수

Cursor.getColumnCount(); 조회된 필드 갯수

Cursor.getColumnName(); 이름

Cursor.getPosition(); 현재 커서 포인터위치

Cursor.getString(int columnIndex); 필드값

 

 

커서포인트 위치를 바꿔주는 메서드 처음 (Cursor 위치는 항상 0번 이기에 First를 해줘야함)

Cursor.moveToFirst(); 커서포인터위치를 첫번째 레코드 위치로

Cursor.moveToNext(); 커서포인터위치를 다음 레코드 위치로

Cursor.moveToPrevious();  커서포인터위치를 이전 레코드 위치로

Cursor.moveToLast(); 커서포인터위치를 마지막 레코드위치로

Cursor.moveToPosition(int position); 커서포인터위치를 지정한 레코드 위치로

Cursor.isAfterLast(); 현재 커서포인터위치에서 다음레코드가 있는지 확인  //, 마지막레코드인지 확인 //마지막 레코드이면 true

recode, id값은 무관...

  

public void LogCursorInfo(Cursor c) {

  Log.i(DEBUG_TAG, "*** Cursor Begin *** " + " Results:" + c.getCount() + " Columns: " + c.getColumnCount());

 

  // Print column names

  String rowHeaders = "|| ";

  for (int i = 0; i < c.getColumnCount(); i++) {

     rowHeaders = rowHeaders.concat(c.getColumnName(i) + " || ");

  }

  Log.i(DEBUG_TAG, "COLUMNS " + rowHeaders);

 

  // Print records

  c.moveToFirst();

  while (c.isAfterLast() == false) {

     String rowResults = "|| ";

     for (int i = 0; i < c.getColumnCount(); i++) {

        rowResults = rowResults.concat(c.getString(i) + " || ");

     }

     Log.i(DEBUG_TAG, "Row " + c.getPosition() + ": " + rowResults);

     c.moveToNext();

  }

  Log.i(DEBUG_TAG, "*** Cursor End ***");

}

 

 

예)

Cursor c = mDatabase.query(TABLE_BOOK, null, null, null, null, null, null);

public void LogCursorInfo(Cursor c) {

  Log.i(DEBUG_TAG, "*** Cursor Begin *** " + " Results:" + c.getCount() + " Columns: " + c.getColumnCount());

 

  // Print column names

  String rowHeaders = "|| ";

  for (int i = 0; i < c.getColumnCount(); i++) {

     rowHeaders = rowHeaders.concat(c.getColumnName(i) + " || ");

  }

  Log.i(DEBUG_TAG, "COLUMNS " + rowHeaders);

 

  // Print records

  c.moveToFirst();

  while (c.isAfterLast() == false) {

     String rowResults = "|| ";

     for (int i = 0; i < c.getColumnCount(); i++) {

        rowResults = rowResults.concat(c.getString(i) + " || ");

     }

     Log.i(DEBUG_TAG, "Row " + c.getPosition() + ": " + rowResults);

     c.moveToNext();

  }

  Log.i(DEBUG_TAG, "*** Cursor End ***");

}

 

Date today = new Date(java.lang.System.currentTimeMillis());

Posted by 앗뜨거
,
728x90

이 세가지 방법 말고도 뭐 다른 방법이 있겠지만 대충 요 3가지 정도만 알고 있어도 충분하고도 넘칠것 같다.

이전까지는 제일 첫번째 방법으로만 Map 에 있는 것들을 꺼내서 썼었는데

세번째 방법도 꽤 간결하고 가독성도 좋은것 같아 앞으로 세번째 방법을 주로 써야 겠다는 생각을 해본다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.tistory.stove99;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
 
public class MapIterationSample {
    public static void main(String[] agrs) {
        Map<String, String> map = new HashMap<String, String>();
         
        map.put("키1", "값1");
        map.put("키2", "값2");
        map.put("키3", "값3");
        map.put("키4", "값4");
        map.put("키5", "값5");
        map.put("키6", "값6");
         
         
        // 방법1
        Iterator<String> keys = map.keySet().iterator();
        while( keys.hasNext() ){
            String key = keys.next();
            System.out.println( String.format("키 : %s, 값 : %s", key, map.get(key)) );
        }
         
        // 방법2
        for( Map.Entry<String, String> elem : map.entrySet() ){
            System.out.println( String.format("키 : %s, 값 : %s", elem.getKey(), elem.getValue()) );
        }
         
        // 방법3
        for( String key : map.keySet() ){
            System.out.println( String.format("키 : %s, 값 : %s", key, map.get(key)) );
        }
    }
}

출처: http://stove99.tistory.com/96

Posted by 앗뜨거
,
728x90

Android Toast duration 조정하기..

안드로이드에서는 메세지를 보여주고 사라지는 용도로 Toast를 빈번하게 사용하고 있습니다.
하지만, 아쉬운 점이 하나 있다면, duration을 설정할 수 없습니다. 
그래서, 간단하게 duration을 변경하는 방법으로, Toast의 show()를 쓰레드로 원하는 시간 만큼 계속 보여주면 쉽게 해결할 수 있습니다.

간단하게, 안드로이드 Toast 클래스에서 제공하는 SHORT과 LONG의 기본 시간값입니다..

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

아래는 CountDownTimer를 이용해서 총 4초동안, 1초씩 줄어들면서 Toast의 show() 메소드를 호출해서, 총 6초(Toast.LENGTH_SHORT이 duration 이니)동안 메세지를 보여주는 코드입니다..

final Toast toast = Toast.makeText(context(), getString(R.string.login_error),Toast.LENGTH_SHORT);
toast.show();
new CountDownTimer(4000, 1000) {
  public void onTick(long millisUntilFinished) {toast.show();}
  public void onFinish() {toast.show();}
}.start();

또 다른 방법으로 https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastExpander.java 에서 쓰레드로 시간을 빼면서 루프를 돌리는 방법도 있습니다.

출처 : http://sjava.net/?p=360

Posted by 앗뜨거
,
728x90

4.4 킷캣 에뮬레이터에서는 한글이 제대로 보이지 않습니다.

이는 4.3 에서도 마찬가지이며 4.2.2의 경우에는 CPU/ABI 타입을 MIPS로 하는 경우에만 한글이 보입니다.

 

원인은 한글 글꼴이 들어가 있지 않거나 제대로 설정되지 않아서이며,

한글을 보이도록 하는 방법으로는 첨부된 system.img 파일에 한글 글꼴을 추가해 두었으니, 이 파일을 SDK 매니저를 이용해 설치한 폴더 아래에 있는 system.img 파일 대신 사용하면 됩니다.

 

하지만 이 이미지 파일은 업데이트되는 경우 제대로 동작하지 않을 수 있으므로 직접 추가하는 방법을 사용해야 할 수도 있습니다.

 

아래 두 가지 방법에 대해 설명해 두었습니다.

 

===== 아래 =====

 

1. 시스템 이미지를 한글 글꼴이 들어간 것으로 바꾸는 방법

    (1) 안드로이드 SDK가 설치된 폴더(SDK 매니저를 실행하고 상단에 어떤 폴더가 표시되는지 확인하면 알 수 있습니다.)

         아래에 있는 폴더 중 킷캣의 ARM 타입에 해당하는 폴더로 들어가 보면 system.img 파일을 볼 수 있습니다.

         ex) C:\Documents and Settings\michael\android-sdks\system-images\android-19\armeabi-v7a 폴더

    (2) 원래의 system.img 파일을 system.img.old 로 이름을 바꾸고 첨부된 system.img 파일을 동일한 폴더에 내려받습니다.

    (3) 이클립스를 실행하고 에뮬레이터를 4.4 버전으로 만든 후 실행합니다. (CPU/ABI 타입은 ARM 으로 함)

    (4) 에뮬레이터가 실행되면 설정의 Custom Locale 앱을 실행한 후 ko-KR을 선택하고 하단의 'Select ko-KR' 버튼을 클릭하면 한글 단말이 됩니다.

 

    * 안드로이드 시스템 이미지 라이센스는 구글에 있습니다.

 

2. 직접 시스템 이미지에 한글 글꼴을 추가하는 방법

 

    - SDK 매니저로 설치한 시스템 이미지를 에뮬레이터로 마운트하여 한글 폰트를 추가한 후 새로운 시스템 이미지로 만든다.

    (1) 4.4 버전의 시스템 이미지를 복사한다.
         시스템 이미지는 아래 폴더(윈도우 버전마다 폴더가 다르며, SDK 매니저의 상단에 보이는 SDK 설치 위치를 참조한다.)
         C:\Documents and Settings\michael\android-sdks\system-images\android-19\armeabi-v7a
         여기에서는 system.img 를 system_orig.img 로 복사한다.         
     (2) 이클립스에서 4.4 버전의 에뮬레이터를 실행한다.
     (3) 이클립스에서 DDMS의 File Explorer를 열고 /storage/sdcard 폴더로 system_orig.img 파일을 복사해 넣는다.
         (약 30분 - 1시간 소요됨)
     (4) 명령 프롬프트 창을 열고 아래 폴더로 이동한다.
         cd C:\Documents and Settings\michael\android-sdks\platform-tools
     (5) 아래 명령을 실행하면 에뮬레이터의 쉘을 실행한다.
         adb -s emulator-5554 shell
     (6) 쉘 안에서 sdcard 폴더로 이동한다.
         cd /storage/sdcard
     (7) 새로운 폴더를 하나 만들고 system_orig.img 파일을 이 폴더로 마운트한다.
         mkdir kitkat
         mount -t ext4 -o loop system-ori.img kitkat/
     (8) 이클립스의 DDMS의 File Explorer에서 /storage/sdcard/kitkat/fonts 폴더 안에 NanumGothic.ttf와 NanumGothic_Bold.ttf 파일을 복사해 넣는다.
     (9) 명령 프롬프트의 쉘 안에서 새로 복사한 두 개의 ttf 파일의 권한을 변경한다.
         cd kitkat/fonts
         chmod 644 NanumGothic.ttf
         chmod 644 NanumGothic_Bold.ttf
     (10) 마운트했던 폴더를 언마운트하고 쉘을 종료한다.
         cd ../..
         umount kitkat/
         exit
     (11) 이클립스의 DDMS의 File Explorer에서 system_orig.img 파일을 복사하여 원래의 폴더로 가져온다.
         C:\Documents and Settings\michael\android-sdks\system-images\android-19\armeabi-v7a
         (약 20분-50분 소요됨)
     (12) 원래의 system.img 파일을 system.img.old와 같이 바꾸고 새로 복사해 온 system_orig.img 파일을 system.img 파일로 바꾼다.
     (13) 이클립스에서 새로 4.4 버전의 에뮬레이터를 만들고 실행한다.
     (14) 에뮬레이터가 실행되면 설정으로 들어가 Custom Locale 앱을 눌러 보이는 창에서 ko-KR Korean 을 선택하고 아래쪽의 'Select ko-KR' 버튼을 누른다.
     (15) 이제 한글이 정상적으로 보이면 성공한 것이다.
    

  



'프로그래밍 > 안드로이드' 카테고리의 다른 글

[Android]SQLite 기본 명령어 정리  (0) 2014.07.24
Android Toast duration 조정하기  (0) 2014.07.16
Posted by 앗뜨거
,
728x90



이클립스에서 안드로이드 용 apk 파일 생성하기

출처 : http://coronasdk.tistory.com/636


요즘 Phonegap 을 이용한 프로젝트를 하나 시작하기 위해 Research 를 하고 있습니다.

샘플을 하나 구해서 이걸 이클립스에 설치 한 다음에 시뮬레이터로 동작하는건 완료 했는데요.


갑자기 이걸 apk 로 만들려고 하니까 생각이 하나도 안 나네요.


뭐든지 다 정리 해 놔야 될 것 같습니다.


첫번째 단계만 보니까 알겠던데... ;;


어쨌든 제일 처음으로 이클립스에서 File > Export 를 선택합니다.



그러면 아래와 같은 화면이 나오는데요. Android > Export Android Application 을 선택하신 후 Next 버튼을 누르세요.


다음엔 Export 할 프로젝트를 선택하시면 됩니다. 프로젝트 이름을 직접 Type 해 넣으셔도 되구요.



다음엔 자기가 사용하는 안드로이드 빌드용 key 를 선택하시면 됩니다. 없으신 분은 Create new keystore 를 선택하셔서 다음 단계 진행하시면 됩니다. 이 새로운 keystore를 만드는 방법은 구글링해서 찾으셔도 되구요. 아니면 그냥 이클립스에서 시키는 대로 따라 하시면 될 겁니다.

해당 key를 선택하신 후 비밀번호를 넣고 Next 버튼을 누르세요.


그러면 아래와 같이 Alias 를 넣는 칸이 나올 텐데요. keystore 생성할 때 만들었던 Alias 선택하고비밀번호 넣고 다음 버튼 누르시면 됩니다.



그러면 마지막 단계로 apk 파일을 생성할 폴더만 선택하시면 됩니다. 선택하신 후 Finish 버튼을 누르세요.




그러면 위에서 지정한 경로에 apk 파일이 생겼을 겁니다. 

이걸 안드로이드폰에 복사해서 인스톨 하셔도 되구요.

안드로이드 마켓에 올리셔도 됩니다.


간단하게 이클립스에서 안드로이드 용 apk 파일 만드는 방법 정리했습니다.





Posted by 앗뜨거
,