Android NDK开发简单程序分享(Hello Word!)攻略
简介
Android NDK(Native Development Kit)是安卓应用开发中的一个重要工具,它是一种工具集,可以让您以C或C++等本地语言编写部分代码或者本地库,然后将这些代码与Java代码结合,生成可以在Android设备上运行的应用程序。本文将提供一个完整的Android NDK开发环境搭建过程,以及使用Android NDK编写Hello Word程序的步骤解释。
环境搭建
- 确保您已经安装了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。
- 下载安装好CMake,具体步骤可参考(https://blog.csdn.net/m0_47624803/article/details/105402613)。
Hello Word程序编写
进入Android Studio,创建一个新项目,然后按照以下步骤操作:
- 首先,您可以通过右键单击项目名称并选择“New > Folder > JNI Folder”,然后选择“Src/main”,创建一个新的JNI目录。这样就可以在项目中编写本地代码。
- 下一步,您需要在“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"
}
}
}
- 接下来,您需要在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})
- 创建一个名为“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());
}
- 最后,在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技术站