Android(安卓)studio3.6.3NDK环境配置
#标题:Android Studio 3.6.3 搭建NDK环境,并新建工程
=
背景:本人初次学习Android studio 上搭建NDK环境,按照很多博客方法搭建,最终不能生成.so文件,搞了整整一个下午,终于看到一篇博客,是在Android studio3.4平台搭建,按照该方法尝试成功。因此,写该博客记录一下。参考博文:https://www.cnblogs.com/xujunjia/p/11470622.html
注意:Android studio 得版本不同,NDK环境配置方式不同,因此在学习时一定确认自己得平台版本。该博文得平台为Android studio 3.6.3.
下面为正文,搭建NDK和创建工程得方式和参考博文基本一致,为了巩固一下流程及注意事项,在这里重新梳理一下。
第一步:打开Android studio平台,点击工具栏“SDKManager”按钮,选择“Android SDK”选项->“SDK Tools”标签,选中“LLDB”(用于JNI代码调试)、“CMake”(编译jni程序,生成.so文件)、“NDK”(NDK环境)。点击“OK”,开始下载。
注:下载文件到SDK根目录。我得路径为:E:\install\android-sdk
第二步:配置NDK。选择“FILe”->“Project Stucture”->“SDK Location”,“AndroidNDK Location”选择刚刚下载“ndk-bundle”路径。点击“Apply”按钮,点击“OK”。
此时查看配置文件“local.properties”中自动生成NDK配置路径。即NDK配置完成。
第三步:新建工程。选择“File”->“New”->"New Project"选择“***Native C++”模板。***依次“next”、“finish”,工程创建成功。新创建得工程中新增cpp文件夹,包含CMakeLists.txt及.cpp文件,说明该项目包含有C++编译环境。
同时,工程报错Caused by: org.gradle.api.InvalidUserDataException:
NDK not configured. Download it with SDK manager. Preferred NDK version is
‘20.0.5594570’. Log:
E:\project\ndk\test\MyApplication\app.cxx\ndk_locator_record.json
说明该工程无NDK环境,按照上述NDK配置方法,配置NDK环境。配置好环境后,工程目录新增.cxx文件夹,打开“ndk_locator_record.json”文件,可以看到NDK配置路径。说明ndk环境配置成功。
第四步:编写代码,生成.so文件。
1、在工程下新建类
选择提示信息,在native-lib.cpp文件中自动生成C++方法接口,补全实现方法。
#include #include extern "C" JNIEXPORT jstring JNICALLJava_com_example_myapplication_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello = "Hello from C++";return env->NewStringUTF(hello.c_str());}extern "C"JNIEXPORT jstring JNICALLJava_com_example_myapplication_myjni_getHelloWord(JNIEnv *env, jobject thiz) {return env -> NewStringUTF("Hello every,this is my first jniproject");}
2、生成.h文件 (1)编译工程,在build路径下生成myjni类 …\build\intermediates\javac\debug\classes\com\example\myapplication\myjni.class
在Android studio控制台Terminal 定位到***main文件夹(定位到哪里生成得jni文件就在哪个路径)***下输入命令
javah -d jni -classpath classes路径 包名.类名,生成jni文件夹,生成.h文件。
此时,main文件夹下面新增“jni”文件夹包含.h文件。
3、.cpp文件夹添加.h文件得引用
#include #include #include "../jni/com_example_myapplication_myjni.h"extern "C" JNIEXPORT jstring JNICALLJava_com_example_myapplication_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());}extern "C"JNIEXPORT jstring JNICALLJava_com_example_myapplication_myjni_getHelloWord(JNIEnv *env, jobject thiz) { return env -> NewStringUTF("Hello every,this is my first jni project");}
4、CMakeLists.txt文件配置
在这里插入代码片# For more information about using CMake with Android Studio, read the# documentation: https://d.android.com/studio/projects/add-native-code.html# Sets the minimum version of CMake required to build the native library.cmake_minimum_required(VERSION 3.4.1)# Creates and names a library, sets it as either STATIC# or SHARED, and provides the relative paths to its source code.# You can define multiple libraries, and CMake builds them for you.# Gradle automatically packages shared libraries with your APK.add_library( # Sets the name of the library.(生成.so文件名) firstjni # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s)(生成.so对应得.cpp文件). native-lib.cpp )# Searches for a specified prebuilt library and stores the path as a# variable. Because CMake includes system libraries in the search path by# default, you only need to specify the name of the public NDK library# you want to add. CMake verifies that the library exists before# completing its build.find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log )# Specifies libraries CMake should link to your target library. You# can link multiple libraries, such as libraries you define in this# build script, prebuilt third-party libraries, or system libraries.target_link_libraries( # Specifies the target library(生成.so文件得文件名). firstjni # Links the target library to the log library # included in the NDK. ${log-lib} )
5、新建Android调用.so文件。
package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity { // Used to load the 'native-lib' library on application startup. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call to a native method TextView tv = findViewById(R.id.sample_text); tv.setText(new myjni().getHelloWord()); }}
6、模拟器编译。成功。
以上为Androidstudio3.6.3平台搭建NDK及创建native工程得全部内容。第一次写博文内容可能有点乱,请包含。下一边篇介绍在原有Android工程得基础上添加NDK 环境,编译nativity程序。
git地址:https://github.com/wildlily1989/androidndk
更多相关文章
- Android对第三方类库运行时加载
- Cocos2d-x for Android(2)--编译和新建工程
- android 按键映射***.kl文件中的WAKE和WAKE_DROPPED的定义
- Android源码分析之Framework的MediaPlayer
- Android(安卓)SDK Manager:failed to install
- Android(安卓)JNI 编译正确 但是提示程序有错误无法运行 而且还
- Android(安卓)Studio编译运行时 Local path doesn't exist.
- Android使用外部字体
- Android(安卓)Studio集成OpenCV