// SDK 22 기준.view.setDrawingCacheEnabled(true);// 임의로 measure 와 layout 을 호출한다. //view.measure(View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY), // View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.EXACTLY)); view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIF..
TDD 코드를 작성하는데, Private 메소드는 아주 귀찮은 존재입니다.잠시 public 으로 바꿔서 테스트 하거나 또는 리플렉션을 사용하여 실행 시키는 방법등이 있는데, 여러가지로 피곤함을 가중시켜요. 그러나 이런 문제를 해결하기 위한 PowerMock 과 같은 도구가 있습니다!! https://code.google.com/p/powermock/ 하지만, Android 테스트에서 Robolectric 과 Mockito 를 사용하는데, 여기다가 PowerMock 까지 붙이면 Exception 을 뿜으며 문제가 생기네요.(혹시 문제 해결책을 아시는 분 있으면 알려주십쇼..ㅠㅠ) 어쨌든 위와 같은 문제를 해결 하느라 약간의 삽질을 하다가, 허접하게 나마 아래와 같이 좀 더 편하게 private 메소드를 실..
이 슬라이드를 보고 암이 치료되었습니다... 위 슬라이드 내용을 아래와 같이 정리해 봤다. Base :: Objects.equal(), Objects.hashCode(), MoreObjectes.toStringHelper(), ComparisonChain.compare() public class Employee implements Comparable{ public String name; public Integer age; public Job job; @Override public boolean equals(Object o) { if(!(o instanceof Employee)) return false; Employee that = (Employee)o; return Objects.equal(name, t..
Application 클래스 내부 메소드인 registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks) 를 이용해야 한다. 이 메소드의 인자값으로 ActivityLifecycleCallbacks 를 상속받아 구현한 클래스의 인스턴스를 넣어준다. 또는 다른 Activity 나 Service 내부에서 getApplication(). registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks { ... }) 와 같이 호출해 주는 방법도 있다. registerActivityLifecycleCallbacks 을 더이상 사용하지 않을때는 unregisterActivityLifecycleCallbacks(A..
사실 앱 위변조 방지는 프로가드만 잘 적용하면 어느정도 방지할 수 있다. 하지만, 클라이언트 앱을 역컴파일 한다면 서버 API 가 노출되는 것을 쉽게 막을수도 없는일이다. 사실 이 문제에 대하여 당장 떠오르는 해결책은 NDK 를 사용하여 서버와 통신하는 것이다. 하지만 서버의 모든 API 호출을 C/C++ 로 구현하기에는 시간적 인적 비용이 부족한 많은 프로젝트에서는 거의 불가능에 가깝지 않을까 생각한다. 그래서 시간이 없는 상황에서는 다음과 같이 간단한 방법을 이용할 것을 권장한다. 코드상에서 서명 값을 가져와서 서버와 첫 접속시 이 값을 보내준다. 서버에는 앱의 서명 값이 이미 저장되어 있으며 이 것을 클라이언트로부터 받은 서명값과 비교하여 위변조된 앱인지 검출하는 것이다. 즉, 앱 빌드시 다른 인증..
앱의 위변조를 방지하기 위하여 서명 값을 가져와서 서버에 미리 등록된 값과 비교하는 과정이 필요하다.하지만, 안드로이드 Java 코드상으로 제공되는 API 를 활용하는 것은 안전하지 못하다.(안드로이드 자바 코드상에서 서명 값 가져오기 : http://www.dev.re.kr/70) 그렇기 때문에 JNI 를 활용해야 한다. context 를 인자값으로 받아서 jni 에서 제공되는 리플렉션을 사용하여 SHA1 으로 변환된 서명 값을 가져오는 코드를 첨부한다. 주의할 점은 아래 코드는 C++ 로 작성되었기 때문에 C 에서 사용하려면 약간의 수정이 필요하다. 이를테면 env->GetObjectClass(context); 를 C로 표현 하려면 (*env)->GetObjectClass(env, context); ..
우선 안드로이드 APK 파일은 JAR 와 호환되는 형태로 되어있다. 즉, 코드를 빌드를 하여 나오는 APK 파일은 zip 포맷과 유사한 jar 와도 비슷하다. 특히 서명에 대한 방식은 JAR 와 APK 와 매우 비슷하다. 실제로 서명을 사용해 빌드된 APK 파일 확장명을 zip 으로 변경하고 압축을 풀어보면 META-INF 디렉토리 내부에 이와 관련한 파일이 생성된 것을 볼 수 있다. 이 파일은 MANIFEST.MF, CERT.SF, CERT.RSA 파일이다. MANIFEST.MF 파일은 텍스트로 되어있으며 META-INF 디렉토리 내부의 파일을 제외한 APK 패키지 내부 모든 파일(Entry)에 대한 리스트를 보여준다. 각 리스트의 항목에는 파일 경로와 각 파일의 SHA1 해쉬 값(파일을 읽어서 만든다..
APK 파일의 압축을 풀면 classes.dex 파일과 그리고 String 과 drawable 과 같은 리소스 맵핑 정보를 담고 있는 resources.arsc 파일등과 AndroidManifest.xml 파일 외에 res 폴더 내에 여러 XML 파일등이 존재한다. 하지만 이 XML 파일은 우리가 흔히 아는 형식으로 되어있지 않다. 왜 APK 파일 내부에 있는 AndroidManifast.xml 을 비롯한 XML 파일들은 우리가 알고 있는 XML 형식이 아닌걸까? 아마도 공간을 정약하고 런타임 환경에서 빨리 리소스 정보를 읽어들일 수 있도록 바이너리 타입으로 만들었을 것이다. 안드로이드에서 사용하는 바이너리 타입의 XML 포맷에 대하여 아래 사이트에서 자세하게 설명하고 있다. https://justana..
지난 포스팅 : - 안드로이드 스튜디오에서 NDK 로 C++ 빌드하기 (Hello World 예제) 이번시간에는 NDK 를 이용하여 HTTP 통신하는 법을 알아보겠다. C/C++ 에서 HTTP 를 통신하기 위한 가장 흔한(?) 방법은 curl 을 사용하는 것이다. 그러기 위해서 curl 라이브러리를 android 에서 동작 하도록 컴파일 해야 하는데, 이는 삽질을 동반한 작업들을 해야만 한다. 그래서 이미 빌드된 정적 라이브러리를 사용하는 효율적이고 빠른 방법에 대하여 알아보겠다. 우선 android 용으로 각각의 CPU 별로 깔끔하게 빌드된 정적 라이브러리(.a) 파일을 구해야 한다. 빌드된 curl 을 구하기 위하여 github 와 구글을 한참 검색해 보다가 문득 cocos2d-x 에서 curl 을 ..
아래 내용은 mac 기준으로 작성 되었습니다. 1. 안드로이드 개발자 사이트에서 NDK 를 받아야 하지만, STL 과 Boost 를 사용하기 위해서 별도의 작업을 더 해야한다. 하지만, CrystaX 를 사용하면 쉽게 적용할 수 있다. 아래 사이트에서 최신 버전의 CrystaX 를 다운받고 압축을 푼다. 용량이 큰 것으로 받는다. 압축을 풀면 5GB 가 넘는다... https://www.crystax.net/en/download 2. 프로젝트를 생성한다. 3. 프로젝트의 app/src/main 폴더 안에 jni 폴더를 생성한다. 4. 아래 과정은 최초 한 번만 진행하면 된다. (아래 내용은 http://blog.burt.pe.kr/ 에서 참고하였습니다.) - javah 설정하기. (1) AndroidSt..
컴퓨터를 거의 24시간 내내 틀어놓고 살아가는데, 얼마 전부터 조용하던 팬이 공사장 중장비와 닮은 소리를 내기 시작했다. 낮에는 그러려니 하고 소리를 참을 수 있었지만, 밤에는 무시무시한 쿨러 소음 덕분에 좀처럼 잠을 이룰 수 없었다. 슬립 모드로 해놓아도 이따금 돌아가는 쿨러 소리에 잠을 깰때가 많았고, 결국 잠들기 전에 컴퓨터를 끄고 아침에 일어나서 다시 켜야 하는 귀찮은 작업을 반복하다가 결국 수리를 맡기려다 생각보다 비싼 비용에 질겁하여 직접 수리를 하기로 하였다. 우선 맥미니용 쿨러를 구해야 하는데, 국내에서 구하기란 쉽지 않고 역시 우리의 '알리 익스프레스' 를 이용하기로 했다. 배송은 운이 좋아 2주밖에 안 걸렸다. 이 정도면 칭찬해줘도 괜찮을듯한 가격이다. (주의할 점은 너무 싸거나 판매자..
- Total
- Today
- Yesterday
- 안드로이드 개발
- 병렬 프로그래밍
- 안드로이드
- 개발
- bluetooth
- activity
- 스마트 무드등
- HC-06
- WS2812B
- Java
- 아두이노
- 알리익스프레스
- Cheapduino
- 블루투스
- ndk
- oled
- 가습기
- 침블락
- noidemcu
- json
- 부트로더
- 칩두이노
- arduino
- NeoPixel
- ATtiny85
- ENC28J60
- ESP8266
- 이더넷
- Android
- Iot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |