返回顶部
首页 > 资讯 > 移动开发 >Android 在现有项目中使用NDK开发
  • 506
分享到

Android 在现有项目中使用NDK开发

ndkAndroid 2022-06-06 13:06:10 506人浏览 泡泡鱼
摘要

新建项目直接选中Native c++即可,本篇文章主要描述如何在现有项目中添加Native方法 添加步骤 1.AS中依次点击Preference

新建项目直接选中Native c++即可,本篇文章主要描述如何在现有项目中添加Native方法

添加步骤

1.AS中依次点击Preferences->Android SDK -> SDK Tools安装Cmake和NDK,如果安装过程中下载超时,可以关闭代理重试

2.新建声明native方法的类NativeMethod.java。代码如下

public class NativeMethod {
    static {
        // 这里填入的就是要使用的so库的名字
        System.loadLibrary("iBoxChain");
    }
    // 声明Native方法
    public native static String getString();
    public native static String getContent();
}

此时,这两个方法是红色的,不能使用状态

3.在src/main目录下建立存放C/C++文件的目录jni

4.新建C++文件NativeMethod.cpp,并添加如下代码

#include 

5.在app目录下新建CMakeLists.txt文件,注意这个文件名字不可以修改,添加如下代码

#指定使用cmake的最低版本
cmake_minimum_required(VERSioN 3.6)
#指定要生成so库信息,参数分别为:生成的so库名,so库的类别,生成so库的源C++文件
add_library(iBoxChain SHARED src/main/jni/NativeMethod.cpp)

6.右键点击app目录,点击Link C++ Project With Gradle。Build System选择CMake,路径选择第5步中新建的CMakeLists.txt文件,点击确定
此时,我们app目录下的 build.gradle文件里将会多出下列代码

externalNativeBuild {
    cmake {
        path file('CMakeLists.txt')
    }
}

7.回到NativeMethod.java类中,选中标红的getTip(),alter + enter按钮,Mac使用option + enter。
将会在iBoxChain.c文件里生成C的方法,这是自动生成的方法。

8.因为我们要使用的是NativeMethod.cpp。所以把生成的方法复制到NativeMethod.cpp中
并删除iBoxChain.c文件。改造NativeMethod.cpp中的方法如下

extern "C"
JNIEXPORT jstring JNICALL
// 方法名与NativeMethod.java文件的全路径相关,定义完成之后,不要修改这两者
Java_com_example_nativetest_NativeMethod_getTip(JNIEnv *env, jclass type) {
    return env->NewStringUTF("Hello, I am a new Tip");
}

此时,NativeMethod.java中的方法,就已经和NativeMethod.cpp中的方法建立联系。
按照7中的步骤操作getContent方法,将会自动在NativeMethod.cpp中生成对应的C++方法,补全之后即可使用

9.在代码中调用这两个方法,点击运行即可,运行成功之后,将会在app的build->cmake文件夹下生成对应CPU架构下的so库

常见问题

1.什么跟网上一些主流的构建方式不一样?
现在百度上能搜到的教程大多是构建比较简单,使用稍微复杂。但是大多是针对的AS2.2及其以前的版本,在升级到3.0之后,AS使用CMake来构建,因此要通过写构建脚本的形式来进行。而且搭建的过程比较复杂,但是后续使用会比较简单。

2.下载不了NDK是什么原因?
大多时候我们会给Android Studio指定代理以便能翻墙访问到许多开源库。但是Android Stduio官方的某些组件下载时,如果使用代理,AS会失去本地的存储权限,因此即使能访问到这些组件,也下载不下来,关闭代理即可。

3.示例中哪些命名可以自由定制,哪些不可以?
NativeMethod.java和NativeMethod.cpp文件名是可以自由修改的。且两者之间可以不一致
CMakeLists.txt文件名不可以修改,否则无法正常添加选中
System.loadLibrary(“iBoxChain”)和CMakeLists.txt中的iBoxChain为对应关系,前者是使用so库的名字,后者是生成so库的名字。

4.为何不指定生成so库的CPU架构信息
不指定的时候默认多种架构的so库都生成

5.如何把多个cpp文件生成多个so库?
假设此时又有JniTest.cpp,NativeTest.cpp等多个cpp文件。打开CMakeLists.txt文件

add_library (iBoxChain SHARED src/main/jni/NativeMethod.cpp)
add_library (jniTest SHARED src/main/jni/JniTest.cpp)
add_library (NativeTest SHARED src/main/jni/NativeTest.cpp)

这样运行之后,会生成,对应的三个so库,在使用的时候也需要 System.loadLibrary("")逐个添加这些库

6.如何把多个cpp文件生成一个so库?
方法一、假设此时又有JniTest.cpp,NativeTest.cpp等多个cpp文件。打开CMakeLists.txt文件

add_library (iBoxChain SHARED src/main/jni/NativeMethod.cpp src/main/jni/JniTest.cpp)

在后边逐次添加cpp文件的路径,即可把这些文件全部生成到iBoxChain.so中,
但是这样不利于扩展,每次新增一个cpp文件,都要在这里修改

方法二、

file(GLOB SRC_LIST "src/main/jni/*.cpp")
add_library(iBoxChain SHARED ${SRC_LIST})

这中方法可以把指定目录下的所有cpp文件全部添加到iBoxChain.so中,缺点是不够灵活,
有些需要生成到其他so库必须要额外建立文件夹保存


作者:YX_BB


--结束END--

本文标题: Android 在现有项目中使用NDK开发

本文链接: https://lsjlt.com/news/29032.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android 在现有项目中使用NDK开发
    新建项目直接选中Native C++即可,本篇文章主要描述如何在现有项目中添加Native方法 添加步骤 1.AS中依次点击Preference...
    99+
    2022-06-06
    ndk Android
  • ViewDragHelper怎么在Android项目中使用
    本篇文章为大家展示了 ViewDragHelper怎么在Android项目中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。ViewDragHelper是support.v4下提供的用于处理拖拽滑...
    99+
    2023-05-30
    android viewdraghelper
  • GridView如何在Android项目中使用
    这期内容当中小编将会给大家带来有关GridView如何在Android项目中使用 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。定义各种layout 和对应的item <&#63;...
    99+
    2023-05-31
    android gridview idv
  • log4j如何在Android项目中使用
    log4j如何在Android项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Android 使用log4j前言: 如果要直接在a...
    99+
    2023-05-31
    android log4j roi
  • ContentProvider怎么在Android项目中使用
    ContentProvider怎么在Android项目中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、概念及说明ContentProvider定义:内容提供者是一个An...
    99+
    2023-05-31
    android contentprovider roi
  • listfragment怎么在Android项目中使用
    本篇文章给大家分享的是有关listfragment怎么在Android项目中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、fragment简介我对fragment的理解...
    99+
    2023-05-31
    android listfragment roi
  • Intent如何在Android 项目中使用
    今天就跟大家聊聊有关Intent如何在Android 项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一 Android系统用于Activity的标准Intent1 根据联系...
    99+
    2023-05-31
    android intent
  • IntentService如何在Android项目中使用
    IntentService如何在Android项目中使用 ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android IntentService详解一、Int...
    99+
    2023-05-31
    android intentservice roi
  • EditText如何在Android项目中使用
    EditText如何在Android项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.获取光标选中的文字EditText view = (EditTe...
    99+
    2023-05-31
    android edittext roi
  • AutoCompleteTextView如何在Android项目中使用
    这期内容当中小编将会给大家带来有关AutoCompleteTextView如何在Android项目中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。自动编辑文本框(AutoCompleteTextVie...
    99+
    2023-05-31
    android roi autocompletetextview
  • 如何在Android项目中使用ImageView
    这期内容当中小编将会给大家带来有关如何在Android项目中使用ImageView,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先创建一个叫MatrixImageView的类去继承ImageView,然...
    99+
    2023-05-31
    android age imageview
  • android项目中在webview中打开pdf
    android项目中在webview中打开pdf。 关于android打开pdf文件方法有多种,下面的文章有详细说明: Android 实现 PDF 文件阅读功能调研 Andr...
    99+
    2022-06-06
    pdf webview Android
  • 在Android项目中使用Studio怎么实现引用Library
    本篇文章为大家展示了在Android项目中使用Studio怎么实现引用Library,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、引用Library选择你的项目,点击导航栏File -->...
    99+
    2023-05-31
    android studio library
  • Android开发中项目实现一个画板功能
    这期内容当中小编将会给大家带来有关Android开发中项目实现一个画板功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。效果图如下XML布局代码<RelativeLayout xmlns:andro...
    99+
    2023-05-31
    android roi
  • 在项目开发中怎么灵活使用css变量
    这篇文章主要讲解了“在项目开发中怎么灵活使用css变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在项目开发中怎么灵活使用css变量”吧!在项目开发的过程...
    99+
    2024-04-02
  • PHP开发技术:如何在项目中使用PATH API?
    在PHP开发中,PATH API是一个非常有用的工具,它可以让开发者在项目中轻松地处理URL路径。PATH API可以帮助我们解决很多问题,比如URL重写、路由、访问控制等等。在本文中,我们将探讨如何在项目中使用PATH API。 一、什...
    99+
    2023-10-25
    开发技术 path api
  • Android项目开发常用工具类LightTaskUtils怎么使用
    这篇文章主要介绍“Android项目开发常用工具类LightTaskUtils怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android项目开发常用工具类LightTaskUtils怎么使...
    99+
    2023-06-30
  • Android 6.0+ 项目开发中用到适配功能
    1:在android6.0之后使用WindowManager需要使用者认真同意跳入一个界面 参考博客:https://blog.csdn.net/chenlove1/artic...
    99+
    2022-06-06
    Android
  • HTTPS配置如何在Android项目中使用
    本篇文章给大家分享的是有关HTTPS配置如何在Android项目中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android 使用 HTTPS 配置的步骤。1、step配...
    99+
    2023-05-31
    android https roi
  • html.fromhtml方法如何在Android项目中使用
    这篇文章给大家介绍html.fromhtml方法如何在Android项目中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android中html.fromhtml  在android中,有一个容易遗忘的H...
    99+
    2023-05-31
    android html.fromhtml roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作