我们依照上篇博客写的步骤,编译出在Linux中可执行的main文件。然后把它放到手机SDcard 中执行,发现无法执行。
补充:
放到Sdcard中步骤
adb shell
adb sdcard
./main0801
在Linux中可以执行,但在Android无法执行,我们无法跨平台执行。这个时候就用到NDK了。
在Linux系统中下载NDK
wget NDK地址
mv 文件改名字
unzip解压
把NDK解压到目录中。开始编译了
pwd拿到当前文件的路径,
打开vim /etc/profile
配置环境变量
export NDKROOT=/root/study/android-ndk-r25
export PATH=
N
D
K
R
O
O
T
:
NDKROOT:
NDKROOT:PATH
source /etc/profile 保存修改
输入echo $NDKROOT查看是否修改成功
如果输出NDK路径则表示修改成功,如我的路径是:/root/study/android-ndk-r25
编译命令
$NDKROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang++ main.cpp -o hello
查看手机信息,从手机中导出/system/bin/cat 然后导入Linux系统,在Linux系统中执行file cat命令
cmake_minimum_required(VERSION 3.18.1)
project("myapplication")
message("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")#打印日志
message("当前CMAKE的路径是:${CMAKE_SOURCE_DIR}")#打印日志
add_library(
myapplication#最终生成的名字,lib+native-lib.so
SHARED#动态库
native-lib.cpp)
find_library(
log-lib# 变量
log)#会自动寻找liblog.so库
target_link_libraries(
myapplication
${log-lib})
静态库
libxxxxxx.a,包括了很多.o(二进制)文件,在编译的时候,把完整的静态库全部copy一份执行,如果不想对外开放,就使用静态库
动态库
libxxxxx.so,运行的时候才会加载,而且只加载一次,在内存中存在副本。如果有100个地方使用,都是共用的。使用场景:对外开放
编译静态库和动态库
在Android中动态库必须放在jniLibs文件夹下
cmake中导入静态库
add_library(get STATIC IMPORTED)
set_target_properties(get PROPERITIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/静态库路径)
target_link_libraries(
myapplication
get)
CMAKE中导入动态库
add_library(get SHARED IMPORTED)
set_target_properties(get PROPERITIES IMPORTED_LOCATION
C
M
A
K
E
S
O
U
R
C
E
D
I
R
/
/
路径
/
{CMAKE_SOURCE_DIR}//路径/
CMAKESOURCEDIR//路径/{CMAKE_ANDROID_ARCH_ABI}/动态库)
target_link_libraries(
myapplication
get)
java代码中
System.loadLibrary(“get”);
find library找系统的库,add library加载自己的
1,执行 /bin/bash a.sh 或者sh a.sh
echo $?上个命令是否执行成功,0表示成功
df -h 用了多少内存
find . -name “*.txt” 查找txt文件
2,shell脚本中
#!/bin/bash
#这句话才叫注释
echo "--------------------------------------------------------------------"
age=99
echo age=$age
echo pwd=$PWD
echo "----------------------------------------------------------------------------------------------"
echo "当前脚本的名称$0"
echo "参数名称$1"
echo "-------------------------------------------------------------"
echo "是否执行成功$?"
echo "穿了什么参数 $*"
echo "传了多少个参数$#"
echo "-----------------------------------------------"
for i in `seq 1 20`
do
echo "循环遍历的数字是:$i"
done
echo "------------------------------------------------------------"
a=0
for((f=0;f<=100;f++))
do
a=`expr $f + $a`
done
echo "0-100累加的值是 $a"
echo"------------------------------------------------------"
解释型:Shell Script 解释器一.bash 解释器二.sh