导航:首页 > 源码编译 > androidlinux命令行编译

androidlinux命令行编译

发布时间:2025-01-09 15:07:15

android如何使用linux系统的一些库

1、放到安卓系统中,每个应用都可以访问
编译好的libmono2.so放到系统的/system/lib目录下。打开Eclipse上ADT插件里面的File Explorer工具,点击/system/lib目录,选择右上角有个push a file onto devices,打开对话框后,再选择libmono2.so文件,确定后即可将lib文件放到手机中了。(如果不行也可以使用ADB自带adb push命令)。再设置其权限为744,命令如下:

#用命令行方式访问手机设备
adb shell
#进入/system/lib目录
cd /system/lib
#设置libmono2.so权限为744
chmod 744 libmono2.so
此时利用Jni机制编写装载Jni库方法的类,类里面需要严格按照Jni机制进行编写Jni接口

2、放到应用软件中,只有自己的应用可以访问

①在软件工程下新建libs/armeabi文件夹,并将libmono2.so库拷贝进去。
②接下来做的就是重写Jni接口,和方法1的最后过程是一样的。

Ⅱ 请教linux 迁移到 android 方法

比如以移植一个helloworld程序作为例子。

#include<stdio.h>
voidmain()
{
printf("HelloWorld! ");
}

输入命令进行静态编译:arm-none-linux-gnueabi-gcc hello.c -static -o hello.out

然后利用adb push 将helllo.out放进android设备的/system/bin目录中,

用chmod 755 /system/bin/hello.out 更改其为执行权限。

输入: hello.out 即可看到屏幕上输出HelloWorld!

Ⅲ android中如何编译出64位so文件

如果是在Linux下编译Android源码,有可能是两个原因:
1. lunch命令有32位和64位的区别,注意选能够编译64位so的命令

2. mk文件中有LOCAL_MODULE_PATH的值比如为$(TARGET_OUT_SHARED_LIBRARIES)/hw的改为LOCAL_MODULE_RELATIVE_PATH := hw,后一种可以分别在lib和lib64下分别生成32位和64位的so文件,这个看看编译后的信息就知道了.

Ⅳ linux下编译ffmpeg 以及交叉编译并引入Android

在Linux环境下,编译ffmpeg并进行Android交叉编译的步骤如下:

首先,为支持mp3编码,你需要安装lame库,可通过`ffmpeg -i audio.wav -acodec libmp3lame audio.mp3`进行测试。然后,编译ffmpeg,常用的配置命令是`./configure --prefix=/usr/local/ffmpeg --enable-debug=3`,但可能会遇到错误,如gcc编译器问题或nasm/yasm未找到。遇到这些问题,建议更新ffmpeg版本并检查config.log日志。

编译时,可能遇到权限问题,如`mkdir: cannot create directory '...': Permission denied`,这时需要确保有足够的权限。环境变量的配置也很重要,可以在.profile文件中添加`path`和`pkg_config_path`,配置后通过`source .profile`使更改生效。

在编译过程中,如果ffplay没有出现在bin目录中,可能需要安装sdl2并重新configure、make和install。如果遇到so文件链接问题,可以编辑`/etc/ld.so.conf`并运行`ldconfig`来解决。

为了在Android设备上使用ffmpeg,你需要下载Android NDK,然后执行`make-standalone-toolchain.sh`生成交叉编译工具链。创建一个脚本(build_ffmpeg.sh),包含针对不同架构的编译命令,注意调整工具链路径、架构和输出目录。

在编译ffmpeg时,可能需要额外添加x264支持以处理h264编码。下载x264源码后,同样使用configure进行配置,但可能需要解决缺少nasm的问题。

总的来说,编译ffmpeg涉及多个步骤,包括安装依赖库、配置环境、处理编译错误和生成针对Android的交叉编译版本。务必查阅文档以确保正确设置和执行每个步骤。

Ⅳ 如何加快linux android 的编译速度

项目越来越大,每次需要重新编译整个项目都是一件很浪费时间的事情。Research了一下,找到以下可以帮助提高速度的方法,总结一下。
1. 使用tmpfs来代替部分IO读写
2.ccache,可以将ccache的缓存文件设置在tmpfs上,但是这样的话,每次开机后,ccache的缓存文件会丢失
3.distcc,多机器编译
4.将屏幕输出打印到内存文件或者/dev/null中,避免终端设备(慢速设备)拖慢速度。

tmpfs
有人说在Windows下用了RAMDisk把一个项目编译时间从4.5小时减少到了5分钟,也许这个数字是有点夸张了,不过粗想想,把文件放到内存上做编译应该是比在磁盘上快多了吧,尤其如果编译器需要生成很多临时文件的话。
这个做法的实现成本最低,在Linux中,直接mount一个tmpfs就可以了。而且对所编译的工程没有任何要求,也不用改动编译环境。
mount -t tmpfs tmpfs ~/build -o size=1G
用2.6.32.2的Linux Kernel来测试一下编译速度:
用物理磁盘:40分16秒
用tmpfs:39分56秒
呃……没什么变化。看来编译慢很大程度上瓶颈并不在IO上面。但对于一个实际项目来说,编译过程中可能还会有打包等IO密集的操作,所以只要可能,用tmpfs是有益无害的。当然对于大项目来说,你需要有足够的内存才能负担得起这个tmpfs的开销。
make -j
既然IO不是瓶颈,那CPU就应该是一个影响编译速度的重要因素了。
用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。
还是用Kernel来测试:
用make: 40分16秒
用make -j4:23分16秒
用make -j8:22分59秒
由此看来,在多核CPU上,适当的进行并行编译还是可以明显提高编译速度的。但并行的任务不宜太多,一般是以CPU的核心数目的两倍为宜。
不过这个方案不是完全没有cost的,如果项目的Makefile不规范,没有正确的设置好依赖关系,并行编译的结果就是编译不能正常进行。如果依赖关系设置过于保守,则可能本身编译的可并行度就下降了,也不能取得最佳的效果。
ccache
ccache工作原理:
ccache也是一个编译器驱动器。第一趟编译时ccache缓存了GCC的“-E”输出、编译选项以及.o文件到$HOME/.ccache。第二次编译时尽量利用缓存,必要时更新缓存。所以即使"make clean; make"也能从中获得好处。ccache是经过仔细编写的,确保了与直接使用GCC获得完全相同的输出。

ccache用于把编译的中间结果进行缓存,以便在再次编译的时候可以节省时间。这对于玩Kernel来说实在是再好不过了,因为经常需要修改一些Kernel的代码,然后再重新编译,而这两次编译大部分东西可能都没有发生变化。对于平时开发项目来说,也是一样。为什么不是直接用make所支持的增量编译呢?还是因为现实中,因为Makefile的不规范,很可能这种“聪明”的方案根本不能正常工作,只有每次make clean再make才行。
安装完ccache后,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,链到/usr/bin/ccache上。总之确认系统在调用gcc等命令时会调用到ccache就可以了(通常情况下/usr/local /bin会在PATH中排在/usr/bin前面)。
安装的另外一种方法:
vi ~/.bash_profile
把/usr/lib/ccache/bin路径加到PATH下
PATH=/usr/lib/ccache/bin:$PATH:$HOME/bin
这样每次启动g++的时候都会启动/usr/lib/ccache/bin/g++,而不会启动/usr/bin/g++
效果跟使用命令行ccache g++效果一样
这样每次用户登录时,使用g++编译器时会自动启动ccache
继续测试:
用ccache的第一次编译(make -j4):23分38秒
用ccache的第二次编译(make -j4):8分48秒
用ccache的第三次编译(修改若干配置,make -j4):23分48秒

看来修改配置(我改了CPU类型...)对ccache的影响是很大的,因为基本头文件发生变化后,就导致所有缓存数据都无效了,必须重头来做。但如果只是修改一些.c文件的代码,ccache的效果还是相当明显的。而且使用ccache对项目没有特别的依赖,布署成本很低,这在日常工作中很实用。
可以用ccache -s来查看cache的使用和命中情况:
cache directory /home/lifanxi/.ccachecache hit 7165cache miss 14283called for link 71not a C/C++ file 120no input file 3045files in cache 28566cache size 81.7 Mbytesmax cache size 976.6 Mbytes
可以看到,显然只有第二编次译时cache命中了,cache miss是第一次和第三次编译带来的。两次cache占用了81.7M的磁盘,还是完全可以接受的。
distcc
一台机器的能力有限,可以联合多台电脑一起来编译。这在公司的日常开发中也是可行的,因为可能每个开发人员都有自己的开发编译环境,它们的编译器版本一般是一致的,公司的网络也通常具有较好的性能。这时就是distcc大显身手的时候了。
使用distcc,并不像想象中那样要求每台电脑都具有完全一致的环境,它只要求源代码可以用make -j并行编译,并且参与分布式编译的电脑系统中具有相同的编译器。因为它的原理只是把预处理好的源文件分发到多台计算机上,预处理、编译后的目标文件的链接和其它除编译以外的工作仍然是在发起编译的主控电脑上完成,所以只要求发起编译的那台机器具备一套完整的编译环境就可以了。
distcc安装后,可以启动一下它的服务:
/usr/bin/distccd --daemon --allow 10.64.0.0/16
默认的3632端口允许来自同一个网络的distcc连接。
然后设置一下DISTCC_HOSTS环境变量,设置可以参与编译的机器列表。通常localhost也参与编译,但如果可以参与编译的机器很多,则可以把localhost从这个列表中去掉,这样本机就完全只是进行预处理、分发和链接了,编译都在别的机器上完成。因为机器很多时,localhost的处理负担很重,所以它就不再“兼职”编译了。
export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"
然后与ccache类似把g++,gcc等常用的命令链接到/usr/bin/distcc上就可以了。
在make的时候,也必须用-j参数,一般是参数可以用所有参用编译的计算机CPU内核总数的两倍做为并行的任务数。
同样测试一下:
一台双核计算机,make -j4:23分16秒
两台双核计算机,make -j4:16分40秒
两台双核计算机,make -j8:15分49秒
跟最开始用一台双核时的23分钟相比,还是快了不少的。如果有更多的计算机加入,也可以得到更好的效果。
在编译过程中可以用distccmon-text来查看编译任务的分配情况。distcc也可以与ccache同时使用,通过设置一个环境变量就可以做到,非常方便。
总结一下:
tmpfs: 解决IO瓶颈,充分利用本机内存资源
make -j: 充分利用本机计算资源
distcc: 利用多台计算机资源
ccache: 减少重复编译相同代码的时间
这些工具的好处都在于布署的成本相对较低,综合利用这些工具,就可以轻轻松松的节省相当可观的时间。上面介绍的都是这些工具最基本的用法,更多的用法可以参考它们各自的man page。
5.还有提速方法是把屏幕输出重定向到内存文件或/dev/null,因对终端设备(慢速设备)的阻塞写操作也会拖慢速度。推荐内存文件,这样发生错误时,能够查看。

Ⅵ 如何在APK程序里执行linux命令

Android的底层是Linux内核,因此在shell环境下可以运行Linux命令,尤其是经过root处理的android系统,基本上可以通过调用Linux命令完全控制手机,下面的RootCmd.java代码可以实现运行Linux外部命令。

packagemy.android.code;
importandroid.os.Environment;
importdalvik.annotation.Signature;
importjava.io.BufferedReader;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileReader;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Vector;
publicfinalclassRootCmd
{
//执行linux命令并且输出结果
(StringparamString)
{
VectorlocalVector=newVector();
try
{
ProcesslocalProcess=Runtime.getRuntime().exec("su");//经过Root处理的android系统即有su命令
OutputStreamlocalOutputStream=localProcess.getOutputStream();
=newDataOutputStream(localOutputStream);
InputStreamlocalInputStream=localProcess.getInputStream();
=newDataInputStream(localInputStream);
Stringstr1=String.valueOf(paramString);
Stringstr2=str1+" ";
localDataOutputStream.writeBytes(str2);
localDataOutputStream.flush();
Stringstr3=localDataInputStream.readLine();
localVector.add(str3);
localDataOutputStream.writeBytes("exit ");
localDataOutputStream.flush();
localProcess.waitFor();
returnlocalVector;
}
catch(ExceptionlocalException)
{
localException.printStackTrace();
}
}
//执行linux命令但不关注结果输出
(StringparamString)
{
try
{
ProcesslocalProcess=Runtime.getRuntime().exec("su");
ObjectlocalObject=localProcess.getOutputStream();
=newDataOutputStream((OutputStream)localObject);
Stringstr=String.valueOf(paramString);
localObject=str+" ";
localDataOutputStream.writeBytes((String)localObject);
localDataOutputStream.flush();
localDataOutputStream.writeBytes("exit ");
localDataOutputStream.flush();
localProcess.waitFor();
localObject=localProcess.exitValue();
returnlocalObject;
}
catch(ExceptionlocalException)
{
localException.printStackTrace();
}
}
//判断机器Android是否已经root,即是否获取root权限
()
{
inti=execRootCmdSilent("echotest");//通过执行测试命令来检测
if(i!=-1)returntrue;
retrunfalse;
}
}

Ⅶ 如何在Linux平台下编译android工程

我是在windows下做开发的,但是编译环境还是在linux上。。大体的步骤如下:
1.首先在windows环境下编写工程(eclipse下编写android工程)
2.打开linux开发环境(tcl平台:\\10.120.90.207\longc\workspace\code\project\kernel\android\JB)
3.将运行环境的脚本文件运行./evnsetup:配置android运行环境
/JB/build/
找到envsetup.sh
运行.envsetup.sh(source envsetup.h或./envsetup)
所有操作都在终端完成
4.将工程文件拷贝到指定目录下(TCL平台下的自带程序在package\TCL_Apps目录下)
5.删除一些文件
保留/res,/src,AndroidManifest.xml三个文件
创建Android.mk(makefile文件,linux下用makefile文件来集成一些命令,运行程序的指令和设置都在此处)Android.mk的编写
6.编译
进入工程文件目录
输入mm命令进行编译。
7.生成apk文件,编译完成

Ⅷ Linux下如何编译Android源码~~~

这个问题已经找到解决方案了,方法如下:

1.在Linux设置文件共享,将项目共享,最好有个密码什么的。

2.在Linux上配置sshserver,用于和编译安卓源码3.Linuxmac通过连接,原因是有线传输比无线的快很多,ping只是0.3左右ms,不影响使用。然后就可以mac编写代码,然后ssh编译什么的,很方便,

阅读全文

与androidlinux命令行编译相关的资料

热点内容
本地地图服务器地址 浏览:891
学Python还是php 浏览:786
sql命令备份数据库 浏览:633
怎么把ppt文件上传到服务器 浏览:570
suselinux命令 浏览:927
加密文件下载了知道密码如何解压 浏览:389
PHP开源项目怎么学 浏览:724
lua调用php 浏览:946
一套编程多少钱 浏览:338
平移算法图 浏览:66
当人工智能学会编程 浏览:224
冰箱压缩机工作的声音 浏览:263
即开型彩票的数据设计算法 浏览:819
a星算法的提出时间 浏览:629
学java工程师 浏览:89
玉凤的服务器怎么样 浏览:717
很多人想转行当程序员 浏览:272
Linux为什么bootloader编译 浏览:701
gcc只运行不编译 浏览:870
网页无法解析服务器是什么意思 浏览:928