권한 shareuser certificat Runtime. exec

http://topic.csdn.net/u/20100120/13/376b0dd0-3d38-4587-94f6-1759123cdbcc.html?73205
 
 
 
[Mokoid] 의 LedTest 범례 에서 [AndroidManifest. xml] 파일 을 찾 습 니 다.이 파일 은 응용 프로그램의 '납품 명세서' 입 니 다.LedTest 를 개발 하 는 과정 에서 우 리 는 다음 과 같은 속성 을 추가 했다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mokoid.LedTest"
android:sharedUserId="android.uid.system" >

원래 ServiceManager 는 응용 프로그램의 권한 을 검사 합 니 다.Android 작업 시스템 은 UID 에 따라 권한 관 제 를 하 는데 여기 서 말 하 는 UID 는 Linux 시스템 관리 면 에서 논의 하 는 User ID, 즉 사용자 ID 입 니 다.[frmeworks / base / cmds / servicemanager / service manager. c] 에서 이 실제 작품 을 찾 습 니 다.
int svc_can_register(unsigned uid, uint16_t *name)
{
unsigned n;
 
if ((uid == 0) || (uid == AID_SYSTEM))
return 1;
 
for (n = 0; n < sizeof(allowed) / sizeof(allowed[0]); n++)
if ((uid == allowed[n].uid) && str16eq(name, allowed[n].name))
return 1;
 
return 0;
}
 
int do_add_service(struct binder_state *bs,
uint16_t *s, unsigned len,
void *ptr, unsigned uid)
{
struct svcinfo *si;
// LOGI("add_service('%s',%p) uid=%d/n", str8(s), ptr, uid);
 
if (!ptr || (len == 0) || (len > 127))
return -1;
 
if (!svc_can_register(uid, s)) {
LOGE("add_service('%s',%p) uid=%d - PERMISSION DENIED/n",
str8(s), ptr, uid);
return -1;
}
...












AndroidManifest.xml Android.mk

AndroidManifest.xml



<uses-permission android :name="android.permission.ACCESS_SURFACE_FLINGER" />

        <uses-permission android:name="android.permission.VIBRATE"/>

      

<manifest xmlns:android="http://schemas.android.com/apk/res/android "

    package="com.android.inputmethod.pinyin"

    android:sharedUserId="android.uid.system">   

   

Android.mk



LOCAL_CERTIFICATE := platform

manifest android:sharedUserId="android.uid.system"   。  

platform , , 。

, ,

。  

system uid = 1000 。



}

AID_SYSTEM 은 1000, 즉 system server 의 UID 로 정의 된다.위 와 같은 실제 작품 을 통 해 알 수 있 듯 이 ServiceManager 는 응용 프로그램의 UID 를 검사 합 니 다. UID 가 규정 에 부합 되 지 않 으 면 do 를 실행 할 수 없습니다.add_service()。
즉, 애플 리 케 이 션 의 UID 가 1000 이 아 닐 때 Android Service 를 추가 할 수 있 는 권한 이 없습니다.따라서 AndroidManifest. xml 에 android: shared UserId 속성 을 추가 하 는 목적 은 다음 과 같 습 니 다. 응용 프로그램의 UID 를 android. uid. system 즉 1000 으로 정의 하면 프로그램 은 Android Service 를 추가 할 수 있 는 권한 을 가 집 니 다.
Mokoid 가 제공 하 는 범례 를 예 로 들 면, "우 리 는 안 드 로 이 드 응용 프로그램 에서 안 드 로 이 드 서 비 스 를 시작 하기 때 문 입 니 다". 따라서 이 부분 에 각별히 유의 해 야 합 니 다.전형 적 인 새로운 Android Service 방법 은 frameworks / base / services / java / com / android / server / System Server. java 파일 을 수정 하 는 것 입 니 다. 그러나 '3M 분기 유지보수 정책 의 이념 은 원본 Android 프로그램 코드 를 변경 하지 않도록 하 는 것' 이기 때문에 우 리 는 이러한 'Start LedService in a seperated process' 방법 을 사용 합 니 다.자세 한 내용 은 Mokoid 범례 를 참고 하 세 요.

좋은 웹페이지 즐겨찾기