전체 글 213

Android Keystore 데이터 보안에 대한 테스트

* 내가 알고있는 Keystore 동작 Keystore 데이터 보안은 앱이 구글에 등록되어있는 앱을 기준으로 동작한다. 생성할때 해당 패키지를 포함한 container? 에 서명키를 저장한다(어딘지는 불명확) 위와 같은 원리로 암호화값 + Keystore = 이중 암호화 이런식으로 적용하여 2중 보안을 하는 동작방법을 사용해보았다. * 정확한 동작에 대한 해답은 찾지 못했지만 몇가지 테스트로 동작을 추측해보았다. - (구글앱스토어 등록된)A프로젝트 co.a.b패키지 => Keystore 생성 암호화(dataKeyA) => dataKeyA 저장하기 => 저장된 dataKeyA가져오기 => Keystore 복호화 => 결과 : 복호화 완료 - (구글앱스토어 미등록된)B프로젝트 co.c.d패키지 => data..

Android Study 2020.02.25

android viewBinding 방식(Java,kotlin)

간단한 예제로 a.xml 파일에 TextView id 값이 tv_text 를 클릭 했을때 tv_text 에 "hello" 를 적어보겠다. * 예전부터 사용하던 viewbinding 방식 java TextView tv_text = findViewById(R.id.tv_text); .... final TextView tv_text = findViewById(R.id.tv_text); tv_text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tv_text.setText("hello"); } }); * ButterKnife viewbinding 방식 java app > buildgradle 에..

Android Study 2020.02.22

CallbackListener interface 활용한 함수 동기화시키기

- MainActivity.java - Aclass.java 1. MainActivity 에서 Aclass 있는 funA()를 호츨한다. 2. Aclass 에 있는 funB()를 호출한다. 3. MainActivity 에서 funC()를 호출한다. *단 funB()는 10초후에 호출된다. 그럼 위의 상태는 현재 비동기식 상태라 출력하면 funA() funC() 10초후 funB() 이렇게 나옴, 위를 해결하기 위해서 onActivityResult()도 활용하거나, 아예 클래스를 변경해서 Aclass 에서 funB() funC() 를 모두 생성해서 로직을 바꾼다던가 하는 방법 들이있다. 그런데 이 방법등을 사용하게 되면 기존 로직이 흐트러지거나, 이 로직으 위해 다른 로직이 복잡해 질수도 있다. 그래서 c..

Android Study 2020.02.20

안드로이드 해상도 폴더별 dimens

dimens 폴더는 안드로이드에서 사이즈를 담당 하는 폴더로써, 폴더를 안드로이드에서 자체적으로 디바이스 사이즈에 맞는 폴더를 가져다 사용하는 것이며, 폴더별 담당하는 디바이스 화면은 아래와 같음. 보통 - xhdpi \ dimens.xml 아래의 장치는 normal - xhdpi \ dimens.xml을 변경할 때 화면 크기를 변경할 수 있습니다. Nexus 5X (5.2 "* 1080 * 1920 : 420dpi) nexus 6P (5.7 "* 1440 * 2560 : 560dpi) Nexus 6 (6.0 "* 1440 * 2560 : 560dpi) nexus 5 (5.0 ", 1080 1920 : xxhdpi) Nexus 4 (4.7 ", 768 * 1280 : xhdpi) Galaxy Nexus ..

Android Study 2020.01.14

Error : Can't create handler inside thread Thread[....] that has not called Looper.paepare( ) (feat. Android)

함수에 딜레이를 줄때 사용하는 방법 구글중에 엄청나게 많은 자료들이 존재함 그중에 한가지 방법을 소개하면(하지 말아야할 코드) private void Delay(){ new Handler().postDelayed(new Runnable(){ @Override public void run(){ // A 구간 // 1500 -> 15초 // 최초 Delay() 호출 15호 후에 호출될 곳 } },1500); } 위와같이 해도 동작은 잘됨 근데 위의 코드는 간헐적으로 작동이 됨(이유는 모르겠음) 실사례를 말하면 앱을 최초 설시후 Delay 호출 안됨 -> 앱을 완전 종료후 재 실행 -> Delay 호출됨 아이러니하지만 실제로 이렇게 작동되었다. try{ catch 로 묶어놨기에 앱이 죽지 않아 불행중 다행이라..

Exception Study 2020.01.09

안드로이드 Background 상태 체크하기

어떤 글을 보면 구글에서 만든 라이브러리를 사용하면 쉽다고 하여 직접 라이브러리를 사용하여 어떨때 호출이 되는지 확인해 보았다. implementation 'android.arch.lifecycle:extensions:1.1.1' 해당 라이브러리 추가후 로그를 찍어본결과, activity lifecycle 과 같은 패턴이었다. 그냥 activity 라이브러리를 사용하는것이 나을듯 하다. background 일때만 호출하는 부분을 찾아내야하는데 위의 라이브러리는 actvity lifecycle 처럼 해당 activity 가 종료될때도 호출된다. 결국 이 것도 로직을 따로 짜야한다.

Android Study 2019.12.18

현재 액티비티가 보여지고 있는것인지 확인하는 Activity 함수

단순한 Activitlifecycle 응용방법으로는 onPause( ) , onResume( ) 방법이 있다. 앱이 백그라운드 상태 일때 onPause( ) 가 호출되고, 다시 포그라운드 상태일때 onResume( ) 이 호출된다. 하지만 이는 액티비티가 종료되고, 다른 액티비티가 실행될때에도 실행되는 함수들이기 때문에 꼬이는 경우가 있을수도 있다. 그래서 찾아낸것은 onWindowFocusChanged( ) 함수이다. 백그라운드 상태를 체크한다기보단, 좀 더 정확하게 "(onWindowFocusChasnged( )를 가지고있는) Activity 가 최상단 인지 체크한다고 보면된다." 함수 그대로 지금의 윈도우가 Focus 되고있나 를 체크하는 함수이다. 코드는 아래와 같다. public class Ma..

Android Study 2019.12.18