서비스 관련 지식 복습.
System property 파일 이름은 system.prop, locate
명령으로 찾아 보세.
JNI_CreateJavaVM
jint
JNI_CreateJavaVM(JavaVM **p_vm, JNIEnv **p_env, void *vm_args);
로드해, Java
VM 를 초기화합니다. 현재의 thread가 메인 thread가 됩니다. env 인수를, 메인 thread의 JNI
인터페이스 포인터에 설정합니다.
안드로이드 프레임웍에 서비스 추가시
Android /
frameworks/ base /services / java
에 추가될 서비스의 자바 파일을 LOCAL_SRC_FILES에 추가.
실재 넣을 파일은 java/com/android/server 아래 적절한 위치에 추가.
base/services/java/com/android/server/pm/PackageSignatures.java
base/services/java/com/android/server/pm/PackageSettingBase.java
base/services/java/com/android/server/pm/PackageSetting.java
base/services/java/com/android/server/pm/PackageManagerService.java
Base/services/java/com/android/server/pm/
PackageSettings
- PackageSettingsBase - GrantedPermissions
Signature.java -> byte[] 타입의 시그니처 정보 저장.
Base/core/java/android/context/pm
PackageSignatures
writeXml 함수
readXml 함수
assignSignatures 함수
Signature[] mSignatures;
String countStr =
parser.getAttributeValue(null, "count");
mSignatures = new Signature[count];
PackageSettingsBase 는 PackageSignature를 가지고 있고 , PackageSetting
가 base를 상속해서
실재로 쓰여짐.
PackageManagerService.java에서
allowed =
(compareSignatures(bp.packageSetting.signatures.mSignatures,
pkgParser.mSignatures) == PackageManager.SIGNATURE_MATCH)
||
(compareSignatures(mPlatformPackage.mSignatures,
pkgParser.mSignatures) == PackageManager.SIGNATURE_MATCH);
Signature 정보를 사용함.
if (bp != null
&& bp.packageSetting != null) {
final String perm = bp.name;
boolean allowed;
boolean allowedSig = false;
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.