温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android中怎么利用shared_user_id获取系统权限

发布时间:2021-06-28 15:43:07 来源:亿速云 阅读:260 作者:Leah 栏目:移动开发

这篇文章给大家介绍Android中怎么利用shared_user_id获取系统权限,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一、使用同一个shareuserid,多个apk运行到同一个进程,实现多个apk之间的数据访问

    实现效果:把A.apk assets目录下的session.log拷贝到/data/data/A包名/目录下面

A.apk

Android中怎么利用shared_user_id获取系统权限

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(如何访问assets资源文件请看另一篇http://mobile.51cto.com/aprogram-387591.htm)

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  
实现效果:

Android中怎么利用shared_user_id获取系统权限

二、通过shareduserid来获取系统权限
(1)在AndroidManifest.xml中添加android:sharedUserId="android.uid.system"
(2)在Android.mk文件里面添加LOCAL_CERTIFICATE := platform(使用系统签名)
(3)在源码下面进行mm编译
这样生成的apk能够获取system权限,可以在任意system权限目录下面进行目录或者文件的创建,其他apk资源的访问等(注意创建的文件(夹)只有创建者(比如system,root除外)拥有可读可写权限-rw-------)。

三、扩展

系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加 android:sharedUserId="android.uid.system",然后在Android.mk中增加 LOCAL_CERTIFICATE := platform。可以参见Settings等

系统中所有使用android.uid.shared作为共享UID的APK,都会在manifest节点中增加 android:sharedUserId="android.uid.shared",然后在Android.mk中增加 LOCAL_CERTIFICATE := shared。可以参见Launcher等

系统中所有使用android.media作为共享UID的APK,都会在manifest节点中增加 android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE  := media。可以参见Gallery等。

关于Android中怎么利用shared_user_id获取系统权限就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI