透過android.os.SystemProperties設定或取得的Property都是Android系統中的環境變數。
因為android.os.SystemProperties是被隱藏的(@hide),所以在SDK是沒有的
若要使用android.os.SystemProperties,必須將
layoutlib.jar文件import到專案中
layoutlib.jar位於SDK資料夾中,詳細位置為:\sdk\platforms\android-XX\data
Property get :
String android.os.SystemProperties.get(String key)
Property set :
void android.os.SystemProperties.set(String key, String val)
在使用SystemProperties.set的時候,應用程式必須要有對應的權限才可使用。
方法1:(此方法必須在Android系統原始碼環境中編譯)
1.在
AndroidManifest.xml中加入android:sharedUserId="android.uid.phone",
或是android:sharedUserId="android.uid.system" 等,是使用的UserId決定,
如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
android:sharedUserId="android.uid.phone" >
<uses-sdk .../>
<application ...
<activity .../>
/>
</manifest>
2.在Android.mk文件加入 LOCAL_CERTIFICATE := platform
Android.mk 內容:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_CERTIFICATE := platform
LOCAL_PACKAGE_NAME := TelephonyTest
include $(BUILD_PACKAGE)
3.使用mm指令編譯
方法2:(使用裝置Platform金鑰對apk重新簽名)
1.在
AndroidManifest.xml中加入android:sharedUserId:"..." (與方法一步驟一相同)
2.先用eclipse編譯出apk (此時的apk無法安裝到裝置)
3.在系統原始碼的"build\target\product\security"目錄中取得platform.pk8與platform.x509.pem
在使用signapk來重新簽名,signapk所在目錄為"build\tools\signapk",
使用方法:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk test_signed.apk
(signapk.jar在 系統原始碼目錄中的/out/host/linux-x86/framework/signapk.jar)
產生出的apk就可安裝在裝置了。
註釋:
每一個程序在建立時會建立一個uid,避免資源被其他程序使用,
Android根據不同的uid來分配不同權限。
程序能夠與系統中已存在的程序使用同一個uid(權限),
只要在AndroidManifest.xml設定sharedUserId。
例如:
android:sharedUserId="android.uid.system"是取得SYSTEM權限
android:sharedUserId="android.uid.phone"是取得RADIO權限
(需注意的是,共享uid必須是同一個signatures)