在Android上執行不同的apk會跑在不同的sandbox上, 並且以不同的身份(uid)在執行, 但問題是我今天想要用system身份做某些事或是想要在不同的app分享資源時, 就會需要能對apk指定uid, 方法有兩種分別說明如下:
方法一
1.修改AndroidManifest.xml, 新增android:sharedUserId="android.uid.system"屬性(使用system身份)
2.修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
3.重新編譯apk
PS. LOCAL_CERTIFICATE := platform, 由於試驗的這份source code 是由客戶提供,所以"platform"這個關鍵字已經被定義好了.
方法二
1.如方法一修改AndroidManifest.xml, 新增 android:sharedUserId="android.uid.system" 屬性(使用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 signapk.jar -w ./platform.x509.pem ./platform.pk8 ./input.apk ./output.apk(此為將所有檔案放於同一路徑下)
PS. signapk.jar , platform.x509.pem, platform.pk8可於source code中取得
如果想要不同的apk以相同的uid身份在執行, 則在這些不同的APK中AndroidManifest.xml的語法為
manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="{MY.URI.FORMAT}"
2010年10月27日 星期三
在Ubuntu上安裝及設定NDK
1. 下載NDK for Ubuntu,位置可任意決定.
2. 編輯 bashrc
1) 於終端機下command "sudo gedit ~/.bashrc", 添加下面文字.
2) NDK_ROOT=android_ndk_path, 後面的目徑是NDK的目錄,前面的名稱可任取.
ex: NDK_ROOT=/home/favoritepili/Android/android-ndk-r4b/
3) export NDK_ROOT
4)儲存,離開.
PS. 由於是下載r4版,所以從此版開始不需要修改host-setup.sh
3. 測試
1) 進入目標compile目錄. ex: "/home/favoritepili/Android/android-ndk-r4b/samples/hello-jni"
2) type "$NDK_ROOT/ndk-build
3) 如果成功會產生obj及libs兩個目錄
4. error
1) 如果有錯誤訊息"Your APP_BUILD_SCRIPT points to an unknown file".
確認你的路徑有沒有設錯, APP_BUILD_SCRIPT設定在project的.mk檔中.
2)可以type command "$NDK_ROOT/ndk-build NDK_LOG=1", 來查看有何問題.
2. 編輯 bashrc
1) 於終端機下command "sudo gedit ~/.bashrc", 添加下面文字.
2) NDK_ROOT=android_ndk_path, 後面的目徑是NDK的目錄,前面的名稱可任取.
ex: NDK_ROOT=/home/favoritepili/Android/android-ndk-r4b/
3) export NDK_ROOT
4)儲存,離開.
PS. 由於是下載r4版,所以從此版開始不需要修改host-setup.sh
3. 測試
1) 進入目標compile目錄. ex: "/home/favoritepili/Android/android-ndk-r4b/samples/hello-jni"
2) type "$NDK_ROOT/ndk-build
3) 如果成功會產生obj及libs兩個目錄
4. error
1) 如果有錯誤訊息"Your APP_BUILD_SCRIPT points to an unknown file".
確認你的路徑有沒有設錯, APP_BUILD_SCRIPT設定在project的.mk檔中.
2)可以type command "$NDK_ROOT/ndk-build NDK_LOG=1", 來查看有何問題.
建立Windows cmd.exe 的shortcut
建立Windows cmd.exe shortcut
1. 在檔案總管任意路徑下按右鍵選"新增","捷徑".
2. 在輸入項目的位置中打"%COMSPEC%",然後按下一步.
3. 捷徑的名稱可任意取,然後按完成.
4. 點選此捷徑按右鍵.
5. 於"捷徑"此分頁中的"開始位置"輸入你想要執行cmd.exe時的預設位置. ex:"F:\Tools\AndroidNeedTools\android-sdk-windows\tools"
6. 完成.
1. 在檔案總管任意路徑下按右鍵選"新增","捷徑".
2. 在輸入項目的位置中打"%COMSPEC%",然後按下一步.
3. 捷徑的名稱可任意取,然後按完成.
4. 點選此捷徑按右鍵.
5. 於"捷徑"此分頁中的"開始位置"輸入你想要執行cmd.exe時的預設位置. ex:"F:\Tools\AndroidNeedTools\android-sdk-windows\tools"
6. 完成.
訂閱:
文章 (Atom)