테스트 하려는 APK를 일일이 설치하는 것도 일이다.

batch파일로 만들어서 한 방에 설치하자.


dir/d/b/a:-d > list.txt

FOR /F %%i IN (list.txt) DO (adb install %%i)


dir/d/b/a:-d > list.txt ==> 현재 폴더에 있는 파일 목록을 만든다.

FOR /F %%i IN (list.txt) DO (adb install %%i) ==> 목록을 읽어서 설치한다.


list.txt를 만들지 않고 설치하려면,

FOR %%f IN (*.apk) do adb install -rf %%f



저작자 표시 비영리 동일 조건 변경 허락
신고


가로 세로 회전 시 Activity의 상태를 유지하는 방법은 아래 블로그를 참고

위 방법대로 했음에도 불구하고, 
IME (Soft Keyboard)를 띄운 상태에서 가로 세로로 전환했을 때 입력한 내용이 표시가 되지 않는다면, AndoidMenifest.xml 파일을 확인해 보라.

만약 아래 처럼 android:minSdkVersion를 정의해서 쓰고 있다면 이를 삭제해서 테스트를 해 보자.
<uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="16" />

android:minSdkVersion은 안드로이드 OS버전이 얼마 이상 되야 이 앱이 설치될 수 있다는 것을 기술하는 부분인데, 
왜 도대체 이 부분이 문제가 되는 지는 잘 모르겠다.

IME 버그인지.. 안드로이드 버그인지..


저작자 표시 비영리 동일 조건 변경 허락
신고


LCD가 꺼져 있을 때 강제로 켜고 싶을 때가 있다. 

  • 메세지가 도착했을 때. (카톡과 같은 메신저류에서의 요구사항)
  • 설정한 알람 시간이 됐을 때
    : 알람 이벤트가 되면 자동으로 LCD가 켜지는 지는 모르겠다..
  • 또는 이와 같이 LCD가 꺼진 상태에서 특정 이벤트가 왔는데, 화면에 표시해야 할 때

이럴 때는 PowerManager를 이용해서 아래와 같이 wake lock을 걸어주면 된다.

먼저 AndroidMenifest.xml에 다음 퍼미션을 추가하자.
<users-permission android:name="android.permission.WAKE_LOCK"/>

wake lock을 걸 때
private void acquireWakeLock(Context context) { PowerManager pm = (PowerManager)context.getSystemService (Context.POWER_SERVICE); screenWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
, context.getClass().getName());
if (screenWakeLock != null) { screenWakeLock.acquire(); } }


wake lock을 걸고 할 일을 마쳤다면 반드시 lock을 풀어서 소모전류 이슈가 발생하지 않도록 하자.

wake lock을 풀 때
private void releaseWakeLock() { if (screenWakeLock != null) { screenWakeLock.release(); screenWakeLock = null; } }


저작자 표시 비영리 동일 조건 변경 허락
신고


앱을 개발하다 보면 미디어 스캐닝을 강제로 하고 싶은 경우가 있다.

네트웍에서 음원이나 사진을 다운받았는 데 뮤직이나 갤러리에서 표시가 안되는 경우가 그렇다.


미디어 스캐너에게 파일정보가 업데이트가 되었다는 인텐트를 보낸다.


sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://" + path)));




아래 내용은 KitKat부터 사용 불가합니다. 

미디어 스캐닝이 너무 자주 불려 성능저하를 일으키는 문제로 앱단에서 호출하지 못하도록 되었습니다.

여하튼 KK 이전 버전이라면...


이럴 때는 아래처럼 인텐트를 하나 날려주자.

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://" + Environment.getExternalStorageDirectory())));


adb로 바로 미디어 스캐닝을 하고 싶다면 이렇게..

(URI 부분을 file:///storage하면 전체 storage에 대해 스캐닝을 수행함)

adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED

file:///storage/sdcard0


저작자 표시 비영리 동일 조건 변경 허락
신고

Android 4.2 에뮬레이터의 기본 이미지는 한글이 인식이 안된다.

이럴 땐 시스템 이미지를 다음처럼 바꾸면 된다.


먼저 Android SDK Manager에서 "MIPS System Image"를 다운로드 받자.



AVD에서 위에서 받은 이미지를 사용하도록 설정




요즘트위터페이스북더보기

저작자 표시 비영리 동일 조건 변경 허락
신고

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

if (tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT){
    // 유심이 없는 경우
else {
    // 유심이 존재하는 경우
}

저작자 표시 비영리 동일 조건 변경 허락
신고

먼저 Rooting이 되어 있어야 가능.


adb remount

adb shell rm system/app/app.apk

adb uninstall packagename

저작자 표시 비영리 동일 조건 변경 허락
신고

tee가 실행 안된다...

걍 cygwin bash에서 아래 명령어로 저장하자.


$ adb logcat -v time | tee . logcat.txt

$ adb shell cat proc/kmsg | tee . kmsg.txt


원문: http://blog.daum.net/bluebread/8


저는 보통 ddms보다는 logcat을 사용하는데요.

로그를 실시간으로 보면서 자동저장할 수도 있다는 점에서 ddms보다 훨씬 강력합니다.


 logcat.pl

첨부한 파일은 자동으로 로그파일명에 날짜_시간 형식의 timestamp를 붙여서 저장하도록 한 perl script 입니다.

 
실행하면 다음과 같이 cmd 창에 메시지가 스크롤됩니다.

 
동시에 로그파일 디렉토리에 다음과 같이 파일이 생성되어 있게 됩니다.


요구사항
1. perl 이 설치되어 있어야 합니다. (당연!)


2. tee를 사용하기 위해 cygwin이 설치되어 있어야 합니다. 

   만약 리눅스 환경이라면 이미 tee가 있을 겁니다.

   (tee는 화면에 표시하는 동시에 파일로 저장하는 기능을 하는 유틸리티입니다.)


사용법

1. c:\ 에다가 logcat.pl을 복사합니다.
   다른 디렉토리를 사용하셔도 무방합니다.
 
2. 에디터로 log_dir을 자기가 쓰는 프로젝트 로그 파일 위치로 변경합니다.
   바꾸지 않으시면 현재 디렉토리(C:\)에 로그가 만들어집니다.
 
3. 다음 명령행을 입력하시면 실행됩니다.
   C:\> logcat.pl
 
   "-v time" 이 아닌 다른 파라미터를 주고 싶으시면 원하는 파라미터를 붙여서 실행하십시오.
   C:\> logcat.pl -v thread ActivityManager:I
 
 
파라미터를 주지 않으면 "-v time" 이 디폴트 파라미터로 주어집니다.
타임스탬프가 찍혀 나오므로 대개의 경우 가장 유용합니다.
 
다음 페이지에 가보시면 adb logcat에서 어떤 파라미터를 사용할 수 있는지 보실 수 있습니다.

저작자 표시 비영리 동일 조건 변경 허락
신고

http://ecogeo.tistory.com/251?srchid=BR1http://ecogeo.tistory.com/251

저작자 표시 비영리 동일 조건 변경 허락
신고

  • Default로 설정할 때
ResolverActivity.OnClick() {
.....
if (filter != null) {
                final int N = mAdapter.mList.size();
                ComponentName[] set = new ComponentName[N];
                int bestMatch = 0;
                for (int i=0; i<N; i++) {
                    ResolveInfo r = mAdapter.mList.get(i).ri;
                    set[i] = new ComponentName(r.activityInfo.packageName,
                            r.activityInfo.name);
                    if (r.match > bestMatch) bestMatch = r.match;
                }
                getPackageManager().addPreferredActivity(filter, bestMatch, set,
                        intent.getComponent());
            }
}
}
  • Default 해제 할 때 (Settings>Launch by default>Clear defaults)
InstalledAppDetails.onClick() {
........
else if(v == mActivitiesButton) {
mPm.clearPackagePreferredActivities(packageName);
mActivitiesButton.setEnabled(false);
}
........
}

저작자 표시 비영리 동일 조건 변경 허락
신고

티스토리 툴바