【Android】CMake添加多个c文件

2023-05-16

1 准备工作

先下相关的插件,进入setting,勾选这LLDB、NDK、CMake三个,点击OK后即可下载
[image:1FF9CCB4-704A-4FEE-B79C-947D678168B5-38535-000200F9E7FB3A7F/3C179A1F-3DBD-4FE1-88B6-758EA442F287.png]

2 Native C++工程

在这里插入图片描述

简单总结一下CMake使用的操作步骤
1、新建Native C++工程
2、新建c或cpp文件,写jni函数,将在java被调用
3、修改CMakeLists.txt文件,指定so名字,将在java被loadLibrary
4、在MainActivity.java中loadLibrary第三步的so和调用第二步的jni函数
5、一句话总结:Native C++ -> c -> txt -> java

注:如果新建的不是Native C++工程(如Empty Activity),则需要在module的build.gradle中,android{}闭包内任意位置添加以下内容:

externalNativeBuild {
    cmake {
        path "src/main/jni或者cpp文件夹/CMakeLists.txt"
        version "3.10.2"
    }
}

工程编译流程:gradle找到txt -> txt指定c和so -> java调用c

3 c和txt文件

新建Native C++工程后直接一路next就可以了,而且可以直接运行了,应该会输出Hello from C++字样

文件夹中多了这么几个内容
在这里插入图片描述
最需要关心的就是CMakeLists.txt这个文件,里面的内容非常多,不过将注释全部删除,可以简化如下:

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib SHARED native-lib.cpp)

find_library(log-lib log)

target_link_libraries(native-lib ${log-lib})

我们可以先按照流程走一遍:
1、在cpp目录下右键新建一个C/C++ Source File,随便起个名
在这里插入图片描述
由于之前已经起了一个test.cpp测试通过了,所以这次我想试试c,所以新建了一个cxk.c
[image:9420624E-BE36-427F-B55E-175455891083-38535-0001FF629251F3DA/Pasted Graphic 9.jpg]

2、然后输入如下内容,注意红框的地方要改成你自己的包名和文件名,
[image:B06FB579-4273-4BB4-9DC5-F6F22D79A7A4-38535-000207F280AC9E98/5E80CD1C-ACD6-42AC-8C0D-D2F39FA05506.png]

#include <jni.h>

JNIEXPORT jstring JNICALL Java_你的包名_MainActivity_get2
    (JNIEnv *env,jobject obj)
    {
    return (*env)->NewStringUTF(env,"Hello from C , chicken you so beautiful !");
}

其他有标红的地方不管。

注意c和c++的语法是不一样的,注意区别,可参考
https://blog.csdn.net/u011068702/article/details/71425585

3、在CMakeLists.txt中增加如下内容

add_library(MyLib2 SHARED cxk.c)

完整代码如下(已删除原有注释):
[image:86DAA089-472E-4A5A-9BE3-596B71F8670D-38535-0001FF629273A796/Pasted Graphic 11.jpg]

4、然后到MainActivity.java中加入如下三行代码
[image:C41DC353-2986-4A17-9FC1-9516041C4686-38535-0001FF629280750A/Pasted Graphic 14.jpg]
完整代码如下:

package com.a.san;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

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

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

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

    }

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


5、此时再点击右上角的Sync刷新,即可发现标红的地方都没了
然后运行看看!
[image:910C3A49-D593-49A3-84D5-9A6D0567CA51-38535-000209C682FA248E/D70E5B9E-96F6-4972-BD23-5727DBFDB7F9.png]
/app/build/intermediates/cmake/debug/obj/armeabi-v7a/目录下有我们在txt文件中指定的so文件名称,如下:
[image:EA722236-07A0-4FD6-B70E-94F01FE23A75-38535-00020C34AF72B21F/F06500B5-C384-4F2E-96F0-87EB448A3DB2.png]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Android】CMake添加多个c文件 的相关文章

随机推荐

  • earth mover‘s distances学习记录

    https zhuanlan zhihu com p 145739750 后面的感觉没讲清楚 一开始我没想清楚 xff0c 为什么可以把问题转换成线性规划问题 问题转换一下 xff0c 一个工厂有A xff0c B xff0c C三个仓库
  • A Tutorial on Energy-Based Learning(机器学习能量模型)学习记录

    1 Introduction 其中Y是标签 X是输入 基于能量的机器学习模型即是寻找这样一个函数 和输入数据越接近 能量越小 给定一个输入 最好的模型即是对应的Y的值是真实值 这个真实值的能量是最小的 此模型可以做的工作有 预测 Ranki
  • dncnn(残差网络图像去燥记录)

    一 xff0c 生成训练数据 1 xff0c 原文相关知识 we use the noisy images from a wide range of noise levels e g 0 55 to train a single DnCNN
  • win10 10016自动重启错误解决记录

    1 xff0c 没解决 1352127440 xff0c 找到 组件服务 xff0c 然后依次展开组件服务 计算机 我的电脑 DCOM配置 xff0c 找到 9CA88EE3 ACB7 47C8 AFC4 AB702511C276 xff0
  • 无偏估计、有效性、相合性

    定义 xff1a 在已知概率分布函数构造的情况下 xff0c 概率分布的一些参数未知 xff0c 如高斯分布的namda 方差 xff0c 而利用采集到的参数来对未知参数进行估计就是参数估计 比较基础的有矩估计 最大似然估计 而不同的方法对
  • Windows10下安装point-cloud-annotation-tool点云标注工具——吐血之路总结

    零 为了标注点云数据 xff0c 经过多方查找免费开源的标注软件 xff0c 根据使用要求和方便程度最终选择了这款可以在Windows下编译安装的point cloud annotation tool xff0c 基于QT和vtk和PCL进
  • ROS 中CompressedImage消息的发布与订阅

    背景 xff1a 某些情况下需要录图像数据的包 xff0c 非常占空间和带宽 xff0c 尤其对于一些工业相机图像一张好几兆 xff0c 每秒30帧的话一份钟好几个G xff0c 这时候可以选择的订阅压缩图像 xff0c 下面直接来个dem
  • 【C#】简单的串口发送

    一 核心代码 xff1a SerialPort serialPort span class token operator 61 span span class token keyword new span span class token
  • 原生OKHttp以及OKHttpUtil的使用

    Android系统提供了两种HTTP通信类 xff0c HttpURLConnection和HttpClient 尽管Google在大部分安卓版本中推荐使用HttpURLConnection xff0c 但是这个类相比HttpClient实
  • c++编译器配置错误问题clang: error: linker command failed with exit code 1 (use -v to see invocation)

    背景 xff1a ubuntu18 04系统 之前装其他程序的时候安装了一些软件 xff0c 不知道什么时候g 43 43 编译器从 usr bin c 43 43 组里面给删掉了 xff0c 默认的编译器成了clang 43 43 xff
  • apollo7.0------浅谈激光雷达运动补偿(二)--计算解析

    背景介绍 运动补偿相关介绍参考第一篇博客 xff1a apollo7 0 浅谈激光雷达运动补偿 龙性的腾飞的博客 CSDN博客 lidar运动补偿 本篇博客主要解释一下上篇博客中运动补偿的计算部分 xff0c 简单来说就是一个利用四元数球面
  • Matlab激光雷达相机联合标定经验分享

    一 背景介绍 联合标定是做多传感器融合的基础工作 xff0c 也是一个没有最好只有更好的研究方向 xff0c 相关论文也是层出不穷 xff0c 网上也有许多开源的工作 xff0c 包括Autoware的工具箱我也试过 xff0c 感觉标定效
  • 如何更改Ubuntu系统的输出为HDMI(耳机,扬声器)?

    由于需要用HDMI外接音频设备 xff0c 故想要改变电脑输出 xff0c 本人用的为Ubuntu14 04 开始在网上搜寻怎么更改 xff0c 查到需在声音设置里面更改音频输出为HDMI xff0c 可当我打开声音设置 xff0c 嗯 x
  • PPT中插入图片背景透明化小技巧

    新版的编辑器真不适应 xff0c 费劲 xff01 xff01 xff01 最近两天做开题答辩ppt xff0c 发现了ppt中处理图片背景的一个小技巧 xff0c 在此分享给大家 PPT一般会带有背景图片 xff0c 那种带浅色调logo
  • ROS发布Float32MultiArray消息C++/Python

    在ros下发布一个字符串消息或整数消息 xff0c 网上例程不少 xff0c ROSwiki上也有教程 xff0c 有时就需要一次发送不止一个数据 xff0c 这时候就得用到数组了 xff0c C 43 43 的也好找 xff0c 不过py
  • c++中string、char *、char[]相互转换

    一 string转char 主要有三种方法可以将str转换为char 类型 xff0c 分别是 xff1a data c str copy 其中 xff0c copy 可能会报安全性错误 xff0c 自行解决即可 3 1 data 方法 s
  • char数组与char指针

    转载来源 xff1a https www cnblogs com nzbbody p 3553222 html https blog csdn net jack 20 article details 78913202 一 0 的添加 存在的
  • linux下tcpdump的使用

    简介 用简单的话来定义tcpdump xff0c 就是 xff1a dump the traffic on a network xff0c 根据使用者的定义对网络上的数据包进行截获的包分析工具 tcpdump可以将网络中传送的数据包的 头
  • khadas vim3安装ros1

    khadas vim3 按照网上的方法可以正常安装ros2 xff0c 但是按照ros1则可能会有一些奇奇怪怪的问题导致按照失败 xff0c 不过在一位群友的帮助下 xff0c 找到了解决的方法 khadas vim3 将源换为下面 xff
  • 【Android】CMake添加多个c文件

    1 准备工作 先下相关的插件 xff0c 进入setting xff0c 勾选这LLDB NDK CMake三个 xff0c 点击OK后即可下载 2 Native C 43 43 工程 简单总结一下CMake使用的操作步骤 1 新建Nati