导航:首页 > 操作系统 > androidcmakeso

androidcmakeso

发布时间:2022-11-22 06:18:40

1. Cmake笔记之set_target_properties

第一篇文章,记一个困扰了我很长时间的一个cmake的问题吧。

大家在用cmake时,应该经常会用到第三方so库,导入第三方so库中需要使用到set_target_properties,例如这样写:

set_target_properties(

Thirdlib

PROPERTIES IMPORTED_LOCATION

${CMAKE_CURRENT_SOURCE_DIR}/jniLibs/libThirdlib.so

)

CMAKE_CURRENT_SOURCE_DIR 这个变量是系统自定义的,表示CMakeLists.txt文件的绝对路径

注意CMakeLists.txt文件的路径,我的这个文件是放在app/src/main 下。

2. CMAKE使用链接第三方SO库

CMake

命名变量

set(INC_DIR /usr/local/include)

set(LINK_DIR /usr/local/lib)

set(SOURCE_FILES main.cpp)

去哪里找头文件 相当于gcc/clang 中的-I(i的大写字母)参数

include_directories(${INC_DIR})    # 用${}引用变量

去哪里找库文件 .so .dll .dylib 相当于gcc 中的-L参数

link_directories(${LINK_DIR})

要链接的库文件的名字 相当于gcc中的-l(小写的l)参数

target_link_libraries(test)

只写库名就可以,就是libxxx.so的中间xxx的部分

也可以写成下面这样

target_link_libraries(test)

通过上面的这些关键词,我们就可以使用第三方库了。

cmake_minimum_required(VERSION 2.8.12)

PROJECT (main)

ADD_EXECUTABLE(main main.c)

INCLUDE_DIRECTORIES(/usr/include/hello)

# 静态链接库

# TARGET_LINK_LIBRARIES(main libhello.a)

# 动态链接库

set(LINK_DIR /usr/local/lib)

link_directories(${LINK_DIR})

target_link_libraries(main libhello.so)

拷贝动态链接库的时候需要注意符号链接是否还在

3. android用cmake怎么导入cpp文件夹,undifined reference to

ndroid Studio升级到2.2之后,我们可以先配置好NDK开发的一些所需工具,如图,在SDK Tools中勾选安装CMake、LLDB、NDK。

CMake: 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
LLDB: Android Studio上面调试本地代码的工具。
Android Studio自带DEMO了解CMAKE
Android Studio升级到2.2版本之后,在创建新的project时,界面上多了一个Include C++ Support的选项。勾选它之后将会创建一个默认的C++与java混编的Demo程序。就让我们先来看看这个官方标准Demo吧。
开始之前最好先下载好NDK,见NDK开发 从入门到放弃(一:基本流程入门了解),即在Project Structure界面Android NDK location处下载或选择正确的路径。或者使用上方提供的工具安装方法来进行下载。否则,创建的新project也会报错,需要配置好后clean。
File -> New -> New Project,在如下界面中勾选Include C++ Support,然后一路 Next,直到 Finish 为止即可。

项目打开后我们查看目录结构,与常规项目不同的是多了.externalNativeBuild文件夹、cpp文件夹、CMakeLists.txt文件,如下图:

这三个东西都是NDK部分:
1. .externalNativeBuild文件夹:cmake编译好的文件, 显示支持的各种硬件等信息。系统生成。
2. cpp文件夹:存放C/C++代码文件,native-lib.cpp文件是该Demo中自带的,可更改。需要自己编写。
3. CMakeLists.txt文件:CMake脚本配置的文件。需要自己配置编写。
Gradle中也有两处不同:

java代码:
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}

/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();

// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
}2223

从native-lib.cpp的代码中我们能看到它使用的是静态注册的方式,动态注册的方式代码同传统JNI。
#include <jni.h>
#include <string>

extern "C"
jstring
Java_com_example_person_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}12345678910111234567891011

CMakeLists.txt文件中我们需要注意的是下面这三个地方。两个library的名字(需一致)以及一个cpp文件的路径,彼此需要对应一致,当我们自己定义library以及自己创建cpp文件时需要对应修改。

4. android jni cmake和 mk的不同

目录上的区别:
传统JNI:

CMake:

这两种方式在目录上的区别就是两点:
1.以前的jni目录改成cpp,位置不变
2.之前对c文件的编译配置Android.mk文件放在jni目录下,现在改成CMakeLists.txt文件
(提示:其实Android.mk文件和CMakeLists.txt可以放在任意目录下,不过最好放在当前工程目录下任意位置。后面说build.gradle配置区别就知道了)

5. android cmake为什么mips

MS nmake,BSD Make(pmake),Makepp,等等。CMake是为了达到一次编写MAKEFile,则可以在不同的平台上编译的目的编写的一款构建工具。我现在也不是太懂,以后学习一下,并写个CMake自学教程来。这里有个网站http://hahack.com/codes/cmake/,可以参考学习。

6. android stio cmakelists怎么引用so的

Android开发常常遇到java调用so文件的情况,本文介绍一下Google最近新推出的应用在android studio中的方法–cmakelist.txt格式调用。

so文件分为jni格式的和非jni格式的,java只能调用jni格式的so文件。本文介绍的是针对ndk生成的非jni格式的so文件调用。

首先是对非jni格式的so文件进行处理,声明一个.h文件,将so文件中的方法包进去,之后将.h文件和so文件放在一个目录下(之后需要对目录进行设置),在系统生成的native-lib.cpp中实现对该so文件的调用,即将.h文件包进去就可以调用so文件中的方法。java采用

System.loadlibraty("native-lib")1

的方法,即可对native-lib.cpp方法的调用。

详细方法详细

7. 如何在android studio中安装cmake

下载好Android SDK后,开始安装,
Android SDK采用了Java语言,所以需要先安装JDK 5.0及以上版本。直接下载jdk安装文件安装,方便。
Android SDK不用安装,下载后,直接解压即可,
将下载后的SDK的压缩包解压到适当的位置,就这么简单;
SDK安装OK。
使用Eclipse进行android应用开发需要给Eclipse装adt插件,这样Eclipse就
可以和android sdk建立连接,可以在Eclipse中启动android模拟器进行程序调试等
下载adt的zip包安装
安装完插件后,需要做一些简单的配置:
1、在Eclipse中,选择Window > Preference;
2、从左侧的菜单中,选择Android项;
3、设置SDK Location,点Browse选择SDK的安装根目录;
4、OK,完成。

8. android cmake so库怎么用

编译mac静态库这个比较简单,直接Xcode-GXcode,然后用xcodebuild命令即可。编译Andoird静态库编译android库我们同样可以引入一个toolchain文件,这里我是从android-cmake里面下载的。在使用这个toolchain文件之前,我们先要使用ndk自带的make-standalone-toolchain.sh脚本来生成对应平台的toolchain.这个脚本位于你的NDK的路径下面的buil/tools目录下。比如要生成arm平台的toolchain,我们可以使用下列命令:sh$ANDROID_NDK/build/tools/make-standalone-toolchain.sh--platform=android-$ANDROID_API_LEVEL--install-dir=./android-toolchain--system=darwin-x86_64--ndk-dir=/Users/guanghui/AndroidDev/android-ndk-r9d/--toolchain=arm-linux-androideabi-4.8这里的$ANDROID_NDK为你的NDK的安装路径。这段命令可以生成arm的toolchain,最终可以编译出armeabi和armeabi-v7a静态库。如果想生成x86的toolchain,指需要使用下列命令:sh$ANDROID_NDK/build/tools/make-standalone-toolchain.sh--platform=android-$ANDROID_API_LEVEL--install-dir=./android-toolchain-x86--system=darwin-x86_64--ndk-dir=/Users/guanghui/AndroidDev/android-ndk-r9d/--toolchain=x86-4.8最后,我们要告诉CMake使用外部toolchain文件,可以使用参数-DCMAKE_TOOLCHAIN_FILE=xxx。此外,我们还需要在导出两个环境变量给此toolchain文件:exportPATH=$PATH:./android-toolchain/binexportANDROID_STANDALONE_TOOLCHAIN=./android-toolchaincmake-DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake-DANDROID_ABI="armeabi"..

9. Android Studio手动配置Makefile、CMake

在Ubutu上编译出来的.so文件,怎么添加到Android项目中去使用呢?目前:可以通过
Makefile方式和CMake方式引入预编译静动态库(静态库.a 动态库.so)到项目中去使用。就目前而言CMake是Goole推荐使用方式,但是加入接手一个老的NDK项目是MakeFile方式,看不懂就GePi了,所以这里我们还是介绍一下MakeFile方式将静动态库加入到AS中,完成NDK项目的开发。废话不多说,直接撸步骤了:

1、在src/main目录下创建一个ndkBuild文件夹
2、在此文件中创建一个Android.mk文件

3、在此文件中创建一个test.c的源文件

4、将编译好的的.so库复制到src/main目录下
如图所示目录结构:

1、编辑Android.mk文件

2、编辑grade(app)文件

3、编辑test.c文件

4、使用编译好的.so库里面的函数

本结果运行在Android 5.1 系统上

再次运行在Android 8.0系统上

看以清楚知道,其实我们的APK包里面就没有libMainTest.so库,所以APP在8.0上会出现奔溃的现象。so...

1、在src/main目录下创建一个cmake文件夹
include:里面包含需要一些头文件
cmakeTest.c:需要编译的源文件
2、在app目录下创建一个文件:CmakeLists.txt

3、编辑grade(app)

4、编辑cmakeTest.c文件

4、引用编译好的libcmakeTest.so

Android 8.0.0系统:

Android 5.1.1系统:

10. Android基于vsomeIp3与VDC或者VIU通信

部门需要开发一款App用于演示VDC或者VIU的功能,进一步控制汽车部件做出反应

作为一个对硬件,甚至对汽车没一丝了解的Android开发,第一时间并不想跳出舒适圈,脑子里立马浮现出一个场景,同一局域网内直接使用Socket通信。说干就干,啪啪啪,编码完成,一个基于C/S架构的Demo完成,领导看了看,有没有一种可能,板子上不需要重新写程序,直接使用板子已有的someIp协议进行通讯。what?

SOME/IP全称Scalableservice-Oriented Middleware over IP,基于IP的可扩展面向服务的中间件,是一种专用于汽车嵌入式的客户端/服务器通信机制,访问方式分别为事件通知event和RPC远程调用

Message ID(Server ID) :16bit,服务的ID,标识出一个服务;
Message ID(Method ID) :16bit,方法的ID,表示出一个方法;
Length:报文长度,32bit,标识从request ID到报文结束的总长度;
Request ID(Client ID) :客户端ID,16bit。区分不同的客户端;
Request ID(Session ID) :会话ID,区分同一个客户端的多次调用;
Protocol Version :协议的版本号,固定值为x01;
Interface Version:服务接口版本;
Message Type :报文类型,在AUTOSAR中,总共包含五种,包括REQUEST,REQUEST_NO_RETURN,NOTIFICATION,RESPONSE,ERROR;
Return Code :返回码,包括四种,REQUEST,REQUEST_NO_RETURN,NOTIFICATION,RESPONSE;
Payload :数据段,用于放置需要传输的数据

平时开发App,Android的主要的开发语言是java和kotlin,那如果我们能通过java直接构建Someip消息体是否就能正常通信了?然后悲哀的发现光是按标准组建消息体 就是一个难度不小的挑战,更别说还要能构建通信通道,正常解析数据。又是一顿google search,发现BMW开源了一个实现someip的库vSomeIp

查看这个库的过程中,我发现了一个名字非常数据的文件CMakeLists.txt,Android开发中使用JNI的方式调用函数,通过Cmake构建so库好像都跟这个文件有关,那是不是意味着Android可以通过JNI 的方式调用vSomeIp库,从而实现与硬件的通讯

基于上个git项目,其实已经能够完成单个应用内的someip通讯了,所以对于那个git项目已有的配置就不多做描述了。
但是要想与VDC或者VIU在一个局域网环境内通讯还要另外做配置。

以上是Android作为client端 基于someip协议与硬件通讯的一个大致配置,本人已验证,可行,撒花~~

阅读全文

与androidcmakeso相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163