首页 > 编程语言 >如何向已有的项目中添加C/C++代码?

如何向已有的项目中添加C/C++代码?

时间:2023-07-18 19:34:43浏览次数:56  
标签:CMake 代码 library libraries 添加 C++ path com native

第一步:

  我们需要在src/main下面建立一个cpp目录,然后在其中写一个CMakeLists.txt文件和一个cpp文件,直接给出代码:

#CMakeLists.txt文件
# 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.18.1) # Declares and names the project. project("hellondk") # Creates and names a library, sets it as either STATIC # or SHARED, and provides the relative paths to its source code. # You can define multiple libraries, and CMake builds them for you. # Gradle automatically packages shared libraries with your APK. add_library( # Sets the name of the library. hellondk # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). native-lib.cpp) # Searches for a specified prebuilt library and stores the path as a # variable. Because CMake includes system libraries in the search path by # default, you only need to specify the name of the public NDK library # you want to add. CMake verifies that the library exists before # completing its build. find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log) # Specifies libraries CMake should link to your target library. You # can link multiple libraries, such as libraries you define in this # build script, prebuilt third-party libraries, or system libraries. target_link_libraries( # Specifies the target library. hellondk # Links the target library to the log library # included in the NDK. ${log-lib})

  native-lib.cpp文件的代码如下:

#include <jni.h>
#include <string>

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

  然后在app/build.gradle文件中添加以下代码:

android {
    namespace 'com.example.myapplication'
    compileSdk 32

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }//新增代码
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"    //指定CMakeLists.txt文件的路径
        }
    }//新增代码
}

  接下来就可以调用c++代码了:

public class MainActivity extends AppCompatActivity {
    private TextView tv_display;
static{ System.loadLibrary("hellondk"); } @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_display = findViewById(R.id.tv_display); tv_display.setText(stringFromJNI()); } public native String stringFromJNI(); }

  需要注意的是:本地函数声明public native String stringFromJNI()一定要在Java_com_example_myapplication_MainActivity_stringFromJNI函数名指定的包和类下,要不然程序会出错。

标签:CMake,代码,library,libraries,添加,C++,path,com,native
From: https://www.cnblogs.com/luqman/p/17563923.html

相关文章

  • 如何通过smardaten无代码开发平台快速搭建数据中台?
    一、数据中台是什么?提到数据中台,就先要了解什么是中台,对于中台的建设,大都是跟随阿里中台的方法论。中台的作用在于打通固有多业务系统之间的数据壁垒,融合各个不同业务系统间所产生的数据,通过数字化的运营和驱动来支撑前端业务的快速变化,从而产生更大的价值。而新一代数据中台,在融合......
  • 向量自回归(VAR)模型分析消费者价格指数 (CPI) 和失业率时间序列|附代码数据
    原文链接:http://tecdat.cn/?p=24365最近我们被客户要求撰写关于向量自回归(VAR)模型的研究报告,包括一些图形和统计输出。var对象指定了p阶平稳的多变量向量自回归模型(VAR(p))模型的函数形式并存储了参数值 ( 点击文末“阅读原文”获取完整代码数据******** )。描述varm 对象的......
  • R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模
    原文链接:http://tecdat.cn/?p=26271最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。Box等人的开创性工作(1994)在自回归移动平均模型领域的相关工作为波动率建模领域的相关工作铺平了道路,分别由Engle(1982)和Bollerslev(1986)引入了ARCH和GARCH......
  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第八题:蚂蚁感冒(10')(4.9更新)
    第八题:蚂蚁感冒(10')  长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。   每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。  当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。  这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把......
  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
    第三题:李白打酒(8')  话说大诗人李白,一生好饮。幸好他从不开车。  一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:  无事街上走,提壶去打酒。  逢店加一倍,遇花喝一斗。  这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。......
  • 【代码分享】使用 terraform, 在 ZeroSSL 上申请托管在 cloudflare 上的域名对应的证
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯接上一篇:《使用terraform,在Let'sEncrypt上申请托管在cloudflare上的域名对应的证书》直接贴代码:zerossl.tfterraform{required_providers{acme......
  • SSM整合--前后台协议联调(添加功能)
    设置html文件中添加的弹窗 发送ajax请求,注意使用的时rest风格,post使用forData获取到页面表单的数据,然后发送给后台设置添加成功后,添加表单消失,并且重新查询全部 ......
  • SonarQube代码质量管理的开源平台
    CI/CD流水线完善计划,增加代码质量检查作业,在开发代码合入前提前发现不安全问题,因此引入代码质量检测-SonarQube服务。一、SonarQube是什么?Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成......
  • 深入解析 C++ 中的 ostringstream、istringstream 和 stringstream 用法
    引言:在C++中,ostringstream、istringstream和stringstream是三个非常有用的字符串流类,它们允许我们以流的方式处理字符串数据。本文将深入探讨这三个类的用法和特性,帮助读者更好地理解和应用字符串流操作。1.ostringstream(输出字符串流)ostringstream是C++中用于输出字......
  • 应对突发流量,如何快速为自建 K8s 添加云上弹性能力
    作者:庄宇以Kubernetes为代表的容器技术带来的是一种应用交付模式的变革,其正迅速成为全世界数据中心的统一API。为了保证业务持续稳定、用户访问不中断,高可用、高弹性等能力是应用架构设计不变的追求,多集群架构天然具备这样的能力。而只有在Kubernetes这层统一且标准的API......