Android NDK开发简单程序分享(Hello Word!)

yizhihongxing

Android NDK开发简单程序分享(Hello Word!)攻略

简介

Android NDK(Native Development Kit)是安卓应用开发中的一个重要工具,它是一种工具集,可以让您以C或C++等本地语言编写部分代码或者本地库,然后将这些代码与Java代码结合,生成可以在Android设备上运行的应用程序。本文将提供一个完整的Android NDK开发环境搭建过程,以及使用Android NDK编写Hello Word程序的步骤解释。

环境搭建

  1. 确保您已经安装了JDK、Android SDK和Android NDK。您可以从Java官方网站(https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html)下载JDK,从安卓官方网站(https://developer.android.com/studio/index.html)下载Android SDK和Android NDK。
  2. 下载安装好CMake,具体步骤可参考(https://blog.csdn.net/m0_47624803/article/details/105402613)。

Hello Word程序编写

进入Android Studio,创建一个新项目,然后按照以下步骤操作:

  1. 首先,您可以通过右键单击项目名称并选择“New > Folder > JNI Folder”,然后选择“Src/main”,创建一个新的JNI目录。这样就可以在项目中编写本地代码。
  2. 下一步,您需要在“Build.gradle”文件的“Settings”节点中设置“ndk”和“cmake”参数。设置后,该文件应如下所示:
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.example.ndktest"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        // 设置“ndk”和“cmake”参数
        ndkVersion '23.0.7123448'
        externalNativeBuild {
            cmake {
                cppFlags ""
                arguments "-DANDROID_STL=c++_shared"
            }
        }
    }

    //在“BuildTypes”节点下添加以下代码
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        // 添加配置项
        externalNativeBuild {
            cmake {
                cppFlags ""
                arguments "-DANDROID_STL=c++_shared"
            }
        }
    }

    // 切换到“External Tools”并单击自定义工具按钮
    externalTools {
        //"cmake"用于指向您的系统中的CMake实例的路径
        cmake {
            path "/Users/<username>/Library/Android/sdk/cmake/<version-number>/bin/cmake"
        }
    }

    //在android节点下添加以下内容以指定ABI构建。
    defaultConfig {
        ......
        ndk {
            abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        }
    }

    //切换到“externalNativeBuild”节点下,添加以下内容。
    externalNativeBuild {
        cmake{
            path "CMakeLists.txt"
        }
    }
}
  1. 接下来,您需要在CMakeLists.txt文件中指定C++源代码文件的路径。该文件位于“Src/main/cpp”下:
cmake_minimum_required(VERSION 3.4.1)

#设置路径以使CMake能够找到我们的源代码
add_library(hello-lib SHARED src/main/cpp/hello-lib.cpp)

# 添加NDK库
find_library(log-lib log)

# 链接NDK库
target_link_libraries(hello-lib ${log-lib})
  1. 创建一个名为“hello-lib.cpp”的新文件,并将以下内容复制到该文件中:
#include <string.h>
#include <jni.h>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_ndktest_MainActivity_stringFromJNI(JNIEnv* env, jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}
  1. 最后,在MainActivity.java文件中调用可由本地代码生成的函数。在下面的代码中,stringFromJNI()方法来自于我们在步骤四中编写的本地代码:
public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("hello-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    //本地方法
    public native String stringFromJNI();
}

示例

假设您按照上述步骤完成了所有设置和代码编写。接下来,我们通过两个示例来说明HelloWord程序的编写过程。

示例1

在MainActivity.java文件中,您需要设内容视图,并在该视图上添加一个名为“sample_text”的TextView。该文件中的示例如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/app_padding">

    <TextView
        android:id="@+id/sample_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="Hello World!" />

</RelativeLayout>

示例2

Android Studio为您生成了一个名为“hello-lib.cpp”的C++源代码文件。以下是一个示例,您可以在其中添加一些本地C++代码:

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

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

注意:此示例用于展示如何将本地C++代码与Java代码一起使用,并不会做很多实际工作。

结论

希望本文能够帮助您了解如何使用Android NDK开发Android应用程序,并为您提供详细的步骤和示例。如果您有任何问题或建议,请随时与我们联系。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android NDK开发简单程序分享(Hello Word!) - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • TabLayout+ViewPager实现切页的示例代码

    TabLayout+ViewPager实现切页的示例代码攻略 1. 添加依赖库 首先,我们需要在项目的build.gradle文件中添加TabLayout和ViewPager的依赖库。在dependencies块中添加以下代码: implementation ‘com.google.android.material:material:1.4.0’ 2. 创建…

    other 2023年8月25日
    00
  • CCS进阶——div的宽度和高度是由什么决定的?

    下面是“CCS进阶——div的宽度和高度是由什么决定的?”的完整攻略,包括基本原理、实现方法和两个示例说明。 基本原理 在 CSS 中,div 元素的宽度和高度是由多个因素决定的,包括: 内容区域的宽度和高度。 边框的宽度和高度。 内边距的宽度和高度。 外边距的宽度和高度。 实现方法 实现 div 元素的宽度和高度可以按照以下步骤进行操作: 设置 div 元…

    other 2023年5月5日
    00
  • js获取本机的外网/广域网ip地址完整源码

    获取本机的外网/广域网IP地址是一个常见的需求,可以通过以下步骤来实现: 使用第三方服务获取IP地址:有一些网站提供了API,可以通过发送HTTP请求获取本机的外网IP地址。其中一个常用的服务是https://api.ipify.org,它返回一个包含IP地址的简单文本响应。 javascript // 使用fetch函数发送HTTP请求获取IP地址 fet…

    other 2023年7月31日
    00
  • Android 有道词典的简单实现方法介绍

    Android 有道词典的简单实现方法介绍 有道词典是一款非常受欢迎的在线翻译工具,下面将详细介绍如何在Android应用中实现一个简单的有道词典。 步骤一:准备工作 首先,你需要在有道智云平台上注册一个开发者账号,并创建一个应用,获取到应用的App Key和App Secret。这些信息将用于访问有道词典的API。 步骤二:添加依赖库 在你的Android…

    other 2023年8月21日
    00
  • Win10快速预览版19624怎么手动下载更新升级?

    如果您想手动下载并安装Windows10快速预览版19624更新,则可以按照以下步骤: 步骤一:获取更新包下载链接 在Microsoft官方网站上,有可用的Windows10最新的insider预览版更新包下载链接。您可以使用这个链接下载更新包。 示例1:如果您要获取与“Win10快速预览版19624”对应的更新包下载链接,可以按照以下步骤操作: 1.1. …

    other 2023年6月27日
    00
  • C/C++语言中的头文件汇总

    C/C++语言中的头文件汇总 头文件是C/C++程序中的重要组成部分,它们包含了程序中所需的函数、变量和类型的声明。在这篇文章中,我们将讨论C/C++语言中的一些常用头文件和它们的作用。 stdio.h stdio.h 是C语言中标准输入/输出头文件,包含了实现输入/输出操作所需的函数和宏。常用的函数包括 printf、scanf、fopen、fclose和…

    other 2023年6月27日
    00
  • vue3封装侧导航文字骨架效果组件

    下面我将为大家详细讲解“vue3封装侧导航文字骨架效果组件”的完整攻略。 什么是侧导航文字骨架效果组件 侧导航文字骨架效果组件是指,在侧边栏导航菜单中,加载菜单项时显示的占位符效果,使用户可以更好地了解页面结构。该组件常用于减轻首屏加载时间而保持较好的用户体验。 组件实现方式 在vue3中,我们可以利用Composition API对组件进行封装。 代码示例…

    other 2023年6月25日
    00
  • 学习javascript文件加载优化

    学习JavaScript文件加载优化 JavaScript 是一种客户端语言,能够实现动态交互效果,并且被广泛使用在网页中。然而,一旦我们引入较多的 JavaScript 文件,网页性能就会受到影响,这时我们就需要学习 JavaScript 文件加载优化的技巧。 优化加载过程 在进行 JavaScript 文件加载优化之前,我们需要先了解浏览器在加载 Jav…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部