Android.mk补充笔记

从6.0开始 使用Android.mk 如果来引入一个预编译动态库 有问题

在4.4上 如果load一个动态库 ,需要先将这个动态库的依赖的其他动态库load进来

在6.0以下 System.loadLibrary 不会自动为我们加载依赖的动态库
6.0以上 System.loadLibrary 会自动为我们加载依赖的动态库

jar包 =》 a.java b.java c.java

app: app.java(a.java)
假设jar包是静态库
app.apk: app.java+a.java

假设jar包是动态库
app.apk: app.java+ jar包(a.java b.java c.java)

现在的ndk对mk的支持已经接近放弃阶段了。

–sysroot=XX
使用xx作为这一次编译的头文件与库文件的查找目录,查找下面的 usr/include usr/lib目录
-isysroot XX
头文件查找目录,覆盖–sysroot ,查找 XX/usr/include
-isystem XX
指定头文件查找路径(直接查找根目录)
-IXX
头文件查找目录
优先级:
-I -> -isystem -> sysroot

-LXX
指定库文件查找目录
-lxx.so
指定需要链接的库名

查找 目录1/usr/lib 的库文件
目录2 /usr/include 的头文件
还去查找 目录3 下的头文件
还去查找 目录4 下的头文件
gcc --sysroot=目录1 -isysroot 目录2 -isystem 目录3 -I目录4 main.c

gcc -L目录1 -l库名

javac -classpath xxx

例子: 链接ndk的日志库
gcc -LC:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib
-llog -lGLESv2

gcc --sysroot=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm
-llog -lGLESv2

$CC --sysroot=ND/platforms/android-21/arch-arm -isystem NDK\sysroot\usr\include
-isystem NDK\sysroot\usr\include\arm-linux-androideabi

export AAA="–sysroot=/root/android-ndk-r17b/platforms/android-21/arch-arm -isystem /root/android-ndk-r17b/sysroot/usr/include -isystem /root/android-ndk-r17b/sysroot/usr/include/arm-linux-androideabi

链接静态库
a.a => test
source.c(test1) => source.a
source.a里面就拥有test+test1
编译时就将所有符号加入到 输出的库

链接动态库
a.so => test
source.c(test1) => source.a
source.a里面就拥有test1
运行时候动态加载 a.so

第三方库 的 android 使用 2种方式
1、 直接编译出so (相当于打一个jar包)
编译一次就行了

2、 把所有源文件放到as里面
方便调试与修改

ffmpeg?
以2来使用: 1、编译周期N久
2、cmakelist.txt、android.mk 写一大堆,而且还不知道怎么写
(完全读懂它的configuration以及生成的makefile)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值