Android Studio CMake依赖第三方库

这里实现一个简单的功能在APP里调用libnative-lib.so里的add。libnative-lib.so去调用libthird.so里的third_add来实现

JniUtil 
public class JniUtil {
    static {
        System.loadLibrary("native-lib");
        System.loadLibrary("third");
    }

    public  static native int add(int x,int y);
}

libnative.cpp

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

extern "C"{
JNIEXPORT jint JNICALL
Java_com_test_ndkthirdso_JniUtil_add(JNIEnv *env, jclass type, jint x, jint y) {

    // TODO
    return  third_add(x,y);
}

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

}

这里编译好一个自己写一个libthird.so库实现一个加法功能

third.h

#ifndef __H_THIRD
#define __H_THIRD

#ifdef __cplusplus
extern "C" {
#endif

int third_add(int a, int b);

#ifdef __cplusplus
}
#endif

#endif // __H_THIRD

third.cpp

#include <jni.h>
#include "third.h"

int third_add(int a, int b){
return a+b;
};

生成如下

项目工程结构如下:

CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1)
add_library(native-lib
             SHARED
             src/main/cpp/native-lib.cpp )

find_library(log-lib
              log )
#动态方式加载 third是libxxxx.so的xxxx部分
add_library(third SHARED IMPORTED)

SET(third_path ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libthird.so)

#设置要连接的so的相对路径,${ANDROID_ABI}表示so文件的ABI类型的路径,这一步引入了动态加入编译的so
set_target_properties(third  PROPERTIES IMPORTED_LOCATION ${third_path})

MESSAGE(STATUS “src  third so path= ${third_path}”)

#配置加载native依赖
include_directories( ${ProjectRoot}/app/src/main/cpp/external/include )

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

gradle

apply plugin: ‘com.android.application‘

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.test.ndkthirdso"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"
            }
        }
        ndk {
            // Specifies the ABI configurations of your native
            // libraries Gradle should build and package with your APK.
            abiFilters  ‘armeabi‘, ‘armeabi-v7a‘
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2‘, {
        exclude group: ‘com.android.support‘, module: ‘support-annotations‘
    })
    compile ‘com.android.support:appcompat-v7:26.+‘
    compile ‘com.android.support.constraint:constraint-layout:1.0.2‘
    testCompile ‘junit:junit:4.12‘
}
时间: 2024-07-30 23:51:30

Android Studio CMake依赖第三方库的相关文章

使用SlidingMenu的方法以及Android Studio 如何导入第三方库SlidingMenu

一.使用SlidingMenu的方法 1.引入SlidingMenu库 2.继承SlidingFragmentActivity 3.onCreate方法改成public 4.调用相关API  二.Android Studio 如何导入第三方库SlidingMenu? 材料:github网站下载的第三方库SlidingMenu-master.zip 步骤: 1.新建一个项目(我的项目是NewsReports) 2.在NewsReports目录下新建一个SlidingMenuLibraries文件夹

Android Studio中导入第三方库

之前开发Android都是使用的eclipse,最近由于和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的交流,我便尝试着去使用Android Studio.刚开始用遇到一个问题:如何在Android Studio中导入第三方库? 首先本人使用的Studio版本为0.5.8,尝试解决方法如下,分两种: 1.导入jar包 直接复制你的jar包(如actiobarsherlock.jar)至工程的libs目

用CMake设置Visual Studio工程中第三方库

引用至 https://www.cnblogs.com/xuhui24/p/6234569.html 用CMake设置Visual Studio工程中第三方库 较大的工程文件中一般会调用动态库或者静态库,如果这些库文件是当前工程包含的项目,CMake会自动识别并添加Debug和Release编译时需要的库文件路径和文件名,可以使用命令: Target_Link_Libraries(${PROJECT_NAME} LibName) 但是如果要添加第三方库文件,Debug和Release文件的路径往

Android studio 添加依赖

以前添加依赖总是到github上下载源码,再添加源码到module的依赖当中,其实在studio中,应该使用maven库. 比如在github上看到了sliding-menu这个项目,就应该到maven网站上找对应的库,之后把地址写入build.gradle中,比如以下就是sliding-menu的库, compile 'com.github.itsmechlark.android-sliding-menu:android-sliding-menu:1.0.1' 这样做的好处就是不必再 Andr

【Android Studio探索之路系列】之六:Android Studio加入依赖

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [Android Studio探索之路系列]章节列表 [Android Studio探索之路系列]之中的一个:Android Studio开篇 [Android Studio探索之路系列]之二:Android Studio软件安装 [Android Studio探索之路系列]之

运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\views\user\index.html while compiling ejs. 语法错误:失去右括号)在参数列表后面,在.....\views\user\index.html(在这个路径中的index.html)中当编译ejs时. 分析:这个时候应该是模板引擎ejs出现问题,但是ejs已经是一个写好

android studio中导入第三方jar包和第三方库文件的方法

一.导入第三方jar包的方法 其实较为简单,以下步骤: 1>在工程的libs下面放置需要导入的jar包 2>在导入的jar包右键,选择"add as library" 3>这时候就能够在app下面的build.gradle中发现多了如下说明:"compile XXXX",说明导入jar文件成功了. 二.导入第三方类库文件 相对而言,其实就是将之前的Eclipse的project或者module转化成android studio下的可执行的proje

Android Studio项目引入外部库注意事项(PullToRefresh)

Android Studio开发App项目时引入第三方库是个比较麻烦的事情.之前导入Volley就折腾了好久,导入下拉刷新控件PullToRefresh时又碰到了各种问题.在此记录一下,以便查阅. 一.导入PullToRefresh 1.将PullToRefresh克隆到本地 git clone https://github.com/chrisbanes/Android-PullToRefresh 2.克隆到本地后library目录复制到app同级目录下,并将名称改为PullToRefresh

android studio中导入第三方类库

http://zhidao.baidu.com/link?url=W0zaTJAdd4qiJ2PwIGK39bqjQ3-a8CxA-EZb1M9FQZGnPHMfxPzn0h1AoPED-ix7GiSgfDV0EGKtl_9TJXyqaje0BTCTuZ2VOLI8PSoI4nq 下面分两种情况介绍一下如何导入第三方类库. 1.对于jar的类库,非常简单,只要在项目根目录下新建一个libs目录,然后把jar复制进去,在jar上点击右键,选择Add as library,即可完成依赖的添加. 2.