Nano Blog - 오병우

프로그래밍/Android 프로그래밍 +34

이미지 처리 효율화 방법

http://www.youtube.com/watch?v=pMRnGDR6Cu0


https://developer.android.com/intl/ko/training/displaying-bitmaps/index.html

ListView를 일정 시간 간격으로 재로딩할 경우 스크롤 위치를 저장하고 복원할 필요가 있다.



Fragment에서 사용하는 예제~~

앱 개발시 Facebook SDK를 사용할 때 페이스북 앱이 설치되어 있지 않으면 인터넷을 통해 인증되고 정상 동작하지만, 페이스북 앱이 깔려 있으면 로그인 화면이 페이스북 앱의 로그인 화면이 나오면서 인증이 되지 않는 증상으로 난감했다.


결론부터 말하자면 Facebook 개발자 홈페이지에 등록한 안드로이드 앱의 Key Hash 때문이다.


개발자 홈페이지에 debug용 및 앱 업로드용 Key Hashes를 모두 등록해 두어야 한다.



1. 먼저 자신의 Debug용 Key Store가 어디에 있는지 파악해야 한다.

C:\Users\에 현재 계정의 아이디로 폴더가 지정되므로 탐색기로 들어가서 .android 폴더가 있는지와 .android 폴더 내에 debug.keystore 파일이 있는지 확인해야 한다.

예를 들어, 현재 사용하는 계정이 Administrator라면 탐색기로 

C:\Users\Administrator\.android 폴더에 debug.keystore 파일이 있는지 확인한다.


2. Keytool을 사용하여 인증서를 익스포트해야 한다.

keytool.exe 파일은 자바 런타임을 설치하면 깔린다. 자바 런타임 버전에 따라 숫자가 달라진다.

예를 들어, 자바 런타임이 7버전이라면 C:\Program Files\Java\jre7\bin 폴더에 keytool.exe 파일이 설치된다.


커맨드 창(cmd)을 실행하여 (1)번에서 확인한 Debug용 Key Store를 지정한다. alias로는 androiddebugkey를 지정한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore


위와 같이 실행하면 암호를 물어본다. 여기서는 android를 입력한다.


제대로 되었다면 이상한 문자들이 나타날 것이고 (삑삑 소리도 들리고...), 잘못 되었다면 눈으로 알아볼 수 있는 문자(오류를 설명하는 테스트)들이 나타난다.


3. 암호화 하여 Key Hash를 만든다.

이 때 openssl이 설치되어 있어야 한다. 밑의 명령어를 cmd 창에서 실행해 보고 안된다면 openssl을 설치하고 수행해야 한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore | openssl sha1 -binary


마찬가지로 이상한 문자들이 나타나면 성공!!!


4. Base64로 인코딩한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore | openssl sha1 -binary | openssl base64


5. cmd 창에서 마우스 오른쪽 버튼을 눌러서 "표시"를 선택하고 커서로 출력 스트링을 선택하고 Enter를 누른다.


6. 페이스북 개발자 홈페이지의 Key Hashes에 Ctrl+V로 붙여넣기하고 맨 맽에 오른쪽에 있는 "변경 내용 저장" 버튼을 누른다.


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

주의할 점은, 앱 업로드용으로는 다른 별도의 Key Store를 사용하므로 그 키스토어에 대한 Key Hash를 추가로 지정해 주어야 한다.

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

그리고, 페이스북 개발자 홈페이지에서 Status & Review에서 general public?을 "예"로 해두어야 한다.

또한, 설정에서 Single Sign On에서도 "예"로 설정해 두었다.



항상 this, getActivity(), getApplicationContext() 쓸 때 혼동이 오네요.


싱글톤 객체 만들 때의 예제와 각 Context별 사용과 관련된 좋은 블로그 글이 있어서 링크를 걸어둡니다.


http://www.kmshack.kr/354

한 눈에 볼 수 있어서 좋으네요~


http://androiddrawables.com/


http://androiddrawableexplorer.appspot.com/



시스템에 있는 것을 활용하는 것은 양날의 칼 같습니다. 쉽게 쓸 수 있고 공통성이 있지만, 버전 업되면서 언제 바뀔지 (심지어는 없어질지) 모르죠..



위의 링크 중간 쯤에 내려가 보면 Download the Action Bar Icon Pack 링크가 있습니다.


Android SDK 설치 디렉토리에서 접근할 수도 있습니다.

[설치 디렉토리]\adt-bundle-windows-x86_64-20130729\sdk\platforms\android-18\data\res\drawable-hdpi

Android의 공식 API 가이드

http://developer.android.com/intl/ko/guide/topics/ui/drag-drop.html



다음은 android.view.View.OnDragListener 를 사용한 예제

조금 이상하게 동작하는 것 같으나, 소스가 간단하니 조금만 수정하면 될 듯...


http://www.techrepublic.com/blog/software-engineer/try-androids-useful-drag-and-drop-api/



Drag & Drop으로 순서를 바꾸려면 ImageView를 별도의 LinearLayout으로 각각 묶고... 다음을 Drop에 추가하면 된다.


View swapped = to.getChildAt(0);

to.removeView(swapped);

from.addView(swapped);



만약 원래 예제 처럼 빈 곳에 넣으려면 또 조금 수정하면 될 듯.

유용한 코드들이 많네요~


http://www.technotalkative.com/category/android/listview/

URL에서 이미지를 여러 개 받아와야 할 때 매우 유용한 소스입니다.


https://github.com/thest1/LazyList/


ImageLoader imageLoader=new ImageLoader(this); imageLoader.DisplayImage("http://127.0.0.1/image.php", imageView);


라이센스는 MIT license.

강추!!!


웹에서 UI를 통해 간단히 리소스(아이콘, 테마, 위젯 등)를 만들어서 다운로드 받을 수 있는 사이트


http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html

공식 사이트에서 디자인을 위한 데이터를 다운로드 할 수 있습니다.


http://developer.android.com/design/downloads/index.html



http://developer.android.com/design/style/iconography.html


홈 페이지 내에서 액션바 아이콘 팩도 다운로드 받을 수 있습니다. (AI 파일)

구글 검색 결과

Bluetooth Serial Port Profile


소스 설명 잘되어 있는 듯

http://goldenking.tistory.com/10


http://blog.naver.com/oh4zzang/40111958220


http://hardroid.net/profiles/blogs/bluetooth


소스 코드 첨부

http://gangsanilee.tistory.com/1252



임베디드 보드 & 소스코드

http://blog.naver.com/PostView.nhn?blogId=free2824&logNo=60108857440&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

Android에서 WiFi로 고프로의 영상을 받을 수 있는 듯...


VLC로 접근할 수 있으니 어디서든 볼 수 있을 것으로 생각됨.


https://github.com/moohtwo/Android-GoPro-Streaming

https://github.com/moohtwo/Android-GoPro-Streaming/blob/master/Gopro/src/com/mooh/gopro/GoproActivity.java


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

이건 H/W 인터페이스로 USB를 통해 시리얼 통신으로 카메라 제어하는 듯...

http://www.appliedlogiceng.com/index_files/Page1039.htm


명령어들은 ATC 이런것 들이어서 모뎀과 비슷한 듯...


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

Unofficial firmware tools

https://github.com/evilwombat/gopro-fw-tools


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

built-in USB command mode도 있나 보네요...

https://github.com/evilwombat/gopro-usb-tools

File-Export 로 apk 파일 생성


https://play.google.com/apps/publish


iOS보다 간단해서 이것만은 좋다.

이클립스 실행

오른쪽 위에서 DDMS 버튼 누르고

디바이스 선택한 후에 카메라 모양 아이콘 누르면 됨.


그 뒤에는 Refresh, Save 반복


안드로이드 앱 apk 파일은 50MB이내여야 한다.


50MB이내 더라도 에뮬레이터의 열악한 환경에서는 에러가 발생할 수 있다.


이미지가 많아지면서 apk 파일의 용량이 증가하고 다음과 같은 에러가 발생하여 에뮬레이터에서 실행이 불가능하게 되었다.


Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE


구글링해보니 몇 가지 방법이 있었다.


1. AndroidManifest.xml 파일 수정

<manifest> 태그에 android:installLocation="preferExternal"를 추가한다.


단, 이걸 하려면 에뮬레이터에서 SD Card의 용량을 지정해 두어야 할 것으로 예상된다. SD Card 용량을 너무 크게 잡으면 하드 디스크가 낭비되니 주의!!


2. 메뉴 Run-Run Configurations에서 해당 앱 선택하고 Target 탭 눌러서 맨 밑에 있는 Additional Emulator Command Line Options에 다음을 추가한다.


-partition-size 1024 


내 경우에는 해결되지 않았다.


3. log 파일 삭제 방법


cmd 실행하여 android-sdk-windows\platform-tools폴더 들어가서  adb shell 실행

cd data/log

rm *


에뮬레이터에 있는 로그 파일들을 삭제하는 방법인데, 내 경우엔 log 폴더 자체가 없어서 실행할 수 없었다.


1번을 사용하여 간신히 앱은 에뮬레이터에 올라갔는데...비트맵을 로딩하니 VM의 heap을 초과했다고 강제 종료된다...ㅠ.ㅠ


겔럭시 S2에서는 동작했으니 exception 처리 정도로 마무리해야 할 듯...


https://play.google.com/apps/publish/에 접속한다.


e-mail과 패스워드를 입력하고 Sign in을 눌러 로그인한다.


앱의 가운데 부분에 다운로드 수와 현재 디바이스에 깔려 있는 수가 나온다.