Android cMake原理

编译工具:

gcc工作流程:预编译--------->编译--------->汇编--------->链接,

文件处理成可执行文件,步骤非常复杂;

gcc  --->  makefile   (执行编译脚本)     只能在linux系统中执行,cMake则是跨平台:windows, mac,linux

发展历程:gcc---->makefile---->cMake;

c项目中,在编译的时候会生成:

arm64-v7a        运行在手机

arm64-v8a        运行在手机

x86        运行在电脑模拟器

x86_64        运行在电脑模拟器

芯片架构

芯片是v7a,是运行不了v8a编译的代码 

在build.gradle文件中配置运行平台:

    defaultConfig {
        applicationId "com.imitate.shortvideo.mycdemo"
        minSdk 21
        targetSdk 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
//这里的externalNativeBuild,是表示cmake中需要的参数
            cmake {
                cppFlags ''
            }
        }

//        运行的平台,只有armeabi-v7a;一般是v7a平台,v7a手机平台
//        更换平台配置后,需要执行清理缓存:build-> refreshLinked C++ Projects
        ndk{
            abiFilters 'armeabi-v7a'
        }
    }


    externalNativeBuild {
//这里的externalNativeBuild,是表示cmake编译存放的路径;告诉Android,这是一个c工程;
        cmake {
            path file('src/main/cpp/CMakeLists.txt')
            version '3.10.2'
        }
    }

Android studio中c项目编译时,寻找:build_command.txt文件,此中有参数,有cmake地址

cMake完成编译工作之后,生成文件:libnative-lib.so

插件化组件化,在需要的时候才进行加载,编译的时候,不需要加载(加载.so文件),插件就是编译成.so的方式进行加载,可以减小apk的安装包大小;

静态库,动态库

cMakeLists.txt文件结构

#默认是生成静态库
add_library(LS21 main.c include/test1.c)
#默认是生成动态库
add_library(LS21 SHAREFD main.c include/test1.c)
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.10.2)

project("mycdemo")
add_library( # Sets the name of the library.
             mycdemo
             SHARED
             native-lib.cpp )
find_library( # Sets the name of the path variable.
              log-lib
              log )
target_link_libraries(
                       mycdemo
                       ${log-lib} )
message("===============")


#设置编译后的路径地址为项目目录下的lib文件夹
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR/lib})

#设置变量SRC_LIST,值为:main.c include/test1.c
set(SRC_LIST main.c include/test1.c)

#默认是生成静态库 .a文件
add_library(LS21 main.c include/test1.c)
#默认是生成动态库 .dll文件
add_library(LS21 SHAREFD main.c include/test1.c)

1M的png图片和0.5M的png图片,在内存中,通过加载成像素,占用内存,大小是一样的,

    externalNativeBuild {
        cmake {
            path file('src/main/cpp/CMakeLists.txt')
            version '3.10.2'
        }
    }





首页,会找到cMake.exe,然后通过cmake.exe来生成指定的指令,根据设置的路径,
将生成的指令存放到对应的路径当中去:src/main/cpp/CMakeLists.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jian11058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值