Android/Application2014. 9. 3. 10:55


간단한 Android Network Application을 작성하기 위한 기본 지식.


 Android application의 main(UI) thread에서의 network 관련 동작의 실행은 warning이 발생하게 된다.

Network request의 경우 예상치 못한 delay가 발생하여 실행이 지연될 수 있기때문에 

main thread의 동작을 방해하기 때문이다.

하여 network연동을 할때는 별도의 thread에서 처리를 하도록 한다.


이때 사용할 수 있는 class는 Thread(+runable)와 Handler(thread에서 발생한 결과를 main thread로 전달 하기 위한) 또는 AsyncTask 가 있다.

AsyncTask의 경우 별도의 Handler가 필요없이, 필요한 함수를 override하여 그곳에서 UI thread에서 처리가 필요한 내용들을 구현하는 것으로 간결히 처리 할 수 있다.


http 처리를 위해서 android에서는 HttpURLConnection과 Apach의 HttpClient를 지원하며

공식적으로는 GB이상에서는 HttpURLConnection(+URL)를 권장한다.


우선 network이 사용가능한 상태인지 확인을 위해 아래의 method를 사용한다.

ConnectivityManager.getActiveNetworkInfo()


 서버를 통해 전달받은 결과는 InputStream을 통해서 읽어들일 수 있고

InputStream을 통해 전달된 byte array를 String으로 변환하기 위하여 InputStreamReader, BufferedInputStream등이 사용된다.

inputstream을 통해서 data를 읽을때는 전송될 정확한 size를 알 수 없기 때문에 적당한 사이즈만큼만 read()를 하고 -1이 return되면 종료한다.


참고 : http://developer.android.com/training/basics/network-ops/connecting.html




Posted by ekwang
TwitterAPI2010. 2. 5. 18:19
블로그를 방문해 주신 한 개발자 분으로 부터 아래와 같은 질문을 받았다.

twitter = new TwitterFactory().getInstance("아이디", "비밀번호");
Status status;
try {
status = twitter.updateStatus("Test msg1");
Log.e("Test","Successfully updated the status to [Test msg1].");
status = twitter.updateStatus("Test msg2");
Log.e("Test","Successfully updated the status to [Test msg2].");
} catch (TwitterException e) {
e.printStackTrace();
}

위와 같이 코드를 작성하고 updateStatus를 하고나서 메시지를 바꿔서 바로 다른 updateStatus를 하면 TwitterException : -1 이 발생합니다. (만약 3번째 updateStatus를 실행하면 잘 됩니다. 그러나 4번째는 문제발생...)
같은 소스를 일반 Java App로 만들어서 실행하면 문제가 없이 잘 돌아갑니다.

왜 안드로이드에서만 이런 문제가 발생할까요?

물론 답변을 할 수 없는 상태다. 나도 모르기 때문에;;

하지만 한가하던 터라 위와 관련된 내용을 좀 찾아보았다.
그전에, 내가 쓰고 있는 것은 Twitter4J-2.0.10 의 버젼 이었고 
위의 코드는 문제 없이 잘 동작 하였다.
Twitter4J-2.1.0 부터 문제가 발생한 것이다.

Project site(http://twitter4j.org/jira/browse/TFJ)를 검색해보니
많은 Android 개발자들이 Twitter4J 사용시 위와 같은 문제로 고민하고 있음을 알게 되었다.

다음은 검색 결과 중 주요 내용만 뽑아보았다.
31.  Yusuke Yamamoto   1월29일, 오후3시10분
Hi, 
I haven't managed to look into it yet. 
I have no idea why adding "Connection: close" to the request header doesn't work for the issue. 
http://java.sun.com/j2se/1.5.0/docs/guide/net/http-keepalive.html 
This can be a Dalvik/Harmony side issue as Miyuuu indicated. 
http://stackoverflow.com/questions/1440957/httpurlconnection-getrespo... 
Does any have any idea how to workaround the problem? 
I've just filed an Jira issue to track the problem. 
http://twitter4j.org/jira/browse/TFJ-296 
Thanks, 
-- 
Yusuke Yamamoto 
yus...@mac.com 

그렇다..
결론은 아직 해결이 되지 않았다 --;;

http client를 이용해서 server와 connection을 한 후 두번째 connection을 할 경우 fail이 발생을 한다.
android 의 경우 성능을 높이기 위해서 최초 연결이 된 경우 connection을 계속해서 유지하고 있도록 동작을 하고
이것 또한 Twitter4J가 위와 같은 exception이 발생하게 한다고 한다.
그래서 Twitter4J를 그냥 JVM에서 돌아가도록 하면 이런 문제는 또 발생하지 않는다.
DALVIK 에서 구동 될때만 문제가 생긴다는 것이다. (http://code.google.com/p/android/issues/detail?id=2800)


문제를 해결하기 위해서 여러 곳에서 움직임이 있는데
그중 하나만 관심을 가지고 지켜본다면 해결 된 때를 알 수 있을 것 같다.

Stackoverflow

Twitter4J

Twitter4J Group
http://groups.google.com/group/twitter4j/browse_frm/thread/4319a99a2a656275?tvc=1
Posted by ekwang
Android/Tools2009. 12. 15. 13:48
2009년 12월 10일 android blog에 새로운 글이 포스팅 되었다.

Optimize your layouts

Android application 은 xml 파일을 작성하여 UI layout을 생성할 수 있다.
이 UI layout을 위한 xml파일이 효율적으로 작성이 되어 있는지를 검사해주는 툴이 layoutopt 이다.

사용 법은 간단하다.
usage: layoutopt <directories/files to analyze>

$ layoutopt samples/samples/compound.xml
  7:23 The root-level <FrameLayout/> can be replaced with <merge/>
  11:21 This LinearLayout layout or its FrameLayout parent is useless samples/simple.xml
  7:7 The root-level <FrameLayout/> can be replaced with <merge/>
samples/too_deep.xml
  -1:-1 This layout has too many nested layouts: 13 levels, it should have <= 10!
  20:81 This LinearLayout layout or its LinearLayout parent is useless
  24:79 This LinearLayout layout or its LinearLayout parent is useless
  28:77 This LinearLayout layout or its LinearLayout parent is useless
  32:75 This LinearLayout layout or its LinearLayout parent is useless
  36:73 This LinearLayout layout or its LinearLayout parent is useless
  40:71 This LinearLayout layout or its LinearLayout parent is useless
  44:69 This LinearLayout layout or its LinearLayout parent is useless
  48:67 This LinearLayout layout or its LinearLayout parent is useless
  52:65 This LinearLayout layout or its LinearLayout parent is useless
  56:63 This LinearLayout layout or its LinearLayout parent is useless
samples/too_many.xml
  7:413 The root-level <FrameLayout/> can be replaced with <merge/>
  -1:-1 This layout has too many views: 81 views, it should have <= 80! samples/useless.xml
  7:19 The root-level <FrameLayout/> can be replaced with <merge/>
  11:17 This LinearLayout layout or its FrameLayout parent is useless

하지만 Window 환경에서 layoutopt를 수정없이 사용하게 되면 아래와 같은 에러를 보게 될 것이다.

Exception in thread "main" java.lang.NoClassDefFoundError: lib\layoutopt/jar
Caused by: java.lang.ClassNotFoundException: lib\layoutopt.jar
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: lib\layoutopt.jar.  Program will exit.

포스팅된 글을 끝까지 잘 읽어보면 해결책이 나와있다.

Windows users: to start layoutopt, open the file called layoutopt.bat in the tools directory of the SDK and on the last line, replace %jarpath% with -jar %jarpath


쉽게 이해가 안되면 아래와 같이 따라하자.

1. \sdk\android-sdk-windows\tools\layoutopt.bat 파일을 편집기로 연다.

2. 파일의 제일 마지막을 다음과 같이 수정한다.

수정 전  call java %java_debug% -Djava.ext.dirs=%javaextdirs% %jarpath% %*
수정 후  call java %java_debug% -Djava.ext.dirs=%javaextdirs% -jar %jarpath% %*

3. 파일을 저장 후 layoutopt를 사용한다.
파일명을 직접 입력 하거나, xml 파일이 있는 폴더명을 입력해주면 해당 폴더 내의 모든 xml 파일을 분석한다.

분석 내용이 길어질 경우를 대비에 > 를 사용해 출력을 analyze.txt에 담아도 좋다.

> layoutopt main.xml > analyze.txt
> layoutopt ./res/layout/

만약 분석을 요청한 파일에 특별한 내용이 없을 경우에는 
입력한 parameter만 출력이 되고 동작을 멈춘다.

[U]
Posted by ekwang
Android/Platform2009. 12. 1. 12:07

11/30일자 platform/manifest.xml 을 받고 나서 빌드 완료 후
eclipse에서 project를 생성하려고 Mydroid/Development/ide/eclipse/.classpath를 이용하여 New java Project를 하니
아래와 같은 에러가 발생하였다.

An error occurred while creating project. Check log for details.

Reason:
Build path contains duplicate entry: 'frameworks/base/vpn/java' for project 'master'
An error occurred while creating project. Check log for details.

Reason:
Build path contains duplicate entry: 'out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/vpn/java' for project 'master'


본인만 발생하는 것인지 알 수는 없지만 해결 방법에 대해 알아보자.
Order and Export tab을 보면 아래와 같이 frameworks/base/vpn/java 가 2개가 포함이 되어 있다.
그리고 더 내려보면 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/wifi/java 또한 2개가 포함되어 있다. 




아래 경로에 있는 .classpath파일을 열어서 중복되는 entry를 삭제한다.
~/android/master/development/ide/eclipse/.classpath

<classpathentry kind="src" path="frameworks/base/test-runner"/>
<classpathentry kind="src" path="frameworks/base/tts/java"/>
<classpathentry kind="src" path="frameworks/base/vpn/java"/>
<classpathentry kind="src" path="frameworks/base/wifi/java"/>
<classpathentry kind="src" path="frameworks/base/vpn/java"/> <-- 삭제
<classpathentry kind="src" path="frameworks/policies/base/phone"/>


<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/telephony/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/vpn/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/wifi/java"/>
<classpathentry kind="src" path="out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/vpn/java"/> <-- 삭제

파일을 저장 후 .classpath 파일을 mydroid 폴더로 복사해서 다시 eclipse를 이용해서 project를 생성하면 에러 없이 잘 된다.

eclipse가 열려 있는 상태에서 이미 mydroid 폴더로 복사되어 있는 .classpath파일을 수정하면 파일이 원복이 되니
eclipse를 다고 .classpath는 수정 후 eclipse 다시 로딩하도록 한다.

위와 같이 duplicated entry 라는 에러가 뜰때는 .classpath파일에서 중복되는 entry를 삭제 하고 다시 project를 만들면된다.
Posted by ekwang
Linux/Ubuntu2009. 11. 23. 22:48

ubuntu 9.10 에서 android full source 빌드 해보자.
9.04에서와 별 다른게 없어야 하지만, java version때문에 약간의 문제가 발생하였다.

ubuntu 9.10 설치 후 아마 android sdk 사용을 위해서 sun-java6-jre, jdk package를 설치 하였나 보다.
아니면 java 1.5, 1.6 이 설치되어 있는 상태에서 9.10으로 업그레이드를 하면서, 
구패키지인 1.5가 자동으로 삭제가 되었거나..

************************************************************
You are attempting to build with the incorrect version
of java.
 
Your version is: java version "1.6.0_15".
The correct version is: 1.5.
 
Please follow the machine setup instructions at
    http://source.android.com/download
************************************************************
build/core/main.mk:111: *** stop.  멈춤.

android full src 컴파일 하기 위해서 make를 하게되면
위와 같이 ubuntu 9.10 에서 java 1.5 가 설치 되어야 한다는 경고 문구를 볼 수 있다.

java5 설치를 위해서 apt-cache search jre를 해보지만 ubuntu 9.10 저장소에서 java5 버젼의 검색이 안된다.
9.04에서는 저장소에 sun-java5-jre, jdk 버젼이 있었던것 같은데..
아무튼 java6 이하 버젼을 설치하기 위해서는 파일을 다운로드 받아서 설치하거나, 
jdk 구버젼이 존재하는 저장소를 추가하여야 한다.

참고로, jre1.5 (jre5) 를 설치하게 될 경우 emulator동작을 위한 파일은 설치가 되지만
build에 필요한 javac등이 설치되지 않으므로 jdk5를 설치해야 한다.

그럼 ubuntu에서 jdk1.5 (jdk5) 설치 하는 방법을 알아보자.

1. 저장소를 추가하는 방법
위의 글을 참고 하여 아래의 저장소를 추가 한 후 jdk5 설치 한다.(
source.list 파일은 백업)
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb 
http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

설치 완료 후에는 source.list 파일을 원복시키고 apt-get update 를 하여 karmic 주소로 다시 원복 시켜주어야 이후에 ubuntu사용에 혼란이 없을 것이다.
다음으로 아래와 같이 하여 java 1.5로의 환경 설정을 마칠 수 있다.
sudo apt-get update
$ sudo apt-get install sun-java5-jdk

$ sudo update-java-alternatives -s java-1.5.0-sun

위와 같이 하였으나 잘 되지 않으면(java, javac 등을 찾지 못할 경우)
본 글 아래의 update-alternatives 관련 내용을 참고하여
java 등 필요한 것들의 환경 설정을 변경하도록 한다.

2. 재미있게 jdk5를 직접 다운로드 받아서 설치하는 방법을 알아보자.

jre(java)만 설치하게 되면 javac, jar 등이 없으므로 아래의 jdk를 설치하자.


상기 링크를 통해 본인의 PC 환경에 맞는 파일을 선택하여 저장하도록 한다.

자동압축풀기설치를 위해서 rpm.bin 을 다운로드 받았다. rpm으로 설치를 하면 적절한 위치에 알아서 설치가 된다.
(jdk-1_5_0_22-linux-i586.bin 파일을 받았다면 설치할 폴더로(/usr/java/ 등..) 파일을 move 한 후 파일에 execute 모드를 주고 실행하면 된다.)

$chmod a+x jdk-1_5_0_22-linux-i586.rpm.bin
$sudo ./
jdk-1_5_0_22-linux-i586.rpm.bin

와 같이 실행하면 라이센스에 대한 문구가 출력이 된다.
space 키 입력하면서 모두 읽고나서 마지막으로 yes를 입력하여 확인 하고 나면
jdk-1_5_0_22-linux-i586.rpm 파일이 생성된다.

ubuntu에서는 rpm을 ubuntu용 설치 패키지 파일인 deb 포맷으로 변환해서 설치를 하여야 한다.

rpm to deb 로 변환을 위해서는 alien을 설치해야 한다.

$sudo apt-get install alien

alien 설치가 완료되었다면
deb로 변환해보자.

$sudo alien -c jdk-1_5_0_22-linux-i586.rpm

변환이 완료되면 jdk-1_5_0_22-linux-i586.deb 파일이 생성이 된다.

그럼 dpkg를 이용하여 최종 설치를 하면된다.

$ sudo dpkg -i jdk_1.5.0_22-1_i386.deb
전에 선택하지 않은 jre 패키지를 선택합니다.
(데이터베이스 읽는중 ...현재 129261개의 파일과 디렉토리가 설치되어 있습니다.)
jre 패키지를 푸는 중입니다 (jre_1.5.0_21-1_i386.deb에서) ...
jre (1.5.0_21-1) 설정하는 중입니다 ...
/usr/java/jdk1.5.0_22

위의 디렉토리로 패키지의 설치를 마쳤다.

마지막으로 java 1.5로 각 링크들을 변경하기 위해 아래와 같이 입력한다.
java 와 같이 기존에는 설치가 되어 있는 것들은 --config을 통해서 
selection을 변경해주어야 한다.

그 이외 javac, jar, javah 와 같이 jdk를 통해 새로 설치된 것들을 install

$sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.5.0_22/jre/bin/java" 1
$sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                  Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-6-sun/jre/bin/java   63        auto mode
* 1            /usr/java/jre1.5.0_21/bin/java         1         manual mode
  2            /usr/lib/jvm/java-6-sun/jre/bin/java   63        manual mode

Press enter to keep the current choice[*], or type selection number: 1

$sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/java/jdk1.5.0_22/bin/javac" 63
$sudo update-alternatives --install "/usr/bin/jar" "jar" "/usr/java/jdk1.5.0_22/bin/jar" 63
$sudo update-alternatives --install "/usr/bin/javah" "javah" "/usr/java/jdk1.5.0_22/bin/javah" 63
$sudo update-alternatives --install "/usr/bin/javadoc" "javadoc" "/usr/java/jdk1.5.0_22/bin/javadoc" 63

update-alternatives 명령을 이용해 java, javac 등 의 링크를 새로 설치한 것으로 수정했다.

참고로 update-alternatives의 help를 보면 아래와 같다.
  --install <link> <name> <path> <priority>
<priority> is an integer; options with higher numbers have higher priority in
  automatic mode.
위의 예에서는 4번째 파라메터에 1 값을 주었는데 만약 64값을 주게 되면 auto mode에서도 알아서 /usr/java/jdk1.5.0_22/jre/bin/java 
로 링크가 될 것 같다.


그리고 user home 에서 .bashrc 파일을 열어서 아래와 같이 JAVA_HOME을 설정하자.
*주의  =(equal) 앞뒤로 space는 허락하지 않는다.

$cd ~
$gedit .bashrc

# set PATH
export JAVA_HOME=/usr/java/jdk1.5.0_22/bin
export ANDROID_JAVA_HOME=$JAVA_HOME


파일 저장 후 편집한 bashrc를 아래와 같이 source를 이용하여 환경에 바로 적용하자.

$cd ~
$source .bashrc


설정한 JAVA_HOME이 적용되었는지 확인

$echo $JAVA_HOME
/usr/java/jdk1.5.0_22

마지막으로 모두 제대로 설정되었는지 확인.

$which java
/usr/bin/java
$java -version
java version "1.5.0_21"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_21-b01)
Java HotSpot(TM) Client VM (build 1.5.0_21-b01, mixed mode, sharing)
$which javac
/usr/bin/javac
$which jar
/usr/bin/jar
$which jar
/usr/bin/jar
$which javah
/usr/bin/javah

apt-get으로 설치 했을 경우에는 update-alternatives 를 사용할 필요가 없었는데,
dpkg -i deb로 설치를 하니 할일이 참 많다.
java, javac, jar, javah, javadoc 등이 모두 설치 되었음을 확실히 해야 한다.

여기까지 하였다면 다시 make를 하면 정상적으로 빌드가 시작된다.

비슷한 문제로 고민하는 이들이 있군요.
Posted by ekwang
Android/Tools2009. 11. 21. 01:12
ubuntu 9.10으로 upgrade를 하고 나서
eclipse에 ADT install (ADT update) 를 하려고 하니 몇몇 버튼이 동작 하지 않는 현상이 있었다.

해결 방법에 대해서는 이미 많은 글들이 소개하고 있다.
gtk로 구현된 application에서 발생하는 문제라고 한다.

아래와 같이 하여 eclipse를 실행 하도록 하면 해결 된다.

~$gedit eclipse.sh

  1. #!/bin/sh  
  2. export GDK_NATIVE_WINDOWS=true  
  3. /home/ekwang/android/eclipse/eclipse

~$chmod +x eclipse.sh

그리고 나서 eclipse.sh을 실행 하면 된다.
Posted by ekwang
TwitterAPI2009. 11. 19. 10:02
Twitter4J를 이용하여 간단한 예제를 작성해보도록 하자.

오늘 살펴볼 예제는 
에 있는 첫번째 예제인
id, password 를 이용해 Twitter 인스턴스를 생성하고
updateStatus 메소드를 이용해서 입력한 스트링을 보내는 코드이다.

1. Updating status

You can update "What are you doing?" via Twitter.updateStatus() method.
See also twitter4j.examples.Update.java for detail. 


Twitter twitter = new Twitter(twitterID,twitterPassword);
Status status = twitter.updateStatus(latestStatus);
System.out.println("Successfully updated the status to [" + status.getText() + "].");


위의 예제를 간단한 Android application으로 만들어 보자.
결과 화면은 아래와 같다.


먼저 사용할 Twitter4J class를 import해준다.
import twitter4j.Twitter;
import twitter4j.Status;
import twitter4j.TwitterException;


3개의 EditText와 하나의 Button을 이용하여 위와 같은 화면을 구성할 수있다.
final EditText input_id = (EditText)findViewById(R.id.user_id);
final EditText input_pw = (EditText)findViewById(R.id.password);
final EditText input_text = (EditText)findViewById(R.id.input_text);
Button signin = (Button)findViewById(R.id.sign_in_button);

이후 Update Button에 OnClickListener를 붙여서 onClick 발생시 
signin.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v){
      //TODO : Below code will be inserted here
    }
});


user_id EditText와 password EditText에 입력된 값으로 Twitter 객체를 생성하도록 해준다.
그 후 updateStatus 메소드를 이용하여 글을 올리고 결과를 Toast를 이용해 출력 한다.
Twitter twitter = new Twitter(username, password);
Status status;
try {
  status = twitter.updateStatus(update_text);
  Toast.makeText(getApplicationContext(), "Successfully updated the status to [" + status.getText() + "].",   Toast.LENGTH_LONG).show();
  } catch (TwitterException e) {
    Toast.makeText(getApplicationContext(), "Fail to update text [" + e + "].", Toast.LENGTH_LONG).show();
  }

위와 같은 간단한 코드 만으로 Twitter에 로그인 하고 글을 올리는 것이 가능한 application을 만들 수 있다.

프로젝트 파일을 압축해서 첨부하였으니 참고.
다음에는 자신의 timeline을 얻어와 list로 출력 하는 예제를 살펴볼 예정이다.

'TwitterAPI' 카테고리의 다른 글

[Twitter4J] OAuth support  (0) 2011.02.10
Twitter4J TwitterException -1 발생  (1) 2010.02.05
Twitter4J를 사용하기 위한 JAVA CLASSPATH 설정  (0) 2009.10.22
Posted by ekwang
Android/Application2009. 11. 5. 18:18

SNS서비스의 이용이 많아지면서 당연 Twitter에도 많은 사람들이 관심을 가지게 되었다.
S/W 개발자라면 TweetAPI를 이용해서 Twitter Client Application을 개발하는데 관심을 가져볼만하다.

간단한 방법만 소개해보겠다.
우선 Twitter는 TwitterAPI라고 하여 Twitter server에 있는 여러 data들을 자유롭게 접근하여 사용할 수 있도록
API를 오픈하고 있다.
물론 완전히 자유롭게는 아니고 약간의 제약이 있긴하다. (이러한 내용은 Twitter API wiki를 통해 확인하도록 하자.)

아무튼 Twitter API는 html base이다.
C, JAVA등에 익숙한 나같은 사람은 html로 application을 개발 할 능력이 없다.(사실 JAVA에도 무뇌한이지만..)
그래서 TwitterAPI를 다양한 언어로 wrapping해놓은 다양한 라이브러리등이 존재한다.

그중 JAVA를 써서 개발한 Twitter4J를 사용한다면 개발이 한결 쉬울 것이다.
사이트로 가서 압축된 파일을 받기만 하면 준비는 끝이다.
그리고 간단한 sample code를 몇개만 보게된다면 당신은 twitter client 프로그램을 손쉽게 개발 할 수 있을것이다!!!

개발과정을 잠깐보고 간단한 예제코드를 Android에 적용해보자.

1. Twitter4J library Add
아래사진과 같이 Package Explore에서 해당 package를 선택 후 Alt+Enter를 누르면 Properties 화면이 뜬다.
여기서 Java Builder Path 메뉴의 Libraries로 이동, Add External JARs를 눌러서
Twitter4J\twitter4j-2.0.10\twitter4j-2.0.10.jar 를 추가하면 준비는 끝이다.

2. 필요한 class를 import.
이런 식으로 import해 주고 Twitter4J의 class, method들을 호출하여 app개발을 하면 된다.
import twitter4j.Twitter;
import twitter4j.Status;
import twitter4j.TwitterException;
import twitter4j.User;


Twitter4J를 이용한 Twitter 로그인, Tweet 보내기 예제는 다음번에 꼭 포스팅하도록 하겠다.
Posted by ekwang
카테고리 없음2009. 11. 5. 14:06

안녕하세요. 블로그 운영자 입니다.
제 블로그로의 유입 검색어를 보면 안드로이드 관련된 여러 문제점을 해결하기 위한 분들이 많습니다.
그래서 안드로이드와 관련된 여러 질문들을 올려 주시면
그에 맞는 내용으로 포스팅을 하고자 합니다.

주저없이 질문을 달아주시면 모르는 내용은 찾아서라도 알려드릴께요.
해결책을 찾는과정에서 제가 얻는 것들이 많기 때문에 윈윈입니다. ^^

어플리케이션 개발과 관련된 내용에는 아직 익숙하지 않지만 원하는 내용을 검색해서
답을 찾는 노하우는 많이 가지고 있다 생각합니다.

그럼 즐거운 개발활동하세요!
Posted by ekwang
Android/Tools2009. 10. 16. 15:24

window에서 어찌하다보니 JDK설치 후 다른 버젼의 JRE도 설치를 했었다.
정리를 하다가 버젼이 낮은 JRE를 삭제를 하였다.

그 이후 android sdk에 있는 tools에 있는 android, ddms와 같은 툴들을 실행하니 아래와 같은 에러가 발생하였다.

D:\SFF\Android\SDK\android-sdk-windows-1.6_r1\tools>android
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/archquery/Main (Unsupported major.minor version 49.0)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Starting Android SDK Updater
SWT folder '' does not exist.
Please set ANDROID_SWT to point to the folder containing swt.jar for your platform.


문제의 해결 방법은 간단하다.
Window의 환경변수에, 설치 혹은 삭제 후 변경된 JRE의 bin폴더를 등록하면 된다.
ex) C:\Program Files\Java\jdk1.6.0_03\bin

시스템 등록 정보에서 환경변수 수정하였다면 로그오프후 다시 확인을 해봐야 한다.
그래야 변경한 환경 변수가 다시 설정됨.

혹은 cmd 창에서 아래와 같이 입력하면 환경 변수가 바로 변경되어 시스템에 등록된다.

>set PATH=%PATH%C:\Program Files\Java\jdk1.6.0_03\bin
>set PATH

PATH=C:\Program Files\Qualcomm\Brew MP 1.0 SDK Rev 4.3\tools\deprecated\BTIL\host\bin;C:\Tool\Cygwin\bin;C:\Tool\ARM\ADSv1_2\bin;C:\WINDOWS\system32;C
:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\RnD\Rational\ClearCase\bin;D:\SFF\Android\SDK\android-sdk-windows-1.6_r1\tools;C:\Program Files\Rn
D\Rational\common;C:\Program Files\Klocwork\Klocwork 8.0 User\bin;C:\Tool\MinGW\bin;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Pro
gram Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\V
C98\bin;C:\PlaysForSure\DeviceTestKit\Utils;C:\Program Files\Klocwork\Klocwork 8.0 User\bin;C:\Program Files\Java\jdk1.6.0_03\bin;
Posted by ekwang