本文档应用rust
开发android
程序,只波及到底层开发,不波及任何ui
相干,开发前举荐装置好magisk
框架,不便前面获取手机root
权限,或者有别的计划能够使adb
获取到root
权限也行
把android
看成是一个裁剪了很多模块的linux
操作系统,前面的操作与概念就好了解很多了
linux
权限阐明
root
权限,超级权限,能够得心应手,随心所欲- 一般权限
Android
权限阐明
- 平安体系结构设计的外围是:默认状况下,任何应用程序都无权执行任何会对其余应用程序、操作系统或用户产生负面影响的操作
- 为了爱护
Android
用户的隐衷,防止上述负面影响,Android
对权限进行治理:Android利用在须要应用某些性能时必须进行权限的申请,而依据权限的爱护级别,零碎可能会主动授予权限,或者提醒用户批准申请 Android
包装了一套本人的权限体系root
platform
media
shared
- ...
root
权限是超级权限,该权限能够对系统进行任意操作,这一点与linux
雷同- 提供了拜访
system
目录的权限,即system
权限,对应Android
的权限体系为platform
试验设施信息
Xiaomi Redmi note 7 Pro
rust
我的项目创立
$ cargo new android-agent
批改Cargo.toml
的依赖信息如下
[dependencies]tokio = { version = "1", features = ["full"]}tracing = "0.1"tracing-subscriber = "0.3"
批改main.rs
#[tokio::main]async fn main() { tracing_subscriber::fmt::init(); loop { tracing::info!("Hello world!"); tokio::time::sleep(std::time::Duration::from_secs(1)).await; }}
因为自己是在Ubuntu22
环境下开发,底层C
库与android
的库可能有较大差别,所以编译须要依赖一个rust
的穿插编译我的项目cross
,工具装置与操作自行查看该我的项目文档
https://github.com/cross-rs/cross
查看rust
反对编译的android
类型
$ rustc --print target-list |grep androidaarch64-linux-androidarm-linux-androideabiarmv7-linux-androideabii686-linux-androidthumbv7neon-linux-androideabix86_64-linux-android
因为目前测试机是实在的Android
手机,Android
手机根本都是arm
架构的,所以编译target
抉择aarch64-linux-android
,如果是电脑下面的虚构手机,这些年的非苹果电脑根本都是x86_64
架构的,能够抉择x86_64-linux-android
应用的包可能比拟新,cross
工具发行release
和以后工夫可能存在较大时间差到时某些GLibc
版本可能差别较大导致编译报错,所以还须要新建一个文件Cross.toml
,配置应用最新的cross
编译镜像
[target.aarch64-linux-android]image = "ghcr.io/cross-rs/aarch64-linux-android:edge"
开始执行编译
$ cross build --target aarch64-linux-android -r
应用adb
把编译生成的文件推送到android
手机上,留神,须要推送到/sdcard
上面,/sdcard
的属主/归属组是root/root
$ adb push target/aarch64-linux-android/release/android-agent /sdcard/target/aarch64-linux-android/release/android-agent: 1 file pushed. 30.8 MB/s (2677824 bytes in 0.083s)
进入android
手机shell
环境
$ adb shell
adb
获取root
权限,该操作是装置了Magisk
之后才能够这样获取
violet:/ $ su violet:/ #
执行chmod
赋予执行权限,之后筛选查看权限发现并没有胜利赋予权限
violet:/ # chmod a+x /sdcard/android-agent violet:/ # ls -l /sdcard/ |grep android -rw-rw---- 1 root sdcard_rw 2677824 2023-04-14 16:55 android-agent
这个时候须要把文件复制到/data
上面,再赋予执行权限,如果一开始就应用adb push
执行文件到/data
上面会报错Permission denied
,/data
的属主/归属组是system/system
,该文件夹可能不能间接推送文件进入
violet:/ # mv /sdcard/android-agent /data/violet:/ # chmod a+x /data/android-agentviolet:/ # ls -l /data/ |grep android -rwxrwx--x 1 root sdcard_rw 2677824 2023-04-14 16:55 android-agent
之后验证执行
violet:/ # ./data/android-agent 2023-04-14T09:15:53.752045Z INFO android_agent: Hello world!2023-04-14T09:15:54.753759Z INFO android_agent: Hello world!2023-04-14T09:15:55.756782Z INFO android_agent: Hello world!2023-04-14T09:15:56.759287Z INFO android_agent: Hello world!2023-04-14T09:15:57.762281Z INFO android_agent: Hello world!
Android shell
扩大理解
android
还是蕴含了很多工具的,比方ping
violet:/ # ping baidu.comPING baidu.com (110.242.68.66) 56(84) bytes of data.64 bytes from 110.242.68.66: icmp_seq=1 ttl=64 time=0.430 ms
比方curl
violet:/ # curl https://baidu.com <html><head><title>302 Found</title></head><body bgcolor="white"><center><h1>302 Found</h1></center><hr><center>bfe/1.0.8.18</center></body></html>
查看内核信息
violet:/ # cat /proc/version Linux version 4.14.117-perf-g288905b (builder@c4-miui-ota-bd188.bj) (clang version 8.0.11 for Android NDK) #1 SMP PREEMPT Mon Nov 8 19:38:11 CST 2021
参考浏览
Android 权限治理