Android CMake 编译so库
来源:互联网 发布:stringtokenizer java 编辑:程序博客网 时间:2024/06/04 19:18
环境
- Android Studio 3.0
- JDK 1.8
- Gradle 4.1
Demo地址:
https://github.com/seeways/NDKDemo
C++编译so库
创建项目
使用默认的C++支持库建立项目后,会默认生成一个模板,有一个简单的Cpp程序,和MainActivity调用示例
c++
#include <jni.h>#include <string>extern "C"JNIEXPORT jstringJNICALLJava_com_test_ndkdemo_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());}
java
//包名package com.test.ndkdemo//导入的包import android.support.v7.app.AppCompatActivityimport android.os.Bundle//kotlin插件import kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 调用示例 sample_text.text = stringFromJNI() } //一个本地方法,它由“本地库”本地库实现,它被打包在这个应用程序中。 external fun stringFromJNI(): String companion object { // 用于在应用程序启动时加载“native-lib”库 //相当于java的静态代码块。 init { System.loadLibrary("native-lib") } }}
以上是项目建立好之后的默认程序,C++没有像java一样的保姆,所以一般调用完了需要自己释放内存,比如要用到数据的话,一定要释放,否则估计几个回合程序就挂了。
接下来稍微改造一下程序
建立JNI类
package com.test.ndkdemo;/** * Created by TaoYuan on 2017/11/24 0024. */public class MyJNI { //调用so库声明 static { System.loadLibrary("MyJNI"); } /** * 调用so库方法 */ //输出字符串 public native String sayHello(); //输出 x + y 计算结果 public native int sum(int x, int y);}
简历C++文件
#include <jni.h>#include <string>extern "C"JNIEXPORT jstring JNICALLJava_com_test_ndkdemo_MyJNI_sayHello(JNIEnv *env, jobject instance) { std::string say = "say 就 say!\n Hello"; return env->NewStringUTF(say.c_str());}extern "C" //表示对java输出JNIEXPORT jint JNICALLJava_com_test_ndkdemo_MyJNI_sum(JNIEnv *env, jobject instance, jint x, jint y) { return x + y;}
CMakeLists.txt文件(关键地方)
# 指定需要CMAKE的最小版本cmake_minimum_required(VERSION 3.4.1)# 添加库,参数为(库名称<自定义>,库模式<STATIC,SHARED>,路径)add_library( # Sets the name of the library. MyJNI # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/MyJNI.cpp )# 指定目标库target_link_libraries( # Specifies the target library. MyJNI # Links the target library to the log library # included in the NDK. ${log-lib} )
modules build.gradle
android代码块下,加一句: abiFilters 类型
externalNativeBuild { cmake { cppFlags "" abiFilters 'armeabi','armeabi-v7a' } }
完成
make project即可生成
生成路径位于:${ProjectPath}\app\build\intermediates\cmake\debug\obj
阅读全文
1 0
- Android CMake 编译so库
- windows下使用cmake和ndk编译android所用动态库.so和静态库.a
- Android studio 多个so库配置 ffmpeg库配置 cmake编译
- 小白初用Android studio的cMake编译生成.so库并调用
- android ndk第一步使用ndk和Cmake编译.so文件
- 用CMake 编译Android库
- android共享库(so)编译
- freetype 编译 android so 库
- Android JNI 编译so库
- Android Studio 使用CMake实现自己的.so库
- android cmake编译
- android ndk9 编译第三方so库
- android Jni编译多平台so库
- 编译android 64位 .so库
- ffmpeg编译android的so库
- eclipse android jni 开发,so库编译
- 编译Android .so文件
- android so文件编译
- 图像变形(1)矩形全景图像还原
- SSM项目从零开始到入门002-创建第一个maven项目
- 刚开始是windows10+ubuntu16.04,后来将win10换成win7,添加原ubuntu的引导
- leveldb——leveldb入门篇之Linux下编译配置和使用
- jquery + append 弹框 + disabled 的按钮属性
- Android CMake 编译so库
- python Thread类解析(一)
- html表单 select多选下拉箭头的问题
- linux结构化命令:if-then
- 【Aizu-ALDS1_7_B】Binary Trees 树 (4/1000)
- Java8简明指南
- C++ 中vector的使用方法
- 基于Netty的长连接客户端
- wireshark混杂模式