android图文介绍NDK安装及简单jni demon的实现

简介: (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      android NDK可以用来编译android的native方法,也可以将c和c++的代码编译成.so文件,让android程序运行。 2.NDK安装(linux环境)    (1)下载对应的ndk版本,在shell里输入如下命令          gedit ~/.

(转载请注明出处:http://blog.csdn.net/buptgshengod

1.背景

     android NDK可以用来编译android的native方法,也可以将c和c++的代码编译成.so文件,让android程序运行。

2.NDK安装(linux环境)

   (1)下载对应的ndk版本,在shell里输入如下命令

        

gedit ~/.bashrc

     (2)打开bash文件,添加下载的ndk路径

NDKROOT=/home/CORPUSERS/28852262/android-ndk-r9c
export PATH=$NDKROOT:$PATH

   (3)输入如下命令,然后重启shell

source /etc/profile

   (4)在shell中输入ndk-build,出现如下状态说明安装成功

3.jni第一个demon helloworld

      (1)编写hello-jni.c文件。

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

/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
jstring
Java_com_example_hellojni_HelloJni_aa( JNIEnv* env,
                                                  jobject thiz )
{
#if defined(__arm__)
  #if defined(__ARM_ARCH_7A__)
    #if defined(__ARM_NEON__)
      #define ABI "armeabi-v7a/NEON"
    #else
      #define ABI "armeabi-v7a"
    #endif
  #else
   #define ABI "armeabi"
  #endif
#elif defined(__i386__)
   #define ABI "x86"
#elif defined(__mips__)
   #define ABI "mips"
#else
   #define ABI "unknown"
#endif

    return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");
}

这个c文件实现输出一个string型函数,注意这里

Java_com_example_hellojni_HelloJni_aa
我们创建android应用的时候包和函数命名要和这个对应,否则汇报错:native method is not found。如下图



(2)编写android.mk文件,我会把相关资源上传

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

(3)注意文件夹名要是jni,否则ndk不识别

(4)shell中进入相关路径下面执行

ndk-build
 

(5)将生成的libs文件和已经编号的jni导入工程

(6)看下主程序代码,注意注释

public class HelloJni extends Activity {

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



    tv=(TextView)findViewById(R.id.textView1);

    Button bt2 = (Button)findViewById(R.id.button1);

    bt2.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View v)
      {
          tv.setText(aa());
      }
    });
}

public native String  aa();//native方法,对应c文件Java_com_example_hellojni_HelloJni_aa中的aa


static {

    System.loadLibrary("hello-jni");//注意名字是是libhello-jni.so去掉lib和后缀

}
}

(7)效果

点击按钮:出现一串话



最后把工程上传,我的工程是公司的sdk,所以大家用的时候要换成自己的。lib和jni都是通用的,have fun!


资源下载:http://download.csdn.net/detail/gshengod/7034015


目录
相关文章
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
996 1
|
8月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
970 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
475 1
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
832 2
|
开发工具 Android开发
解决Android Studio编译提示NDK is missing a “platforms“ directory
解决Android Studio编译提示NDK is missing a “platforms“ directory
606 1
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
403 4
|
Oracle Java 关系型数据库
Android studio 安装以及第一个程序
Android studio 安装以及第一个程序
390 0
|
存储 Android开发
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
550 0

热门文章

最新文章