android許可權程式碼分析(五)

來源:互聯網
上載者:User

接著我們來看下JNI的編譯過程和調用流程,給出如:(具體見分享的JNI書籍,這個是windows上的一個圖,裡面的helloworld.dll在linux體系會變成helloworld.so)


<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1rTQ0Ln9s8yjujwvcD4KPHA+sb612LT6wuux4NLryfqzyWhlbGxvd29ybGQuc2+2r8ysv+KjrNTaamF2YcDg1Pa80zwvcD4KPHA+c3RhdGljIHs8L3A+CjxwPlN5c3RlbS5sb2FkTGlicmFyeSg="HelloWorld");

} ,這樣在此類使用時,首先會將此動態庫載入到此進程的系統空間裡面,具體應用 查看linux 裡面 的 dlopen dlsym 函數。

之後,我們調用java類裡面的用native 聲明的函數,系統會自動去從動態庫去尋找,沒有找到,則會異常。

5.2.3 apk配置以及JNI編寫:

因為要設定時間,如果使用apk方式實現,那麼我們看到/dev/alarm 裝置是需要system許可權的,因此我們需要配置 android:sharedUserId="android.uid.system"

和使用system簽名產生apk,才能獲得system uid

關鍵步驟:(詳細的去本講內容裡面尋找)

AndroidManifest.xml 裡面:



Android.mk 配置為:



配置簽名為系統platform,如此便具有系統uid,隨後驗證。

JNI java端代碼:




cmd在src目錄使用javah -classpath . -jni com.example.systemtime.JNI 產生com_example_systemtime_JNI.h

複製com_example_systemtime_JNI.h到jni目錄,配置jni目錄下的android.mk

系統apk裡面的so提取出來了,放置在system/lib下面,因此我們測試需要eng版本,如果我們使用eclipse開發,預設是會將so儲存在apk裡面的。

完成後使用eng版本,

adb install -r (+apk檔案路徑)

adb remount

adb push (+ libtimetest.so 路徑 ) system/lib

啟動apk點擊ok,可以看到時間已被修改,ps查看進程看到

system 3024 144 310688 28208 ffffffff 400f624c S com.example.systemtime

Userid 變為syste m 了


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.