2010年9月18日 星期六

[Android] 不同的apk有相同的uid

在Android上執行不同的apk會跑在不同的sandbox上, 並且以不同的身份(uid)在執行, 但問題是我今天想要用system身份做某些事或是想要在不同的app分享資源時, 就會需要能對apk指定uid, 方法有兩種分別說明如下:

方法一
1.修改AndroidManifest.xml, 新增android:sharedUserId="android.uid.system"屬性(使用system身份)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
2.修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
3.重新編譯apk

方法二
1.如方法一修改AndroidManifest.xml, 新增android:sharedUserId="android.uid.system"屬性(使用system身份)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
2.使用Eclipse編譯出apk
3.刪除該apk中META-INF目錄下的CERT.SF和CERT.RSA兩個檔案
4.以系統的public/private key重新簽署打包apk, signapk的用法為
Usage: signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar
5.實際執行命令如
$java -jar /path/to/android/out/host/linux-x86/framework/signapk.jar /path/to/android/build/target/product/security/platform.x509.pem /path/to/android/build/target/product/security/platform.pk8 /path/to/input.apk /path/to/output.apk


如果想要不同的apk以相同的uid身份在執行, 則在這些不同的APK中AndroidManifest.xml的語法為
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="{MY.URI.FORMAT}">

reference:
Android中如何修改系統時間(應用程序獲得系統權限)
Jollen的Android系統管理雜記,#1:關於 android.uid.system與AID_SYSTEM

沒有留言: