Android 시스템 에서 shaareuserid 를 사용 하여 시스템 권한 을 가 져 오 는 튜 토리 얼
7207 단어 Androidshareuserid
하나,같은 shareuserid 를 사용 하여 여러 개의 apk 가 같은 프로 세 스 로 실행 되 고 여러 개의 apk 간 데이터 접근 을 실현 합 니 다.
구현 효과:A.apk assets 디 렉 터 리 의 session.log 를/data/A 패키지 이름/디 렉 터 리 아래로 복사 합 니 다.
A.apk
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo1"
android:sharedUserId="com.example"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
B.apk(접근 자원 및 복사 실현)MainActivity.java
package com.example.demo2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context context = null;
InputStream input = null;
OutputStream output = null;
try {
context = this.createPackageContext("com.example.demo1",
Context.CONTEXT_IGNORE_SECURITY);
File file = new File("/data/data/com.example.demo1/session.log");
if (!file.exists()) {
file.createNewFile();
}
input = context.getAssets().open("session.log");
output = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int readLength = 0;
while((readLength = input.read(buffer)) != -1){
output.write(buffer, 0, readLength);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
if(input!=null || output!= null){
input.close();
output.close();
input = null;
output = null;
}
} catch (Exception e2) {
// TODO: handle exception
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo2"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="com.example">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
A.apk,B.apk 는 같은 shareduserid:com.example 를 사용 합 니 다.구현 효과:
2.shareduserid 를 통 해 시스템 권한 가 져 오기
(1)Android Manifest.xml 에 android:shared UserId="android.uid.system"추가
(2)Android.mk 파일 에 LOCAL 추가CERTIFICATE:=platform(시스템 서명 사용)
(3)소스 코드 아래 mm 컴 파일
이렇게 생 성 된 apk 는 system 권한 을 가 져 올 수 있 습 니 다.임의의 system 권한 디 렉 터 리 아래 에서 디 렉 터 리 나 파일 을 만 들 수 있 고 다른 apk 자원 에 접근 할 수 있 습 니 다.
확장
시스템 에 서 는 UID 를 공유 하 는 APK 로 android.uid.system 을 사용 합 니 다.먼저 manifest 노드 에 android:shared UserId="android.uid.system"을 추가 한 다음 Android.mk 에 LOCAL 을 추가 합 니 다.CERTIFICATE := platform。Settings 등 을 참고 할 수 있 습 니 다.
시스템 에 서 는 UID 를 공유 하 는 APK 로 android.uid.shared 를 사용 합 니 다.manifest 노드 에 android:shared UserId="android.uid.shared"를 추가 하고 Android.mk 에 LOCAL 을 추가 합 니 다.CERTIFICATE := shared。Launcher 등 을 참고 할 수 있 습 니 다.
시스템 에서 android.media 를 공유 UID 로 사용 하 는 모든 APK 는 manifest 노드 에 android:shared UserId="android.media"를 추가 하고 Android.mk 에 LOCAL 을 추가 합 니 다.CERTIFICATE := media。갤러리 등 을 참조 할 수 있 습 니 다.
4.문제 해결
마지막 으로 이 android:shared UserId 속성 은 apk 를 시스템 프로 세 스에 넣 을 수 있 을 뿐만 아니 라 여러 개의 APK 를 한 프로 세 스에 서 실행 하도록 설정 할 수 있 습 니 다.이렇게 하면 데 이 터 를 공유 할 수 있 고 유용 할 것 입 니 다.
AndroidMenifest.xml 에서 android:shared UserId="android.uid.system"을 볼 수 있 습 니 다.
그러나 이 문장 이 있 으 면 sd 카드 에 읽 기와 쓰기 동작 을 할 수 없습니다.예 를 들 어 SD 카드 에 새 폴 더 를 만 드 는 것 은 성공 하지 못 했 습 니 다.하지만 android:shared UserId="android.uid.system"주석 을 지우 면 SD 카드 에서 IO 작업 을 할 수 있 습 니 다.
Settings 에서 android:shared UserId="android.uid.system"은 없어 서 는 안 됩 니 다.많은 Settings 에서 응용 프로그램 이 켜 지지 않 거나 켜 자마자 잘못 보고 합 니 다.
해결 방법 1:
vold 모듈 의 Volume.cpp 파일
도 마 운 트 를 호출 하 는 문구 에 수정 을 해 주세요~
doMount(devicePath, path, false, false, false,1000, 1015, 0702, true)
↓
doMount(devicePath, path, false, true, false,1000, 1015, 0002, true)
컴 파일 해서 해 봐.해결 방법 2:
SD 카드 가 작 동 하 는 기능 을 독립 시 켜 하나의 독립 된 APK 로 만 든 다음 원래 프로젝트 에서 변경 기능 을 호출 하면 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.