Android/Application2014. 10. 30. 16:42

남는 시간에 몇가지 android application 관련 공부를 좀 하다가,

쉽게 그럴싸한 app을 만들 수 있는 방법으로 포털이나 정부에서 제공하는 open api를 이용하는 방법으로

방향을 잡았다.


몇가지 OPEN API 제공 사이트

- 네이버 : http://developer.naver.com/wiki/pages/OpenAPI

- API STORE : http://www.apistore.co.kr/api/apiList.do

- DAUM API : http://dna.daum.net/apis/dashboard

- 공공 데이터 포탈 : https://www.data.go.kr/#/L21haW4=


그 외 google, twitter, facebook, kakao 등에서도 각 회사에서 제공하는 여러 서비스들에 대한 open api를 제공하고 있다.


open api 사용을 위해서 기본적으로 

open api 사용에 대한 권한 획들을 위한 OAUTH

서비스 request를 위해 REST, HTTP(POST, GET)

받아온 결과의 출력을 위한 XML(parse) 에 관련된 class들을 찾아보고 이해하면

제공되는 API들을 쉽게 사용할 수 있을 것이다.


Naver에서 제공하는 cafe API를 이용해서 원하는 cafe의 최신글만 android widget으로 출력하여 접근 용이하게 하는 app을 만들던중... 최신글의 list를 출력 해주는 service가 없어서 개발 중단. --;

Posted by ekwang
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
Android/Application2012. 12. 3. 12:00

Android JB부터 MediaCodec class가 추가되어

device에서 지원 하는 codec을 NDK로의 추가 구현 없이도 유연하게 사용할 수 있게 되었다.


MediaCodec을 이용하여 codec으로부터의 output data를 application이 쉽게 얻을 수 있다는 말이다.


여기저기 기웃 거려보아도 동작하는 sample code가 없기에

시간을 좀 들여서 작성을 해보았다.

본인이 Android Application 개발자가 아니라 Android API 사용에 유창하지 않으니

API level 16부터 추가된 MediaCodec, MediaExtractor, MediaFormat 등의 사용에 참고만 하였으면 하는 바램이다.





Posted by ekwang
Android/Tools2012. 11. 20. 23:54

우분투에서 eclipse에 ADT plugin 을 설치 하였는데,

보이지가 않는다!


java version 이 1.6이하라서 그렇네.


java -version 해서 1.6 이하일 경우 update후 ADT를 재 설치 하면 해결.


update JDK to 1.6

Posted by ekwang
Android/Tools2011. 12. 15. 00:17

오랫만에 집에있는 노트북에서 android source 를 받으려고 했더니 아래와 같은 문제가 발생한다.

$repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

Getting repo ...

   from git://android.git.kernel.org/tools/repo.git

android.git.kernel.org[0: 149.20.4.77]: errno=Connection refused

fatal: unable to connect a socket (Connection refused)  


생각해보니 android.git.kernel이 공격을 당해서 android git repository가 변경이 되었었지..
오래전에 받아둔 repo를 그대로써서 문제가 된것이다.

$vi ~/bin/repo

#!/bin/sh


## repo default configuration

##

REPO_URL='https://android.googlesource.com/tools/repo'

REPO_REV='stable'


구버젼 repo의 REPO_URL은 위의 주소가 아닌 git://android.git.kernel.org/... 로 되어 있을 것이다.
REPO_URL을 변경해 주거나, 깔끔하게 repo를 삭제하고 다시 받는게 좋다.

Posted by ekwang
Android/Tools2011. 12. 13. 09:31

Windows 환경에서 CTS 테스트를 진행 하는 방법에 대한 설명.
CTS tool 중 ddmlib-prebuilt.jar, junit.jar, hosttestlib.jar 를 사용하여 auto test가 진행되고
testResult.xml 파일을 생성해준다.

1.     우선 아래 사이트에서 최신 CTS를 다운 받고 압축을 적절한 위치에 푼다.

http://source.android.com/compatibility/downloads.html

Android 2.3 R9 Compatibility Test Suite (CTS)

 

2.     첨부의 cts.cmd 파일을 적절한 위치로 copy한 후 본인의 CTS 설치 경로에 맞게 편집 한다. (현재 파일 첨부가 안되어 cts.cmd 파일이 없음. 아래 내용을 cts.cmd에 저장하여 사용하면 됨.)

cd D:\project\document\Android\CTS\android-cts-2.3_r9-linux_x86-armv5\android-cts\tools
 

java -Xmx512m -cp "cts.jar;D:\project\document\Android\CTS\android-cts-2.3_r9-linux_x86-armv5\android-cts\tools\ddmlib-prebuilt.jar;junit.jar;hosttestlib.jar" com.android.cts.TestHost "D:\project\document\Android\CTS\android-cts-2.3_r9-linux_x86-armv5\android-cts\repository\host_config.xml"

 

3.     window cmd창에서 cts.cmd 파일 실행. cts_host> 프롬프트가 보이면 정상임을 확인 후 exit

 

4.     \android-cts-2.3_r9-linux_x86-armv5\android-cts\repository\testcases 경로에 있는

TestDeviceSetup.apk 와 본인이 테스트할 apk를 설치 한다. (ex. CtsMediaTestCases.apk)

 

 >  adb install r Development.apk (Dev Tool 이 없으면 설치 해야 됨)

 > adb install r TestDeviceSetup.apk

 > adb install r CtsMediaTestCases.apk

 

5.     다시 cts.cmd를 실행. cts_host> 에서 상황에 맞게 아래 cmd 입력.

package명이나 testcase, test 명은 CtsMediaTestCases.xml 파일에서 확인 할 수 있음.

<TestSuite name="android">       

                <TestSuite name="media">           

                        <TestSuite name="cts">               

                                <TestCase name="MediaPlayerStreamingTest">                   

                                        <Test name="testRTSP_H263_AMR_Video1"/>

 

1)     CtsMediaTestCases.apk package의 전체 항목 테스트

cts_host>start --plan CTS -p android.media

2)     CtsMediaTestCases의 원하는 TestCase 항목만..

cts_host>start --plan CTS -p android.media.cts.MediaPlayerStreamingTest

3)     CtsMediaTestCases의 원하는 TestCase 의 원하는 Test .

cts_host>start --plan CTS -t android.media.cts.MediaPlayerStreamingTest#testRTSP_H263_AMR_Video1

  

6.     결과 확인

\android-cts-2.3_r9-linux_x86-armv5\android-cts\repository\results

Posted by ekwang
Android/Application2011. 9. 17. 00:39
Google music beta 초대권 8장 배포 합니다.

google musicmanager deb file for ubuntu.


$sudo dpkg -i google-musicmanager-beta_current_i386.deb


의존성 에러 발생하면

$sudo apt-get install -f


android device용 apk 파일!

Posted by ekwang
Android/Application2011. 7. 27. 15:51
Android application 중에

한국에서 정식(?)의 경로로 다운로드 받을 수 없는 app들이 많다.

근래 설치한 것 두개를 공유.

    Android Market App : 


      http://android-developers.blogspot.com/2011/07/new-android-market-for-phones.html

    Google + App :  


      https://plus.google.com/

혹시 google + 초대가 필요하신 분은 말씀하시면 됩니다.

초대 방식이 바뀌었네요.
아래 링크를 통해서 들어오시면 자동으로 초대가 됩니다.

google plus invitation link
https://plus.google.com/_/notifications/ngemlink?path=/?gpinv=v5CVOHwOJ_0:uttHM5Ayyyg


Posted by ekwang
Android/Platform2011. 2. 10. 10:59

Error generating final archive: Debug certificate expired

어느날 갑자기 eclipse console에 위와 같이 "Debug certificate expired" 라는 문구가 뜬다면
사용하고 있던 debug.keystore 파일이 만료가 된 것이다. 파일 수명은 1년이다.

debug.keystore는 .android 폴더에 존재하고 있는데 다음과 같이 경로를 확인할 수 있다.
Eclipse - Window - Preferences



확인 하였으면 파일을 과감하게 삭제한다

파일을 삭제했는데도 왜 빌드가 안되냐..이러는 분들이 있는데,
eclipse의 Package Explore(workspace) 에 등록되어 있는 프로젝트들을 삭제하고 
다시 import를 하니 잘 되었다.

아래는 원문 참고..

Expiry of the Debug Certificate

The self-signed certificate used to sign your application in debug mode (the default on Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.

When the certificate expires, you will get a build error. On Ant builds, the error looks like this:

debug:
[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
[exec] Debug Certificate expired on 8/4/08 3:43 PM

In Eclipse/ADT, you will see a similar error in the Android console.

To fix this problem, simply delete the debug.keystore file. The default storage location for AVDs is in ~/.android/ on OS X and Linux, in C:\Documents and Settings\\.android\ on Windows XP, and in C:\Users\\.android\ on Windows Vista.

The next time you build, the build tools will regenerate a new keystore and debug key.

Note that, if your development machine is using a non-Gregorian locale, the build tools may erroneously generate an already-expired debug certificate, so that you get an error when trying to compile your application. For workaround information, see the troubleshooting topic I can't compile my app because the build tools generated an expired debug certificate.



I can't compile my app because the build tools generated an expired debug certificate

If your development machine uses a locale that has a non-Gregorian calendar, you may encounter problems when first trying to compile and run your application. Specifically, you may find that the Android build tools won't compile your application because the debug key is expired.

The problem occurs because the Keytool utility — included in the JDK and used by the Android build tools — fails to properly handle non-Gregorian locales and may create validity dates that are in the past. That is, it may generate a debug key that is already expired, which results in the compile error.

If you encounter this problem, follow these steps to work around it:

  1. First, delete the debug keystore/key already generated by the Android build tools. Specifically, delete thedebug.keystore file. On Linux/Mac OSX, the file is stored in ~/.android. On Windows XP, the file is stored inC:\Documents and Settings\<user>\.android. On Windows Vista, the file is stored in C:\Users\<user>\.android
  2. Next, you can either
    • Temporarily change your development machine's locale (date and time) to one that uses a Gregorian calendar, for example, United States. Once the locale is changed, use the Android build tools to compile and install your app. The build tools will regenerate a new keystore and debug key with valid dates. Once the new debug key is generated, you can reset your development machine to the original locale.
    • Alternatively, if you do not want to change your machine's locale settings, you can generate the keystore/key on any machine using the Gregorian calendar, then copy the debug.keystore file from that computer to the proper location on your development machine.

This problem has been verified on Windows and may apply to other platforms.

For general information about signing Android applications, see Signing Your Applications.



-끝-
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