新聞中心
android會(huì)為每個(gè)apk進(jìn)程分配一個(gè)單獨(dú)的空間(比如只能訪問(wèn)/data/data/自己包名下面的文件),一般情況下apk之間是禁止相互訪問(wèn)數(shù)據(jù)的。通 過(guò)Shared User id,擁有同一個(gè)User id的多個(gè)APK可以配置成運(yùn)行在同一個(gè)進(jìn)程中.所以默認(rèn)就是可以互相訪問(wèn)任意數(shù)據(jù). 也可以配置成運(yùn)行成不同的進(jìn)程, 同時(shí)可以訪問(wèn)其他APK的數(shù)據(jù)目錄下的數(shù)據(jù)庫(kù)和文件.就像訪問(wèn)本程序的數(shù)據(jù)一樣(使用IPC機(jī)制,不同進(jìn)程之間,比如AIDL)。

一、使用同一個(gè)shareuserid,多個(gè)apk運(yùn)行到同一個(gè)進(jìn)程,實(shí)現(xiàn)多個(gè)apk之間的數(shù)據(jù)訪問(wèn)
實(shí)現(xiàn)效果:把A.apk assets目錄下的session.log拷貝到/data/data/A包名/目錄下面
A.apk
AndroidManifest.xml
- package="com.example.demo1"
- android:sharedUserId="com.example"
- android:versionCode="1"
- android:versionName="1.0" >
- android:minSdkVersion="8"
- android:targetSdkVersion="15" />
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- android:name=".MainActivity"
- android:label="@string/title_activity_main" >
B.apk(實(shí)現(xiàn)訪問(wèn)資源并且拷貝)
MainActivity.java(如何訪問(wèn)assets資源文件)
- 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
- package="com.example.demo2"
- android:versionCode="1"
- android:versionName="1.0"
- android:sharedUserId="com.example">
- android:minSdkVersion="8"
- android:targetSdkVersion="15" />
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- android:name=".MainActivity"
- android:label="@string/title_activity_main" >
A.apk,B.apk使用同一個(gè)shareduserid:com.example
實(shí)現(xiàn)效果:
二、通過(guò)shareduserid來(lái)獲取系統(tǒng)權(quán)限
(1)在AndroidManifest.xml中添加android:sharedUserId="android.uid.system"
(2)在Android.mk文件里面添加LOCAL_CERTIFICATE := platform(使用系統(tǒng)簽名)
(3)在源碼下面進(jìn)行mm編譯
這樣生成的apk能夠獲取system權(quán)限,可以在任意system權(quán)限目錄下面進(jìn)行目錄或者文件的創(chuàng)建,其他apk資源的訪問(wèn)等(注意創(chuàng)建的文件(夾)只有創(chuàng)建者(比如system,root除外)擁有可讀可寫(xiě)權(quán)限-rw-------)。
三、擴(kuò)展
系統(tǒng)中所有使用android.uid.system作為共享UID的APK,都會(huì)首先在manifest節(jié)點(diǎn)中增加 android:sharedUserId="android.uid.system",然后在Android.mk中增加 LOCAL_CERTIFICATE := platform??梢詤⒁?jiàn)Settings等
系統(tǒng)中所有使用android.uid.shared作為共享UID的APK,都會(huì)在manifest節(jié)點(diǎn)中增加 android:sharedUserId="android.uid.shared",然后在Android.mk中增加 LOCAL_CERTIFICATE := shared??梢詤⒁?jiàn)Launcher等
系統(tǒng)中所有使用android.media作為共享UID的APK,都會(huì)在manifest節(jié)點(diǎn)中增加 android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media??梢詤⒁?jiàn)Gallery等。
網(wǎng)頁(yè)題目:Android如何通過(guò)shared_user_id獲取系統(tǒng)權(quán)限
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/dhpejpp.html


咨詢
建站咨詢
