pinkred's mobile program

pinkred mobile programer

Archive for the ‘Uncategorized’ Category

Android Jack Compiler

leave a comment »

전혀 알지 못한 컴파일러 였다. 이 컴파일러를 아는데 도움을 준 realm강의 고마움을 표시합니다.

들어봤으면 해보고 싶은 마음이 굴뚝 같아서 진행해보기로하였다. 구글 가이드 문서

1.일단 가장 간단하게 Jack Compiler를 Gradle에 넣는다. (참고 : http://tools.android.com/tech-docs/jackandjill)

android {
...
buildToolsVersion ‘25.0.2’
defaultConfig {
// Enable the experimental Jack build tools.
jackOptions {
enabled true
}
}
...
}

여기서 만일 java 1.8버전의 문법 약간이나마 사용하고 싶은 경우에는

android {
...
buildToolsVersion ‘21.1.2’
defaultConfig {
// Enable the experimental Jack build tools.
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

...
}

2. 이후 컴파일 후에 APT에 이슈가 발생하였다. 몰랐는데 APT가 2.2.0이후 버전인가에서는 APT가 통합되어 있어서 APT 로 시작하는 ‘com.neenbedankt.android-apt’ 여러가지 라이브러리를 삭제하고 다음과 같이 넣어주면 된다.(참조 : https://github.com/nickwph/annotation-processor-with-java8-jack-and-jill-android)

dependencies {
 // dagger 2
 compile 'com.google.dagger:dagger:2.5'
 annotationProcessor 'com.google.dagger:dagger-compiler:2.5'
 // auto-value
 compile 'com.google.auto.value:auto-value:1.2'
 annotationProcessor 'com.google.auto.value:auto-value:1.2'
 // butterknife
 compile 'com.jakewharton:butterknife:8.1.0'
 annotationProcessor 'com.jakewharton:butterknife-compiler:8.1.0'
 // logan square
 compile 'com.bluelinelabs:logansquare:1.3.6'
 annotationProcessor 'com.bluelinelabs:logansquare-compiler:1.3.6'
}

3. 기존에 오래된 라이브러리가 지원을 하지 않는 경우가 발생 하였다. Google Conversion Tracking and Remarketing for Android의 라이브러리가 지원하지 않아 문제였는다. 다행이 사용하지 않는 라이브러리여서  과감히 삭제후 재 빌드.

4. 거의다 왔다. 컴파일을 시작해보자. 빌드 시간이 대략 15분 걸렸다. ㅜㅜ 생각보다 너무 오래 걸려서 놀랐다 2번 연속으로 하면 out of memory 가 발생하기도 한다. 충분한 android studio 에 메모리를 잡아주었지만 발생하였다.

5. 결과는 기존 릴리즈 버전은 8.8메가 정도의 APK 크기이고 Jack Compiler을 이용해서 릴리즈 버전을 생성시키면 8.4메가 정도의 APK 가 생성된다. 고생 무지 했는데 0.4메가 줄임. ㅜㅜ

6. 여기서 이슈발생 Android 5.0이하에서는 MultiDex가 제대로 동작하지 않아서 실행시 “java.lang.NoClassDefFoundError” 가 발생하여 앱이 종료된다.

7. https://code.google.com/p/android/issues/detail?id=213483 나온데로 진행해 보았지만 아직 안됨. 추후에 MultiDex 이슈가 해결되면 다시 진행해 볼 예정입니다.

Written by pinkredmobile

2017/01/19 at 5:50 pm

[Android] Facebook – Keyframes

leave a comment »

페이스북의 ‘좋아요’ 를 누르고 있으면  이모티콘들이 열심히 움직이고 있다. 이를 구현하자고 하는 이슈가 있어서 찾아본 결과.

https://code.facebook.com/posts/354469174916519/keyframes-delivering-scalable-high-quality-animations-to-mobile-clients/

멋지게 페이스북에서 오픈소스로 제공하고 있다. 감탄..

  1. github에서 제공하는 After Effects Plugin 을 설치한다.
  2. After Effects를 이용하여 애니메이션을 만든다.(제약 사항있음)
  3. Plugin을 사용하여 데이터를 JSON 포맷으로 변형하여 받는다.
  4. 데이터를 Keyframes 라이브러리를 이용하여 호출하면 애니메이션이 됩니다.

Android, iOS, JS를 지원합니다. 처음 접했을때는 버전이 낮았는데 지금은 1.0 버전으로 정식 릴리즈 되었습니다. 물론 내부적으로는 현재 지원되지 않는 기능들을 몇가지 필요로 하여 추가적으로 코드를 수정하여 지원되도록 했습니다. 추가 하기도 어렵지 않고 소스코드도 복잡하지 않아서 지원하지 않는 기능들을 쉽게 추가할 수 있습니다.

처음에는 많은 고민이 있었는데 이렇게 쉽게 라이브러리로 제공되니 Facebook 너무 고맙네요.

Written by pinkredmobile

2016/12/29 at 11:44 am

[Android] Fresco 이미지 라이브러리 사용법

leave a comment »

Glide 이미지 라이브러리를 사용하다가 Fresco라이브러리를 알게 되었다.  이전글 참조

본격적으로 써보기 위해서 프로젝트에 적용해보고 ‘Glide 이미지 라이브러리 사용법‘처럼 업데이트 하는 식으로 진행하려고 한다.

  1. fresco.recrack.com 지원 사이트로 한국어로 되어있어 좋지만, 영어 버전이 더 최신업데이트 되어서 영어 버전으로 보는것을 잊지 말아야 한다.
  2. Glide와 비교해서 처음 네트워크를 통해서 뜨는 시간이 Fresco가 더 빠르다. 같은 버전을 두고 비교해도 더 빨리 뜨는것을 확인할수 있다. 물론 이미지 용량과 크기에 따라서 어떻게 될지는 모르겠지만 현재 프로젝트 테스트 결과 더 빠르다. 다른 곳처럼 표와 동영상으로 올리고 싶지만 여기까지다.
  3.  Glide 에서 Fresco로 바꿀때 어려울것 같지만 실제 사용하는 네트워크로 받는 화면들이 한정적이여서 쉽게 전환이 가능했다.  또한 사용방법도 쉬어서 금방 수정 가능하다.
  4. 용량이 문제다 정말 모든것을 다가지고 있어서 그런지 패키지시에 약 5메가 정도가 늘었다. 이건 배보다 배꼽이 더 큰경우가 되겠다. 페이스북이야 워낙 용량이 커서 5메가쯤은 별거 아니겠지만 앱크기가 5메가인데 이미지라이브러리가 5메가인셈이다. ㅜㅜ
  5. 리스트 스트롤 속도는 Glide보고 감동했는데 Fresco는 더 좋다. 역시 모든게 다있어서 그런지 잘구현했다.
  6. 앱의 가장 중요한점의 하나가 Activity간에 중복된 이미지를 보여줄때가 있는데 캐쉬 접근이 어려워서 어떻게 할지 고민 중이였는데 (Glide, Fresco) 둘다 캐쉬를 적중하는 방법이 해당 ImageView의 사이즈가 동일해야 캐쉬가 적중되기 때문에 다음 화면에서 이전의 화면과 동일하게 ImageView 크기를 설정하고, listener를 등록하여 캐쉬에서 이미지를 읽어오면 Layout크기를 원래 크기로 변경하여 해결 가능하다.
  7. 용량문제 해결 방안으로는 사용하지 않는 ndk라이브러리 제거를 하거나 ndk라이브러리 별로 apk를 제작하는 방식이 있다. 후자는 apk가 많이 생기고 관리가 어려워서 포기 전자로 하기로 한다.  ndk에서 x86관련 항목을 제거하는 방식이다. 그러나 해당 방식이 deprecated가 되어있어 gradle.properties에
    android.useDeprecatedNdk=true 해당 라인을 추가해주어야 한다.

추후 업데이트


2016.4.26.

Fresco 라이브러리가 0.9.0 -> 0.10.0 업데이트 되었습니다. 필요한 부분별로 라이브러리를 추가할수 있어서 용량이 대폭 감소하였습니다. 릴리즈 apk사용시에 기존보다 약 2메가 용량이 감소하였습니다. 정말 이제는 필수 라이브러리가 될것 같습니다. 기존의 버그도 많이 수정되었습니다.

okhttp 3.0라이브러리도 정식으로 지원합니다.

Written by pinkredmobile

2016/01/14 at 2:52 pm