1. Purpose
APK A 調用Process P, 並由P啟動 Service S, 並把參數以SystemProperty 的方式傳給 S.
2. Modification
(a) 在 APK A 的 AndroidMenifest.xml 加入 system 的uid.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fakeclient"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="android.uid.system">
這樣啟動 P 後, P同樣具有 system (UID 1000)權限.
(b) 將 啟動Service S 權限設為 system
vi ./device/asus/flo/init.flo.rc
service S /system/bin/S
user system
group system,root,shell
oneshot
這樣 P 才能啟動 S
(c) 在P 的代碼做property_set 動作. property 以 runtime. 開頭, system uid 才可寫入
#include <cutils/properties.h>
int startService(const char* p1, const char* p2){
char value[PROPERTY_VALUE_MAX];
property_set("runtime.param1", p1 );
property_set("runtime.param2", p2 );
return property_set("ctl.start", "S");
}
(d) 在 S 的代碼 get property
#include <cutils/properties.h>
int main(){
char p1[PROPERTY_VALUE_MAX];
property_get("runtime.param1", p1, "");
property_get("runtime.param2", p2, "");
}