现在手机主流CPU架构一般是2种:

32位对应-armeabi-v7a

64位对应-arm64-v8a

下面进入正题,Android Studio版本是4开头的,具体多少没显示....

1,首先在AS里面下载好NDK和CMAKE,如下图:

2,用AS新建一个支持Native C++的项目,如果新建完项目,等build完成可以直接跑起来,说明你环境没问题,完全可以玩起来,新版本的AS都不用配置NDK目录啥的,这很智能,旧版的同学赶紧升级吧。

3,下面是我自己新建的项目,我们修改下AS自建的代码,达成演示的效果,

目标是java传入2个整数,通过C++或C代码计算和。

C代码如下,C的方法命名规则是Java_包名_类名_方法名:

//
// Created by 13746 on 2022/8/8.
//#include <jni.h>JNIEXPORT jint JNICALL Java_com_example_nativedemo_NumNative_getSumFromC(JNIEnv* env,jobject obj,jint age,jint high
) {return age+high;
}

native方法加载so 和java调用:

package com.example.nativedemo;public class NumNative {static {System.loadLibrary("num");}public native int getSumFromC(int age,int high);}
package com.example.nativedemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;import com.example.nativedemo.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {private ActivityMainBinding binding;private NumNative numNative;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());TextView tv = binding.sampleText;numNative = new NumNative();int sumFromC = numNative.getSumFromC(100, 203);tv.setText("获取到结果:"+sumFromC);}}

运行结果:

上面是C源文件经过编译后直接运行的,那么打包出来的so文件在哪,别的项目怎么使用这个so文件呢?下面具体说说。

生成的so文件目录如下拷贝出来就可以给别人使用了:

下面是别的项目使用这个so文件运行结果,写的类NativeNum必须要和生成so文件包名相同。

使用的项目里面build文件里面需要设置如下,但是编译的项目不能设置,否则会报错

sourceSets {main {jniLibs.srcDirs = ['libs']}
}

NumNative类合Main

package com.example.nativedemo;public class NumNative {static {//此处加载so文件不要带有前缀lib,和后缀名 .so,系统自动加System.loadLibrary("num");}public native int getSumFromC(int age,int high);}
package com.example.nativedemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private NumNative numNative;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);numNative = new NumNative();TextView sum = findViewById(R.id.mainSum);int sumFromC = numNative.getSumFromC(33, 180);sum.setText("获取的结果:"+sumFromC);}}

下面是2个项目的完整代码地址:

GitHub - ZengHongHua/NativeDemo2: 编译demo

lib使用:

GitHub - ZengHongHua/TestLib: lib使用

Android编译C/C++代码,编译出的so文件给别的项目用,CMakeLists.txt编译,请放弃Android.mk!相关推荐

  1. android 多个c文件编译成一个so,AndroidStudio使用CMakeLists.txt编译多个so库

    对于单个so库编译就不说了,AndroidStudio可以直接生成单个so库编译的模板 对于实际项目中,多用到的是好几个库,下面说一下编译多个so库的情况 TIM图片20180927155108.pn ...

  2. Cmake + CMakeLists.txt 编译SO库(JNI编译)

    cmake android-ndk google demo- https://github.com/googlesamples/android-ndk 在Android Studio中使用C/C++库 ...

  3. Android中如何使用代码打开各种类型的文件

    介绍 本篇用于介绍Android中如何打开各种类型的文件,如:音乐文件(mp3.wav.ogg等).视频文件(3gp.mp4等).图片文件(jpg.png.gif等).安装包(apk).文档(txt. ...

  4. 手机如何打开c语言文件类型,Android中如何使用代码打开各种类型的文件

    介绍 本篇用于介绍Android中如何打开各种类型的文件,如:音乐文件(mp3.wav.ogg等).视频文件(3gp.mp4等).图片文件(jpg.png.gif等).安装包(apk).文档(txt. ...

  5. CmakeLists.txt编译问题

    在TX1上编译cpp文件,PCL安装位置在SSD上,cmake时出现错误: Could not find PCLConfig.cmake or pcl-config.cmake 解决办法: 在Cmak ...

  6. Android 反编译获取class代码

    转载自:      http://blog.csdn.NET/vipzjyno1/article/details/21039349/ 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开 ...

  7. notepad编译java_Notepad++直接编译运行java代码的具体步骤

    最近不少朋友表示还不会Notepad++直接编译运行java代码的操作步骤,使用下面小编就带来了Notepad++直接编译运行java代码的操作方法哦,一起去看看吧. Notepad++直接编译运行j ...

  8. linux下c++编译(g++)、cmake配置完结、配置json文件并调试项目、进程管理

    一.构建项目编译规则 1.系统配置: 系统要求:linux centos7 编译器:g++ 调试器:gdb 以及cmake IDE:vscode 可以通过命令去查看linux下是否安装:通过–vers ...

  9. cmake 编译文件 CMakeLists.txt 语法介绍与实例演练

    一.Cmake 简介 cmake 是一个跨平台.开源的构建系统.它是一个集软件构建.测试.打包于一身的软件.它使用与平台和编译器独立的配置文件来对软件编译过程进行控制. 二.常用命令 1. 指定 cm ...

最新文章

  1. 类脑计算的一大突破 BrainScaleS-2
  2. 【经验】CentOS 5.2 下用Yum安装Apache+PHP+MySQL环境
  3. EntityFramework SaveChange()方法不能更新的问题
  4. WinForm 异步调用方法
  5. 集芯片的焊接技巧:从LQFP64说起
  6. 最新的Java SE平台和JDK版本发布计划
  7. Deepin 20.2.3系统标题栏及其按钮美化
  8. 0001-Two Sum(两数之和)
  9. 浅谈GSM/GPRS模块软硬件设计(基于有方M660+模块和单片机)
  10. 数据结构之图:加权有向图与dijkstra算法找到最短路径,Python——28
  11. MySQL安装成功后dos命令行设置密码
  12. 字符串p型编码(信息学奥赛一本通-T1145)
  13. 计算机编程的21条规律 -- 转
  14. .net 任务调度 mysql_C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件...
  15. java简单增删改查_JAVA JDBC 简单的增删改查
  16. STL - queue(队列)
  17. 问道手游服务器维护,问道手游2021年5月20日维护公告_问道手游2021年5月20日更新了什么_玩游戏网...
  18. 类型转换操作符(C++)
  19. 通讯录_你有多久没翻过通讯录了?
  20. 计算机技术中储存容量最大的单位,计算机中最大单位是什么

热门文章

  1. python 爬虫实战1 爬取糗事百科段子
  2. zlkw什么意思_kw是什么单位
  3. 关于ubuntu环境下安装less编译工具koala,及无法打开koala的问题
  4. Java从0到Hello World(一)-手把手教你做JDK环境变量配置
  5. 断网了别找运营商,路由器能自己解决~
  6. 桌面图标出现蓝底怎么办
  7. ISO-27145故障诊断说明
  8. linux查看用户所属的组
  9. Angular中的: host 和 ::ng-deep
  10. Java中回车符的使用‘\r‘