android 能不能安装 linux 软件

android 能不能安装 linux 软件,第1张

理论上行,不过安卓只提供了linux内核,想安装复杂一点的软件那你相当于要在只拥有一个内核的条件下自己做出来一个linux发行版,难度相当大。安卓上已经有几个简单的linux软件,比如tar。你可以在安卓终端上利用tar来打包压缩解压缩文件,我试过随便下载个linux的tar.gz结尾的安装包,可以解压安装包,但是不能安装,因为安装依赖的make命令机子上没有,就算有,安装程序也得支持你的内核。所以除非是高手,不然很难实现~

因为有些类型是不一样的,如果是经过另外的编译方式的话在arm运行的,嵌入式使用的就是你的代码是在Linux上别写的,但是由于编译方式的不同,可以将C程序运行在不同的平台上,这没什么好奇怪的。C语言程序可以运行在任何的平台上,只是编译方式的不同而已。

工具/原料

Android程序里加载linux内核模块

方法/步骤

java层。 java.lang.Runtime's exec() methods:native层就是jni了。

可以用popen() 。

但指令知否支持就得看bionic了。

也可以尝试system() and pipe。

普通apk不可能有root权限,除非机器被root了,使用Runtime.exec之类的执行su -c insmod xx.kosu为root的象征,配合superuser使用 。

在终端下使用su进入root用户,然后insmod xx.ko这个肯定可以成功的,因为insmod在root用户下执行的。但是Java的Runtime.exec()也好,Native层execl()也好,只能用su -c命令临时在root用户下执行一条指令。adb shell进入终端,普通用户下执行su -c insmod xx.ko,会发现命令执行失败,失败原因就是需要注意的地方,su的-c参数只把下一个变量作为可执行的指令,因此其执行的命令是insmod而参数并没有传递过去,xx.ko作为了su的参数,因此如果想执行成功我们需要使用su -c "insmod xx.ko",将传递给insmod的参数和命令组合成一个参数。这样的话在Java层和Native层执行失败的问题也可以解决了,在Runtime.exec()中将命令格式进行格式化,比如Runtime.exec(“su -c ” + "\"insmod xx.ko\"" ),或者在Native中执行execl("/sytem/bin/su","/sytem/bin/su","-c","insmod xx.ko", NULL),这样最终传递给shell的命令就是su -c "insmod xx.ko"了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11914406.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存