本文主要为了记录通过在虚拟机Ubuntu系统编译生成的可执行文件canitf如何运行在迅为的iMX6开发板上,中间涉及到的一些操作相对来说比较固定,因此可以整理成参考步骤以便之后使用时来依照执行。
一、生成可执行文件
首先在Ubuntu系统对应目录终端运行如下命令进行NDK编译生成可执行文件
/home/yinlong/Music/sdkapp/android-ndk-r14b-linux-x86_64/android-ndk-r14b/ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk
接着可以找到当前所在目录生成的可执行文件
二、将文件转移至开发板内
1.手动转移文件
通过USB线连接开发板与电脑,并且将开发板的USB用途(打开开发板主屏幕下拉即可看到)的选项设置为文件传输
此时,在电脑上可以找到开发板的存储空间
打开内部存储设备,接看到如下图所示的存储结构,需要注意的是,这是位于开发板的SD卡的位置,此时就可以把在Ubuntu生成的libs文件放到其中,在这里我选择放入Download目录下
(需要注意的是,直接从Ubuntu系统拖拽文件的话是无法放入到此文件夹下的,还需先从虚拟机拖拽到自己电脑上,再从电脑拖拽到开发板的存储结构当中)
2.开发板内找到libs文件验证
执行完上面的步骤文件就已经存储在开发板中了,想要验证的话可以打开开发板找到设置,点击设置中的存储设备与USB。
再点击最下方的浏览,进入内部存储空间
还记得我们刚刚是将文件存储在Download目录下,所以打开内部存储空间的Download即可看到之前放进去的libs文件夹
这也可以验证我们之前的操作是无误的。
三、使用adb shell运行可执行文件
虽然此时生成的可执行文件已经在开发板内,但由于是放在SD卡中,由于开发板的一些设置,我们无法运行位于此处的可执行文件,所以我们需要将其转移到开发板内别的存储目录中,再去运行,这需要使用adb shell工具。具体如下步骤:
1.设置adb shell
在电脑中打开命令提示符,执行下面命令,以root身份进入到adb shell中。
(注意:开发板需要是获取root权限的情况下才能成功执行此步骤,怎样获取root权限可以参考【北京迅为】iTOP-i.MX6开发板使用手册_v1.9的第27章27.5节:Android6.0.1-获得root权限)
(注意:执行adb devices这条命令的时候很有可能会出现device unauthorized的提示,这一问题我已解决,请参考博文:成功解决Android设备adb连接后显示device unauthorized)
(注意:执行adb root命令时开发板设备上可能会弹出窗口,大致意思是...是否允许USB调试,都点击确定即可)
adb devices
adb root
adb shell
执行完上述命令,可以看到如下图显示的样子,root@...#代表是以root身份操纵开发板,便于之后修改文件权限等各项操作
2.复制文件到其他目录
由于我们的libs文件仍放在SD卡内,我们可以通过命令行去看一下,执行下面的命令进入到SD卡的download目录中
cd /sdcard/download
再执行ls命令,的确可以看到此目录下有我们刚才放进去的libs文件夹
由于在此目录下没有办法运行可执行文件, 接着执行下面命令,将其转移到其他目录中,这里我是放在了/data/local/tmp目录下,当然也可以选择其他的目录,但不可选/sdcard中的目录去存放
cp -r libs /data/local/tmp
接着我们跳转到再执行ls命令,会明确看到libs文件夹已复制过来
cd /data/local/tmp
ls
3.修改文件权限
由于我真正要运行的可执行文件是放置于libs目录下的可执行文件canitf,因此跳转到其所在的目录
cd /data/local/tmp/libs/armeabi-v7a
但是接下来如果直接去执行它,会提示我们Permission denied,也就是没有权限去运行该文件,这是由于文件的权限此时还是设置的不可读写的状态
这就需要我们修改文件权限,由于此时是超级用户root的状态,可以直接运行如下命令来设置文件状态以便我们运行
chmod 777 canitf
4.运行可执行文件
修改完文件权限,执行命令就可以成功执行文件了
./canitf