First, verify the path to your SD card. You can do this by running the following command from terminal:diskutil listThe output shows a list of disks currently mounted on the system. Here's the relevant line from my output:/dev/disk3 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *8.0 GB disk3 1: DOS_FAT_32 RPISDCARD 8.0 GB disk3s1 In this case I can verify /dev/disk3 is my SD card becaus..
Android 앱을 개발하다 보면 메모리 부족 문제에 시달리기 쉽습니다. 특히, 비트맵 이미지를 로딩하다가 다음과 같이 OOM(out of memory)이 발생하는 경우가 흔합니다.java.lang.OutOfMemoryError: bitmap size exceeds VM budget 비트맵 이미지의 크기가 VM(virtual machine) 메모리의 한계를 초과했다는 것인데, 인터넷에서 검색해 보면 recycle() 메서드로 비트맵 이미지를 해제하라는 얘기가 나옵니다. recycle() 메서드를 사용하는 것이 해결책이긴 하지만, 왜 그래야 하는지에 대한 상세한 설명을 찾아보기도 힘듭니다.이로 인해 'Android 프레임워크의 비트맵 자체에 누수(leak)가 있다'는 얘기부터 'Android의 메모리 관리..
1. 갤럭시 S4에서 /system/app/SBrowser.apk를 가져와서 unzip해도 classes.dex파일일 없다. ㅠㅜ; (원래 System APP들은 apk파일에 dex파일이 없다.)2. 그래서 /system/app폴더안의 sbrowser.odex파일을 가져와서 sbrowser.dex를 만들어야 한다.3. 먼저 /system/framework폴더안에 모든 jar를 system/framework폴더로 copy한다.4. 그리고 아래 절차를 따라서$ java -jar baksmali.jar -d system/framework -x phone.odex-> out 폴더에 smali format 으로 odex 해제$ java -jar smali.jar -o classes.dex out-> out 폴더를..
오늘은 MD5와 SHA1에 대해서 간단히 알아보기로 하자. MD5(Message-Digest algorithm 5)는 말그대로 메시지 축약 알고리즘으로서 128비트의 해쉬를 제공한다. RFC-1321에 정의되어 있으며, 현재는 파일 무결성 검사용으로 많이 쓰이고 있다. 보안 관련 용도로 사용하기도 했지만, 현재 암호화 결함이 별견되어서 SHA1같은 다른 알고리즘을 사용하는것을 권장하고 있다. (MD5의 결함을 이용해서 SSL 인증서를 변조가능하다는것이, 2008년 12월에 발표되기도 했다. http://www.win.tue.nl/hashclash/rogue-ca/) SHA(Secure Hash Standard)는 암호학적 해쉬 함수들을 모아놓은것으로서 SHA-0, SHA-1, SHA-2(SHA-224, ..
0. Intro HMAC은 "The Keyed-Hash Message Authentication Code(Checksum)"을 의미하는 약어입니다. 즉, 해시를 통한 MAC인데 Key를 사용한다는 거죠. MAC은 Message Authentication Code의 약자로 정보의 무결성을 검증하는 방법입니다. 정보가 변조되었는지 알아보기 위한 것이죠. 앞으로 말씀드리겠지만, 표준이 되는 문서인 FIPS-PUB 198에 나오는 문구를 그대로 사용하자면 "the method to check the integrity of information"입니다. HMAC은 "MAC that uses a cryptographic hash function in conjunction with a secret key."입니다. ..
아래같은 복잡한 java코드를 reflection으로 어떻게 하는걸까? getInstance()가 있어서 복잡하군.. PopupWindowManager.getInstance().showBasicPopup(this, "Message", new View.OnClickListener(), new View.OnClickListener()); 이간단한 코드를 reflection으로 하는데는 아래처럼 복잡한 코드가 된다. ㅠㅜ try { Class clz = Class .forName("com.skplanet.ocb.util.PopupWindowManager"); if (clz == null) { return handle; } Method im = clz.getDeclaredMethod("getInstance");..
Processing Ordered Broadcasts원문: http://android-developers.blogspot.com/2011/01/processing-ordered-broadcasts.html[이 포스트는 Bruno Albuquerque 에 의해 작성되었습니다. 그는 구글 브라질의 Belo Horizonte 오피스에서 근무하는 엔지니어 입니다. - Tim Bray] 제가 생각하기에 안드로이드 플랫폼 상에서 가장 흥미롭고 강력한 기능 중 하나는 바로 브로드 캐스트와 이를 구현한 BroadcastReceiver 클래스입니다. (이 클래스를 구현한 것을 앞으로는 '리시버' 라고 하겠습니다.) 그 중, 이 포스트 에서는 순서가 정해진 브로드캐스트 (Ordered Broadcast) 에 관해서 이야기..
Sharing a Remote ServiceRemote Service를 구현하고 공유하는것은 어렵지 않다. different apps들이 나의 service를 사용하게 할수 있다. 즉 Remote Service를 깨울수 있는 action명을 정의하고 타 앱들이 action명을 가지고 서비스를 호출하면 된다.그럼 Secure한 Remote Service공유는 어떻게 해야할까? Secure한 Remote Service공유의 정의는 다음과 같다. 특정 app만 나의 Remote Service를 띄우게 허락한다.Singing StratigiesAndroid Developer사이트에 보면 다음과 같은 내용이 있다.signature-based permissions enforcement를 사용하면 다른 applica..