2022년 1월 21일 금요일

How to kill Android process

1. Android process 죽이는 방법 1
ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo service : am.getRunningAppProcesses()) {
if (service.processName.equals("com.android.test")) {
android.os.Process.killProcess(service.pid);
break;
}
}

2. Android process 죽이는 방법 2
Runtime.getRuntime().exec("am force-stop com.android.test");

2022년 1월 20일 목요일

How to generate .jks file with .pk8 and .pem

$ openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -password pass:android -name platform
$ keytool -importkeystore -deststorepass android -destkeystore platform.jks -srcstoretype PKCS12 -srcstorepass android -srckeystore platform.p12

ValueAnimator 를 이용한 애니메이션 만들기

sequence images 를 사용해서 애니메이션을 표현해야 할 때가 있습니다.
기존에는 AnimationDrawable을 사용해서 애니메이션을 만들었는데 사용하기 쉬운 반면
이미지가 커지면 로딩하는데 시간이 오래 걸리는 단점이 있습니다.
고민 하던 중에 ValueAnimator를 이용해서도 애니메이션을 만들 수 있다는 것을 알았고
이것은 이미지 개수나 사이즈에 상관없이 바로 수행이 되는 장점이 있습니다.

1. ValueAnimator valueAnimator = ValueAnimator.ofInt(valueStart, valueEnd).setDuration(duration);
ValueAnimator는 정해진 duration동안 onAnimationUpdate()를 호출하는데 parameter로 valueStart 부터 valueEnd 사이의 값을 넘겨줍니다.

2. onAnimationUpdate() 내에서 value값에 해당되는 imageview의 리소스를 교체해 줍니다.

3. 예제는 1초 동안 0~99의 값을 onAnimationUpdate()를 통해서 넘겨줍니다.
100개의 이미지가 있고 이것을 1초동안 play하기를 원한다면 이미지들을 배열로 만들어서 해당 value에 맞는 리소스를 교체해 주면 됩니다.

int valueStart = 0;
int valueEnd = 99;
int duration = 1000;
ValueAnimator valueAnimator = ValueAnimator.ofInt(valueStart, valueEnd).setDuration(duration);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int value = (int) valueAnimator.getAnimatedValue();
imageView.setImageResource(R.id.);
}
});
valueAnimator.start();

Android adb 명령어

1. screen capture
ex) adb shell screencap -p /sdcard/screen.png

2. 특정 기기 선택
ex) adb -s devicename shell screencap -p /sdcard/screen.png

3. broadcast
adb shell am broadcast -a packagename --ei key value --es key value
ex) adb shell am broadcast -a com.android.test
ex) adb shell am broadcast -a com.android.test --ei event 1 --es name "john snow"

4. 화면 이동
ex) adb shell am start -a android.settings.SETTINGS
ex) adb shell am start -a android.settings.BLUETOOTH_SETTINGS
ex) adb shell am start -n com.android.car.carlauncher/.AppGridActivity

5. display 선택
adb shell am start -a activity --display number
ex) adb shell am start -a android.settings.SETTINGS --display 0

6. app 삭제
ex) adb shell pm uninstall --user 0 com.android.test

7. key event 전달
ex) adb shell input keyevent 4

[Reference]
https://developer.android.com/studio/command-line/adb

2022년 1월 19일 수요일

Android Timer 관련 정리

1. 일정 시간마다 작업하기를 원할 때
Timer와 TimerTask를 이용한 반복 작업 구현.
아래 예제는 15초 동안 5초마다 한번 씩 작업하는 예제
Timer timer = new Timer();
TimerTask TT = new TimerTask() {
@Override public void run() {
// Do something...
}
};
timer.schedule(TT, 5000, 15000);
view raw schedule.java hosted with ❤ by GitHub
2. 일정 시간마다 작업하기를 원할 때
CountDownTimer를 이용한 반복 작업 구현.
아래 예제는 10초 동안 0.5초마다 한번 씩 작업하는 예제
CountDownTimer progress = new CountDownTimer(10000, 500) {
public void onTick(long millisUntilFinished) {
// Do something...
}
public void onFinish() {
}
};
progress.start();
3. 일정 시간 후에 한 번 원하는 작업을 하고 싶을 때
아래 예제는 1초 후에 한번 작업하는 예제
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Do something
}
}, 1000);
view raw timer.java hosted with ❤ by GitHub