태스크 킬러 같은 프로그램을 만들어보고 있습니다.
휴대폰에 기본 내장된 작업관리자프로그램과 advaced 태스크 킬러 등 각각의 프로그램들을 보면
중지 시킬 프로세스 목록을 자신들 만의 패턴으로 정의하고 있는 것을 추측할 수 있는데요,
기본적으로 중지 시킬 수 없는 프로세스는 목록 생성시 제외하고 죽일 수 있는 프로세스만 목록에 보여줍니다.(다시 살아나는 프로세스 예외)
해당 프로세스가 죽일 수 있는 프로세스인지 판별해낼 수 있는 방법이 있나요?
<현재까지 접근 방법>
1. 전체 프로세스 목록 얻어오기 - 성공
2. shell로 명령어 접근해서 /system/app/ 목록 얻어보자 - 실패
3. 직접 파일 목록구해서 별명이름.apk로 부터
패키지 이름 얻어서 시스템 패키지 여부 확인해보자 - 성공(매우 비효율적)
4. 패키지 매니저를 통한 직접 데이터 Get - 성공(효율적)
5. 얻어낸 정보(몇개 제외)
result +="*********************************\n";
result +="Package Name: "+af.packageName+"\n";
result +="sdk 버젼: "+af.targetSdkVersion+"\n";
result +="클래스이름: "+af.className+"\n";
result +="풀패키지 경로public: "+af.publicSourceDir+"\n";
result +="풀패키지 경로: "+af.sourceDir+"\n";
result +="소스경로: "+af.dataDir+"\n";
result +="리소스지시자스타일(디폴트:0): "+af.descriptionRes+"\n";
result +="플래그값: "+af.flags+"\n";
result +="라벨: "+af.labelRes+"\n";
result +="권한:"+af.permission+"\n";
result +="프로세스이름: "+af.processName+"\n";
result +="taskAffinity: "+af.taskAffinity+"\n";
result +="테마: "+af.theme+"\n";
result +="uid: "+af.uid+"\n";
result +="*********************************\n";
일단 이정도 얻어냈지만, 이거가지고 기준이 될만한 패턴을 만들지 못하고 있습니다.
단순히 소스 경로가 /system/app/ 에 있다고 kill 목록에서 제외하면 아닌것 같고.
패키지명에 특정 문자열이 있다고해서 제외한다고 했을때도 뭔가 아닌거 같고...
(ex. inputmethod-키보드 skt-휴대폰 제조사 등등...)
힌트를 주셨으면 합니다. (_ _)
마운드// 아마 이렇게 하시면 도움될지도 모르겠습니다. 또는 직접 /data/app에서 목록을 얻어내시면 될듯.
public String getAPPList() {
String r = "";
PackageManager pm = this.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
for (ResolveInfo info : list)
{
r += "\n" + info.activityInfo.applicationInfo.loadLabel(pm).toString();
//(info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <- 기본 내장된 시스템 파일일 경우 1리턴 이걸루 판단
}
return r;
}




안녕하세요, 저도 비슷한류의 어플을 만들고있습니다. 사전지식없이 맨땅에 해딩하는 느낌인데.. 저는 DownLoad 시킨(사용자가 추가로 설치한) APP의 목록만 얻어오고싶은데요..혹시 이와관련된 함수가 있는지 궁금하네요..