日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android shell hello world,Android Framework 之HelloWorld(三)

發布時間:2025/3/15 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android shell hello world,Android Framework 之HelloWorld(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本來是要寫一個linux驅動,用于控制led燈的,但考慮到nanopc-T4的內核已經幫我們配置好設備樹,已經可以利用/sys/class/gpio操作gpio了,所以沒必要再造輪子了!

在shell里,可以利用下面的命令控制Led燈的亮與滅:

#導出GPIO0_A0管腳

echo 32 > /sys/class/gpio/export

#讓GPIO0_A0管腳作為輸出使用

echo?out > /sys/class/gpio/gpio32/direction

#GPIO0_A0輸出高電平

echo 1?> /sys/class/gpio/gpio32/value

#GPIO0_A0輸出低電平

echo 0 > /sys/class/gpio/gpio32/value

接上串口或者adb shell進去shell終端,先來看下export的用戶和組:

nanopc-t4:/ $ ls -l /sys/class/gpio/

total 0

--w--w---- 1 root system 4096 2020-08-22 04:50 export

lrwxrwxrwx 1 root root 0 2020-08-22 07:48 gpio156 -> ../../devices/platform/pinctrl/gpio/gpio156

lrwxrwxrwx 1 root root 0 2020-08-22 07:48 gpiochip0 -> ../../devices/platform/pinctrl/gpio/gpiochip0

lrwxrwxrwx 1 root root 0 2020-08-22 07:48 gpiochip128 -> ../../devices/platform/pinctrl/gpio/gpiochip128

lrwxrwxrwx 1 root root 0 2020-08-22 07:48 gpiochip32 -> ../../devices/platform/pinctrl/gpio/gpiochip32

lrwxrwxrwx 1 root root 0 2020-08-22 07:48 gpiochip64 -> ../../devices/platform/pinctrl/gpio/gpiochip64

lrwxrwxrwx 1 root root 0 2020-08-22 07:48 gpiochip96 -> ../../devices/platform/pinctrl/gpio/gpiochip96

--w--w---- 1 root system 4096 2020-08-22 04:50 unexport

可以看出,export是普通文件,擁有者具有“寫”權限,組內其他成員具有“寫”權限,其他用戶則沒有任何權限,export屬于root用戶,所屬組為system。

android8.1定義了很多用戶,我們可以在shell里使用“ps -ef”,隨機截取了幾個就有root,shell,system、u0_a59等用戶了。

#隨機截取了幾個

$ps -ef

...

webview_zygote 660 1 0 04:50:44 ? 00:00:00 webview_zygote32

radio 689 363 0 04:50:44 ? 00:00:00 com.android.phone

system 1120 363 0 04:50:48 ? 00:00:00 android.rockchip.update.service

root 3694 1 0 05:08:17 ? 00:00:03 adbd --root_seclabel=u:r:su:s0

root 13893 3694 0 07:45:05 136:0 00:00:00 logcat -v long -v epoch

u0_a59 13962 363 1 07:45:22 ? 00:00:02 com.demo.helloworld

shell 14478 14087 36 07:53:04 ttyFIQ0 00:00:00 ps -ef

...

所以我們要操作/sys/class/gpio/export,至少也要將app提升至system用戶權限,apk在安裝時,會根據AndroidManifest.xml的android:sharedUserId="android.uid.system"屬性進行分配用戶權限,查了一些資料,如果要讓app具有system權限,有兩種方法,一是將app放進android源碼上使用mm DEX_PREOPT_DEFAULT=nostripping編譯,還有就是使用簽名,我們這里使用簽名的方式:

先設置AndroidManifest.xml的android:sharedUserId="android.uid.system"屬性

在編譯android源碼后,在此處得到如下文件:

./build/make/target/product/security/platform.pk8

./build/make/target/product/security/platform.x509.pem

每次編譯android源碼這兩個文件都不變,可以拷貝出來使用。

而signapk.jar則存在于這兩個地方:

./out/host/linux-x86/framework/signapk.jar和./prebuilts/sdk/tools/lib/signapk.jar,這兩個signapk.jar的區別我不清楚,不過猜測使用前者會好一點,畢竟是編譯輸出的。

把上面的三個文件拷貝出來,如果使用./out/host/linux-x86/framework/signapk.jar,則使用如下命令生成簽名后的apk安裝包:

java -Djava.library.path=rk3399-android-8.1/out/host/linux-x86/lib64 -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk system.apk

如果使用./prebuilts/sdk/tools/lib/signapk.jar,則使用如下命令生成簽名后的apk安裝包:

java -Djava.library.path=../rk3399-android-8.1/prebuilts/sdk/tools/linux/lib64/ -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk system.apk

我在ibledctrl.so里加入WriteFileValue()函數用于操作gpio:

#include

#include

static int WriteFileValue(const char *pPath, char *pValue, int len)

{

int fd = -1;

if(!pPath || !pValue)

{

return -1;

}

PRINT_DEBUG("open %s value = %s, len = %d", pPath, pValue, len);

fd = open(pPath, O_RDWR);

if (fd < 0)

{

PRINT_DEBUG("open %s error: %d,%s", pPath, fd, strerror(errno));

return fd;

}

if (len != write(fd, pValue, len))

{

PRINT_DEBUG("write error: %d,%s", fd, strerror(errno));

close(fd);

return -1;

}

close(fd);

return 0;

}

jint LedInit(JNIEnv *env, jobject cls)

{

PRINT_DEBUG("Entry LedInit ...");

char *export = "32";

char *direction = "out";

WriteFileValue("/sys/class/gpio/export", export, strlen(export)+1);

WriteFileValue("/sys/class/gpio/gpio32/direction", direction, strlen(direction)+1);

return 0;

}

可惜的是,即使app以system用戶運行也沒權限操控/sys/class/gpio/export,使用chown system:system /sys/class/gpio/export使之處于同一“owner”也不夠權限。可能是SElinux的權限管理問題,android源碼中允許對某些驅動文件節點進行更細化的權限管理,這塊我還需要好好學習。因為我使用下面的命令"whoami”或者“dumpsys activity top”獲取到當前界面所處用戶確實是system用戶了,這說明使用簽名的方式提升到system權限是沒問題的:

import android.util.Log;

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

private void Run(String cmd)

{

try {

Process process = Runtime.getRuntime().exec("sh"); //su

// 獲取輸出流

OutputStream outputStream = process.getOutputStream();

InputStream is = process.getInputStream();

InputStream es = process.getErrorStream();

DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

dataOutputStream.writeBytes(cmd);

dataOutputStream.flush();

dataOutputStream.close();

outputStream.close();

int code = process.waitFor();

Log.d("TAG", "Run:\"" + cmd +"\", "+"process.waitFor() = " + code);

String line;

BufferedReader br;

br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

while ((line = br.readLine()) != null) {

Log.d("TAG", line);

}

br = new BufferedReader(new InputStreamReader(es, "UTF-8"));

while ((line = br.readLine()) != null) {

Log.e("TAG", line);

}

} catch (Throwable t) {

Log.e("TAG", "Throwable = " + t.getMessage());

t.printStackTrace();

}

}

...

...

Run("whoami"); //獲取當前進程是屬于哪個用戶

//或者在shell中使用dumpsys

我發現如果在root用戶下預先運行chmod 777 /sys/class/gpio/export和chown system:system /sys/class/gpio/export命令后,再重啟app,就能操控led燈了,這我就不理解了。

如你所見,這個HelloWorld是失敗的,沒能達到要求,同時在android的權限管理方面沒能解釋清楚!

來源:oschina

鏈接:https://my.oschina.net/u/4345458/blog/4525802

總結

以上是生活随笔為你收集整理的android shell hello world,Android Framework 之HelloWorld(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久传媒 | 一区二区三区精品在线观看 | 理论片在线观看理伦片 | 国产视频在线观看一区二区 | 久久久久久国产精品三级玉女聊斋 | 欧美乱三级 | 日韩污视频在线观看 | 亚洲第一黄色网 | 天天爽影院 | 97超碰超碰 | 国产香蕉在线视频 | 久久久精品毛片 | 国产香蕉在线视频 | a在线观看免费 | 哈利波特3在线观看免费版英文版 | 亚洲m码 欧洲s码sss222 | 色黄视频在线观看 | 在线观看中文字幕视频 | 欧美老肥妇做.爰bbww视频 | 网站免费视频www | 一区二区成人精品 | 破处视频在线观看 | 亚洲免费视频网站 | 欧美一级一片 | 久久精品网 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 亚洲图片在线播放 | 免费h片在线观看 | 自拍偷拍日韩 | 欧美视频免费 | 免费污污视频在线观看 | 久久综合99 | 欧美女人天堂 | 男女视频在线观看 | 黄色在线观看网址 | 久久香蕉热| 青青色在线 | 亚洲男性天堂 | 久草手机在线 | 午夜插插 | 少妇人妻真实偷人精品视频 | 亚洲乱码国产乱码精品精大量 | 新91视频在线观看 | 樱桃国产成人精品视频 | 91亚洲综合 | 国产最新自拍 | 一级免费黄色 | 视频一区二区三区在线观看 | av片免费| 久久精品一区二区在线观看 | 久久久www免费人成人片 | 欧美毛茸茸 | 99精品成人 | 成人在线不卡视频 | 日韩av三区 | 欧美一级二级片 | a级小视频| 黄色片视频免费观看 | 国产浪潮av | 伦理片一区二区三区 | 97黄色网| 欧美三级网站在线观看 | 国产精品一区二区麻豆 | 色啪网站| 香蕉视频免费在线观看 | 婷婷综合激情网 | 日韩3区 | 国产传媒欧美日韩 | 精品伦精品一区二区三区视频密桃 | 中文字幕少妇 | 国产日韩欧美成人 | 羞辱狗奴的句子有哪些 | 三级网站免费看 | 亚洲成人黄色av | 国产 日韩 欧美 精品 | 日韩久久高清 | 欧美12--15处交性娇小 | 日本老熟妇乱 | 依依综合网 | 91麻豆精品视频 | 丰满少妇一区二区三区视频 | 女人看黄色网 | 久久久精品蜜桃 | 日日操日日射 | 欧美日韩人妻精品一区在线 | 国产免费又黄又爽又色毛 | 中文字幕视频免费观看 | 中文字幕高清在线 | 涩涩涩在线观看 | 一区二区三区日韩在线 | 国产精品美女久久 | 丰满少妇一区二区三区专区 | 久久伊人一区 | 91精品久久久久久粉嫩 | 影音先锋天堂网 | 午夜激情在线观看视频 | 中文字幕专区 | 欧美精品手机在线 | 成人一区av|