권한 shareuser certificat Runtime. exec
[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 범례 를 참고 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.