Android 에서 Property 모듈 의 키 설정

Android 에서 Property 모듈 의 키 설정
Prop 모듈 은 소량의 전역 공유 정 보 를 저장 하 는 것 으로 저 장 된 데 이 터 는 정 보 량 이 적 고 크로스 프로 세 스 공유 데이터 등 특성 을 가진다.모든 정 보 는 두 개의 속성,키 이름과 키 이름 에 대응 하 는 키 값 을 포함 합 니 다.예 를 들 어:

ro.product.locale.language=en
"Ro.produt.locale.languge"는 본 제품 의 로 컬 언어 를 나타 내 고 이 정보의 이름 을 나타 내 며"en"은 이 정보의 수치 가 영어 라 는 것 을 나타 내 며 모든 응용 프로그램 이 이 컴퓨터 가 사용 하 는 언어 상황 을 알 수 있 습 니 다.인터페이스 디자인 에 도 두 개의 인자 가 필요 합 니 다.name 과 value(키 이름과 키 값)방법 은 set 와 get 이 있 습 니 다.예 를 들 어:

Set(String name,String value);
String Get(String name);
물론 상부 에서 어떻게 설계 하든지 간 에 C 하부 키 이름과 키 값 value 는 모두 char 수조 로 저 장 됩 니 다.왜냐하면 디자이너 는 name 과 value 에 들 어 오 는 데이터 크기 를 모 르 기 때 문 입 니 다.
android.os.SystemProperties 클래스 에서 prop 모듈 을 봉 인 했 습 니 다.이 클래스 는 Set 과 Get 을 사용 하여 직접 설정 하고 가 져 옵 니 다.물론 이 자바 인 터 페 이 스 는 최종 적 으로 시스템 인 터 페 이 스 를 호출 하여 완 성 됩 니 다.jni 층 에 property 가 있 습 니 다.service.c 파일,파일 에 대응 하 는 실제 처리 인터페이스 가 있 습 니 다.이 인 터 페 이 스 는 자바 에 호출 할 수 있 고 일부 시스템 명령 도 사용 할 수 있 습 니 다(예 를 들 어 setprop 과 getprop 명령 은 이 인터페이스 방법 을 호출 하 는 것 입 니 다).SystemProperties 클래스 의 get 방법 은 제한 이 없 지만 set 방법 은 권한 이 있 습 니 다.응용 프로그램 은 set 인 터 페 이 스 를 마음대로 사용 할 수 없습니다.
SystemProperties 류 의 접근 은 시스템 권한 이 있어 야 하 며,uid 는 시스템 id:1000 또는 root:0 이 어야 합 니 다.set 와 get 작업 이 다 르 기 때문에 set 시 이 작업 은 socket 파 이 프 를 만들어 cmd 를 보 내 는 것 을 통 해 이 루어 집 니 다.서버 에서 cmd 를 받 는 동시에 권한 을 비교 합 니 다.관건 적 인 코드 는 다음 과 같 습 니 다.

if (uid == AID_SYSTEM || uid == AID_ROOT)
  return check_control_mac_perms(name, sctx);
권한 만 AIDSYSTEM(시스템 ID)과 AIDROOT(root 사용자 ID)만 인증 을 통과 할 수 있 습 니 다.get 은 검사 할 수 있 는 권한 이 없 지만 생각해 보 는 것 도 정상 입 니 다.누구나 수정 할 수 있다 면 이 해커 도 너무 좋 습 니 다.물론 개인 적 으로 set 의 디자인 사용 권한 검증 은 크게 나 무 랄 데 가 없다 고 생각 하지만 시스템 속성 을 보 는 기능(get)에 대해 서 는 세분 화 할 수 있 을 것 입 니 다.예 를 들 어 일부 속성 은 중요 하지 않 고 모든 프로 세 스 와 사용자 가 읽 고 사용 할 수 있 습 니 다.물론 일부 민감 한 데 이 터 는 읽 기 권한 을 지정 할 때 도 지정 할 수 있 습 니 다.
키 이름 을 설정 할 때 주의해 야 할 곳
설정 을 할 때 두 개의 인자,변수 이름과 변수 값 을 포함 합 니 다.예 를 들 어[key]:[value].원래 대응 하 는 키 값 이 없 으 면 이 모듈 에 새 키 값 을 만 듭 니 다.그렇지 않 으 면 원래 키 값 을 덮어 씁 니 다.키 이름 은 디자인 할 때 규범 에 따라 쓰 는 것 이 좋 습 니 다.예 를 들 어'클래스 이름,모듈,용도'는 명확 하고 기억 할 수 있 으 며 충돌 하기 쉽 지 않 습 니 다.또한 속성 이름 이"ro."로 시작 하면 이 속성 은 읽 기 전용 속성 으로 간 주 됩 니 다.설정 하면 속성 치 를 변경 할 수 없습니다.이 판단 동작 은 propertyservice.c 의 propertyset 함수 에서 완 성 된 것:

if(!strncmp(name, "ro.", 3)) return -1;
"persist."로 시작 하면 이 속성 을 설정 할 때 값 도/data/property/디 렉 터 리 에 기록 합 니 다.키 이름 은 이 속성 이름 입 니 다.다음 에 켜 서 이 속성 을 다시 불 러 오고 읽 습 니 다.이 파일 의 loadpersistent_properties 함 수 는 이 기능 을 완성 하 는 데 쓰 인 다.특별한 속성 명 은"net.change"로 시작 합 니 다.그 값 은"net."로 시작 해 야 합 니 다.예 를 들 어 키 이름 은[net.change]입 니 다.그러면 키 값 은[net.qtaguid 입 니 다.enabled],이 설정 이 아직 어떤 작용 을 할 지 생각 하지 못 했 습 니 다.
셸 에 대응 하 는 prop 작업 명령
안 드 로 이 드 셸 에서 도 해당 하 는 명령 이 있 습 니 다.다음 세 가지 명령 이 있 습 니 다.
  • getprop[keyname]Keyname 은 가 져 올 키 이름 입 니 다.인자 가 없 으 면 모든 키 정 보 를 인쇄 합 니 다.
  • setprop[keyname][value]Keyname 은 가 져 올 키 이름 이 고 value 는 설정 한 값 입 니 다.이 값 은 문자열 입 니 다.
  • watchprops 감청 시스템 속성의 변 화 는 그 동안 시스템 의 속성 이 변 하면 변 화 된 값 을 표시 합 니 다.
  • init.rc 에서 도 setprop 을 사용 하여 속성 상 태 를 설정 합 니 다.
    추가 setprop:
    property 모듈 의 키 설정
    Prop 모듈 은 소량의 전역 공유 정 보 를 저장 하 는 것 으로 저 장 된 데 이 터 는 정 보 량 이 적 고 크로스 프로 세 스 공유 데이터 등 특성 을 가진다.모든 정 보 는 두 개의 속성,키 이름과 키 이름 에 대응 하 는 키 값 을 포함 합 니 다."Ro.produt.locale.languge 는 본 제품 의 로 컬 언어 를 나타 내 고 이 정보의 이름 을 나타 내 며"en"은 이 정보의 수치 가 영어 라 는 것 을 나타 내 며 모든 응용 프로그램 이 이 컴퓨터 가 사용 하 는 언어 상황 을 알 수 있 습 니 다.
    Android 단말기 속성 prop 작업 의 기본 구현
    init.c 파일 에서 main 함수 에서 start 를 호출 합 니 다.property_service(),각각 load 호출properties_from_파일 함수 읽 기 PROPPATH_SYSTEM_BUILD(/system/build.prop)、PROP_PATH_SYSTEM_DEFAULT(/system/default.prop)와 PROPPATH_LOCAL_OVERRIDE(/data/local.prop)는 시스템 속성 파일 을 저장 하고 시스템 속성 으로 설정 합 니 다.
    읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기