일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- deprecating the install_referrer
- RXjava
- rxandroid
- Retrofit2
- RxJava2
- Android
- Rx자바
- RX
- andorid studio
- hardcoded string search
- java
- 하드코드검색
- android P
- Switch to the Play Referrer API by March 1
- 안드로이드
- Today
- Total
목록분류 전체보기 (65)
Lucky Dog
Switch to the Play Referrer API by March 1, 2020 기존에 사용하던 Referrer(INSTALL_REFERRER) 를 새로운 API 로 마이그레이션 하라는 것. 해당 기능 동작 안해도 앱 사용에는 지장이 없다. 그래도 가능하면 처리하도록 하자. 내 앱에서는 그런 기능 사용한 적 없는데? =>직접 정의하지 않아도 마케팅 SDK 나 Fireabse 등에 해당 기능이 포함되어 있을 수 있다. Referrer(INSTALL_REFERRER) 가 무엇인가? 간단하게 얘기하면 유입 경로를 분석/처리 하기 위한 기능으로, 직접 정의해서 사용하거나 마케팅 sdk, Firebase 등 에 해당 기능이 포함되어 있다. 예를들어 Firebase를 사용할 경우 앱 패키징(apk)을 디컴파..
Android 10 사용을 위해 androidx 로 마이그레이션 할 때, 보통 안드로이드 스튜디오 'Refactor' -> 'Migrate AndroidX..' 메뉴를 이용하게 된다. 문제는 build.gradle 의 implementation 은 AndroidX로 변경해주지만 XML 에 정의된 레이아웃들은 변경해주지 못할 때가 있다. 예를 들면 CoordinatorLayout 의 경우 위와 같이 사용하다가 AndroidX 로 전환하면 아래와 같이 자동 변경될 것으로 기대하지만 변경되지 않는다; 이러면 컴파일에러가 아니라 런타임 에러가 발생하기 때문에 제대로 테스트가 안되면 꽤나 문제가 된다. 안드로이드 스튜디오 자동 마이그레이션 툴을 너무 믿지 말고 마이그레이션 후 전체 검..
Operator 자바 관점에서는 메서드. 순수함수(Pure functions) 생성, 변환, 필터, 합성, 오류처리, 유틸리티, 조건, 수학과집합형, 배압 등이 있다. map 입력 값을 어떠한 함수에 넣어서 원하는 값을 반환하는 함수 String[] balls = {"1", "2", "3", "4", "5"}; // First way Observable source = Observable.fromArray(balls) .map(ball -> ball + ""); // Second way // Function getDiamond = ball -> ball + ""; // Observable source = Observable.fromArray(balls).map(getDiamond); source.subs..
RxJava - 데이터 발행자 (Data source) Observable class 옵서버 패턴을 구현. 데이터 흐름에 맞게 알림을 보내 구독자가 데이터를 처리할 수 있도록 한다. 데이터를 무한하게 발행 할 수 있다. 세 가지 알림을 구독자에게 전달 onNext : Observable이 데이터의 발생을 알림. onComplete : 모든 데이터 발행 완료 알림. 이후 onNext 발생 안함. onError : 에러 발생. onError 이벤트 후에 onNext 및 onComplete 발생안함. Observable source = Observable.just(1, 2, 3, 4, 5); source.subscribe(System.out::println);Cold Observable vs Hot Obser..
Scheduler 데이터를 처리하고자 하는 특정한 스레드 Scheduler 용도 Schedulers.computation( ) 이벤트-루프와 콜백 처리 같은 연산 중심적인 작업을 위해 사용된다. 그렇기 때문에 I/O를 위한 용도로는 사용하지 말아야 한다(대신 Schedulers.io( )를 사용) 기본적으로 스레드의 수는 프로세서의 수와 같다 Schedulers.io( ) 블러킹 I/O의 비동기 연산 같은 I/O 바운드 작업을 처리한다. 이 스케줄러는 필요한 만큼 증가하는 스레드-풀을 통해 실행된다; 일반적인 연산이 필요한 작업은 Schedulers.computation( )를 사용하면 된다 Schedulers.newThread( ) 각각의 단위 작업을 위한 새로운 스레드를 생성한다 AndroidSche..
RxJava Java 로 Reactive Programming 을 구현하기 위한 라이브러리 구성요소 Observable Observer Operator Observable 데이터 제공자. 지속적으로 흐름을 파악할 수 있는 데이터. Ex) 현실에서 유튜버를 Observable 하다 라고 할 수 있고, 유튜버를 구독하는 사람들을 구독자(Subscriber) 라고 할 수 있다. Observable 의 두 가지 종류 Hot Observable 구독자(Subscriber) 가 없어도 동작 (클릭 이벤트, 센서 이벤트 등) Cold Observable 구독자(Subscriber) 가 있을 때만 동작 (웹 요청, DB쿼리 등) Observable 예시 just 를 통해 1, 2, 3, 4 를 Emit(방출) 하는 O..
WeakReference vs StrongReference 우선 가비지 컬렉션에 대해 알아야 한다. 자바 가비지 컬렉션(Java Garbage Collection) 이란? 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다. 자바 가비지 컬렉션(Java Garbage Collection)은 객체가 가비지인지 판별하기 위해 'reachability'라는 개념을 사용한다. root set으로부터 연결되어 객체에 유효한 참조가 있으면 'reachable'로, root set으로부터 연결되어 있지 않으면 'unreachable'로 구별하고 가비지로 간주해 GC를 수행한다. (unreachable 객체들끼리 참조하는 경우도 root set으로부터 연결되어 있지 않으므로 unrea..
Retrofit2 Multiple base url Retrofit 에서 여러 개의 base url을 사용해야 하는 경우 아래와 같이 처리한다. RetrofitManager public class RetrofitManager { private static final String TAG = RetrofitManager.class.getSimpleName(); private static HttpLoggingInterceptor logging = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); private static class LazyHolder { static final RetrofitManager INSTANCE = ne..
DataBinding (데이터바인딩) 데이터 바인딩 라이브러리를 사용하여 선언적 레이아웃을 작성하고 애플리케이션 로직과 레이아웃을 바인딩하는데 필요한 글루 코드를 최소화할 수 있다. 데이터 바인딩 라이브러리는 유연성과 폭넓은 호환성을 모두 제공하는 지원 라이브러리로, Android 2.1(API 레벨 7 이상)까지 Android 플랫폼의 모든 이전 버전에서 사용할 수 있다. 데이터 바인딩을 사용하려면 Android Plugin for Gradle 1.5.0-alpha1 이상이 필요하다. [build.gradle] android { .... dataBinding { enabled = true } }[xml] ... ... [src] Activity @Override protected void onCreat..
문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) 출력 상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정..
fromArray Array 의 값을 Observable 형태로 변환 Integer[] arr = new Integer[]{ 1, 2, 3, 4, 5 }; Observable observable = Observable.fromArray(arr);map 입력 값을 어떠한 함수에 넣어서 원하는 값을 반환하는 함수 Integer[] arr = new Integer[]{ 1, 2, 3, 4, 5 }; Observable.fromArray(arr).map((Function) integer -> integer + 10) .subscribe(new DisposableObserver() { @Override public void onNext(Object o) { Log.d("TAG", "Object o : " + o)..
Droid Knights 2019 Java vs Kotlin 실제 안드로이드 코드 사례. 발표자 박상권 2017년 Google I/O에서 공식 언어로 지정 Java Annotation 과 비교 var address: String? = null // @Nullable 과 같음 var id: String = "ted" // @NonNull 과 같음 var와 달리 val 은 get() 만 가능 물음표를 이용해서 null이 아니라면 다음 변수를 참조할 수 있도록 체이닝할 수 있습니다. 이러한 개념을 safe call이라고 합니다. ex) 순차적으로 null 체크 후 변수가 null 이라면 null 리턴 private fun getSelectedDealerName(car: Car?) : String? { retu..
RxAndroid + Retrofit2 + LazyHolder singleton (Initialization-on-demand holder idiom) 패턴을 이용한 네트워크 통신 예제 코드가 간결해지고 측정은 안해봤지만 왠지 속도도 빨라진 것 같은 느낌적인 느낌 :D build.gradle dependencies { ... implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'com.squareup.okhttp3:okhttp:3.10.0' // Dependencies okio 1...
빌드 변형 구성을 통해 단일 프로젝트에서 다양한 버전의 앱을 생성할 수 있다. flavorDimensions 'mode' productFlavors { demo { dimension 'mode' buildConfigField("boolean", "IS_DEMO", "true") } full { dimension 'mode' buildConfigField("boolean", "IS_DEMO", "false") } }boolean isDemo = BuildConfig.IS_DEMO;
Room Persistence LibraryRoom은 SQLite의 추상 레이어를 제공하여 SQLite의 모든 기능을 활용하면서 유려하게 데이터베이스 액세스를 할 수 있습니다.구성요소1. Datbasedatabase의 holder를 만든다. annotation으로 entities(Table의 구조와 mapping되는 class)를 정의하고, 클래스 내부에 dao를 정의한다.@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); } 인스턴스 생성AppDatabase db = Room.databaseBuilder(g..
SDK API 28 (9.0) 이상을 사용하면 Android X 마이그레이션이 필요하다.메뉴->Refactor> AndroidX 로 마이그레이션을 선택하면 자동으로 마이그레이션 됨
2019 년 8 월 1 일 부터 : 신규 앱 및 앱 업데이트는 Google Play에 게시 할 때 32 비트 버전 외에도 64 비트 버전을 제공해야합니다. 2021 년 8 월 1 일 부터 : Google Play는 64 비트 버전이 없는 기기에서 64 비트 버전이 지원되지 않는 앱의 게재를 중단합니다.즉, 해당 기기의 Play 스토어에서 더 이상 사용할 수 없습니다. The 64-bit requirement: what it means for developersStarting August 1, 2019:All new apps and app updates that include native code are required to provide 64-bit versions in addition to 32-bit..
1. 개인정보의 처리 목적 - 개인정보를 수집하지 않음2. 개인정보의 처리 및 보유 기간 - 개인정보를 처리 및 보유하지 않음3. 개인정보의 제3자 제공에 관한 사항 - 해당되지 않음 4. 개인정보처리의 위탁에 관한 사항 - 해당되지 않음 5. 정보주체와 법정대리인의 권리․의무 및 그 행사방법에 관한 사항 - 해당되지 않음 6. 처리하는 개인정보의 항목 - 개인정보를 수집하지 않음 7. 개인정보의 파기에 관한 사항 - 개인정보를 수집하지 않음 8. 개인정보 보호책임자에 관한 사항 - 개인정보를 수집하지 않음 9. 개인정보 처리방침의 변경에 관한 사항 - 사용자 공지10. 개인정보의 안전성 확보조치에 관한 사항 - 개인정보를 수집하지 않음11. 개인정보 자동 수집 장치의 설치∙운영 및 그 거부에 관한 사항..
1. 반응형 프로그래밍 (Reactive Programming) > 비동기 데이터 스트림을 사용한 프로그래밍.OOP (Object Oriented Programming) 와 같이 하나의 '개발 패러다임' 이다. 2. Rx (Reactive Extension, ReactiveX) > 반응형 프로그래밍 개발을 위한 라이브러리. Ex) RxJava, RxJs, RxSwift, RxKotlin, RxAndroid, RxCpp 등이 있다. 참조 : http://reactivex.io/languages.html 3. RxJava2 > 자바에서 반응형 프로그래밍 개발을 위한 라이브러리. RxJava 와 RxJava2 는 단순히 라이브러리 버전 1.x 와 2.x 차이.특별히 RxJava 1, 2 와 같이 명시하지 않고..
CI 서버가 아니라면 명시할 필요 없는 옵션임. preDexLibraries 증분 빌드가 더 빨라지도록 라이브러리 종속성을 pre-dex할지 여부를 선언합니다. 이 기능은 클린 빌드를 느리게 만들 수도 있으므로, CI(Continuous Integration) 서버에서 이 기능을 비활성화하는 것이 좋습니다. Ex)android {... dexOptions { preDexLibraries = false }... MS에서의 증분 빌드(Incremental Build) 규모가 큰 프로젝트를 빌드하는 경우, 이전에 빌드된, 아직까지 최신 상태인 구성 요소는 다시 빌드하지 않는 것이 중요하다. 왜냐하면 매번 모든 대상을 빌드하려면 너무나 오랜 시간이 걸리기 때문이다. 따라서 증분 빌드가 필요하며, (추가적인 지식..
프로세스에서 'TortoiseGit status cache' 종료 후 폴더 갱신
Android X com.android.support.* 또는 android.support.*와 Android Architecture Component에서 사용하던 android.arch.*의 패키지 명을 안드로이드 라이브러리 28.0.0부터 새로운 androidx.* 패키지 명으로 교체 변경하지 않으면 빌드시 에러가 발생할 수 있다. AndroidX 로 변경 Android Studio > Refactor Menu > Migrate to AndroidX... 또는 아래 방법으로 에러 회피 AndroidManifest.xml application 태그안에 아래 구문 추가 tools:replace="android:appComponentFactory"android:appComponentFactory="what..
투명한 배경의 흰색 아이콘으로 만들어야 한다. (White icon) 안드로이드 Pie (9.0 / API 28) 기기에서 일반 이미지 아이콘을 Notification smallIcon 으로 사용하면원래 이미지가 아니라 흰색 또는 회색 단색으로 푸시 아이콘이 표시된다. 투명한 배경의 흰색 아이콘을 만든 후 코드 상에서 분기하면 해결. if (android.os.Build.VERSION.SDK_INT >= 28) { // Android P icon = R.drawable.ic_white_noti;}Colored by Color Scriptercs 참고 제작도구 : Android studio > New > Image Assets > IconType(Notification)
의존성 주입 (DI : Dependency Injection) 의존성 주입(Dependency Injection, DI)은 프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴 중의 하나이다. 아래 예시와 같이 인스턴스를 전달하는 것 예시 일반적인 경우 B--->A (B는 A에 의존성이 있다.) class A { public void doSomthing() { B b = new B(); b.showAnything(); } } 의존성 주입 (setter 를 통한 주입) class A { B b; public void setB(B b) { this.b = b; } public void doSomthing() { b.showAnything(); } ..
Git 환경설정 및 사용방법 1. 클라이언트 git 설치 bash실행 $git init $ ls -al $git config --global user.name luckydog$git config --global user.email luckydog@gmail.com $git add test.txt (또는 git add . )=>stage에 올린다 $git status=>현재 상태 $git commit test.txt (또는 git commit . )=>커밋 * add가 SVN에 add가 아니라 여기서는 stag에 올린다는 개념. 즉 최초 add 후에도 수정해서 commit 할때마다 add 후 commit 해야함 (강제로 commit 해도 먹긴 먹는듯)프로젝트 첫 commit 에서는 반드시 메시지를 작성해야..
참조 : https://developer.android.com/guide/topics/security/permissions#normal-dangerous
에러발생 원인 안드로이드 P 버전(9.0) 에서 'HTTP' 를 사용하면 발생. - java.net.UnknownServiceException : CLEARTEXT communication to xx.xxx.xxx.xx not permitted by network security policy - java.io.IOException: Cleartext HTTP traffic to www.google.com not permitted 해결방법 1. AndroidManifest.xml 수정 android:usesCleartextTraffic="true" 추가 2. HTTPS 사용
가급적 implementation 사용, 라이브러리는 api 사용 (기존 compile 과 동일) 새 구성지원 중단된 구성동작implementationcompile컴파일 타임에는 모듈에 종속성을 사용할 수 있으며, 런타임에만 모듈 소비자에게 종속성을 사용할 수 있습니다. 대규모의 다중 프로젝트 빌드에서 api/compile 대신 implementation을 사용하면 빌드 시스템이 재컴파일해야 하는 프로젝트의 크기가 줄어들기 때문에 빌드 시간이 상당히 개선될 수 있습니다. 대부분의 앱과 테스트 모듈은 이 구성을 사용해야 합니다.apicompile컴파일 타임에는 모듈에 종속성을 사용할 수 있으며, 컴파일 타임과 런타임에는 모듈 소비자에게도 종속성을 사용할 수 있습니다. 이 구성은 compile(지금은 지원 ..
Caused by: java.io.EOFException: \n not found: limit=0 content=… 1. 서버 방화벽 문제 =>접속 허용으로 해결 2. Tomcat keepAliveTimeout 문제 connectionTimeout 을 늘린다고 해결 안됨. (keepAliveTimeout 을 끄거나 늘려야 함) o 이슈 재현Tomcat7 server.xml 설정 keepAliveTimeout 시간을 줄이고 (ex 1~100)휴대폰에서 접속하면 에러 발생 maxThreads 초과하는 접속은 java.net.SocketTimeoutException: SSL handshake timed out 발생 o Retrofit2 error message java.io.IOException: unexpe..