赞
踩
编译工具:
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。