日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android如何通過shared_user_id獲取系統(tǒng)權(quán)限

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

一、使用同一個(gè)shareuserid,多個(gè)apk運(yùn)行到同一個(gè)進(jìn)程,實(shí)現(xiàn)多個(gè)apk之間的數(shù)據(jù)訪問
    實(shí)現(xiàn)效果:把A.apk assets目錄下的session.log拷貝到/data/data/A包名/目錄下面

A.apk

AndroidManifest.xml

 
 
 
 
  1. package="com.example.demo1"
  2. android:sharedUserId="com.example"
  3. android:versionCode="1"
  4. android:versionName="1.0" >
  5.     android:minSdkVersion="8"
  6.     android:targetSdkVersion="15" />
  7.     android:icon="@drawable/ic_launcher"
  8.     android:label="@string/app_name"
  9.     android:theme="@style/AppTheme" >
  10.     
  11.           android:name=".MainActivity"
  12.           android:label="@string/title_activity_main" >
  13.           
  14.           
  15.                     
  16.           
  17.      
  18.      
  19.      

B.apk(實(shí)現(xiàn)訪問資源并且拷貝)
MainActivity.java(如何訪問assets資源文件)

 
 
 
 
  1. package com.example.demo2;
  2.     import java.io.File;
  3.     import java.io.FileOutputStream;
  4.     import java.io.IOException;
  5.     import java.io.InputStream;
  6.     import java.io.OutputStream;
  7.     import android.os.Bundle;
  8.     import android.app.Activity;
  9.     import android.content.Context;
  10.     import android.content.pm.PackageManager.NameNotFoundException;
  11.     import android.view.Menu;
  12.     import android.view.MenuItem;
  13.     import android.support.v4.app.NavUtils;
  14.     public class MainActivity extends Activity {
  15.         @Override
  16.         public void onCreate(Bundle savedInstanceState) {
  17.             super.onCreate(savedInstanceState);
  18.             setContentView(R.layout.activity_main);
  19.             Context context = null;
  20.             InputStream input = null;
  21.             OutputStream output = null;
  22.             try {
  23.                 context = this.createPackageContext("com.example.demo1",
  24.                         Context.CONTEXT_IGNORE_SECURITY);
  25.                 File file = new File("/data/data/com.example.demo1/session.log");
  26.                 if (!file.exists()) {
  27.                     file.createNewFile();
  28.                 }
  29.                 input = context.getAssets().open("session.log");
  30.                 output = new FileOutputStream(file);
  31.                 byte[] buffer = new byte[1024];
  32.                 int readLength = 0;
  33.                 while((readLength = input.read(buffer)) != -1){
  34.                     output.write(buffer, 0, readLength);
  35.                 }
  36.             } catch (Exception e) {
  37.                 // TODO Auto-generated catch block
  38.                 e.printStackTrace();
  39.             }
  40.             finally{
  41.                 try {
  42.                     if(input!=null || output!= null){
  43.                         input.close();
  44.                         output.close();
  45.                         input = null;
  46.                         output = null;
  47.                     }
  48.                 } catch (Exception e2) {
  49.                     // TODO: handle exception
  50.                 }
  51.             }
  52.         }
  53.      
  54.         @Override
  55.         public boolean onCreateOptionsMenu(Menu menu) {
  56.             getMenuInflater().inflate(R.menu.activity_main, menu);
  57.             return true;
  58.         }
  59.      
  60.     }

AndroidManifest.xml

 
 
 
 
  1.         package="com.example.demo2"
  2.         android:versionCode="1"
  3.         android:versionName="1.0"
  4.         android:sharedUserId="com.example">
  5.         
  6.             android:minSdkVersion="8"
  7.             android:targetSdkVersion="15" />
  8.         
  9.             android:icon="@drawable/ic_launcher"
  10.             android:label="@string/app_name"
  11.             android:theme="@style/AppTheme" >
  12.             
  13.                 android:name=".MainActivity"
  14.                 android:label="@string/title_activity_main" >
  15.                 
  16.                     
  17.                     
  18.                 
  19.             
  20.         
  21.     

A.apk,B.apk使用同一個(gè)shareduserid:com.example
實(shí)現(xiàn)效果:

二、通過shareduserid來獲取系統(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資源的訪問等(注意創(chuàng)建的文件(夾)只有創(chuàng)建者(比如system,root除外)擁有可讀可寫權(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??梢詤⒁奡ettings等

系統(tǒng)中所有使用android.uid.shared作為共享UID的APK,都會(huì)在manifest節(jié)點(diǎn)中增加 android:sharedUserId="android.uid.shared",然后在Android.mk中增加 LOCAL_CERTIFICATE := shared??梢詤⒁奓auncher等

系統(tǒng)中所有使用android.media作為共享UID的APK,都會(huì)在manifest節(jié)點(diǎn)中增加 android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media??梢詤⒁奊allery等。


網(wǎng)站名稱:Android如何通過shared_user_id獲取系統(tǒng)權(quán)限
文章來源:http://www.5511xx.com/article/dhpejpp.html