`
cwh643
  • 浏览: 127713 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Window下使用android NDK开发Android应用-入门篇

阅读更多
原创文章,欢迎转载,转载时务必注明原文地址及作者

PS:新版本r6以上请参照一下方法
最新版本的NDK都是用过一个ndk-build的命令进行编译,通过一个*.mk的文件为编译的makfile文件,进入cygwin开发环境后,进入你们要编译项目的根目录执行ndk-build就可以编译了,它可以自动找到项目子目录中的*.mk文件,很方便。

       对于ndk-build路径配置问题,我的做法是在windows路径配置android NDK的安装目录,cyginw就可以找到,不用配置很多路径。
访问工程目录请使用 cd /cygdriver/e/ ...

一.搭建环境
   1.下载并安装Cygwin,这个安装的过程需要花费一点时间,网上教程一堆,这里就不多说啦。什么不想下载安装那就不必往下看啦。
   2.设置android ndk的环境变量,在你启动Cygwin时的默认路径下寻找.bash_profile文件,如果没有,就添加一个,编辑文件内容,添加下面代码
ANDROID_NDK_ROOT=/cygdriver/e/android/android/android-ndk-1.5_r1
export ANDROID_NDK_ROOT
这里的路径是你的NDK解压路径,任意目录均可以。
   3.重启Cygwin,输入
cd $ANDROID_NDK_ROOT
,呵呵,报错啦,仔细检查你的配置文件吧,配置正确的话就可以成功转到本地的NDK目录下啦
   4.输入
./host-setup.sh
编译安装NDK本地环境
   5.编译例子hello-jni,先拷贝build/out下的host目录及其下文件到ANDROID_NDK_ROOT下的out目录下,输入
make APP=hello-jni
命令编译例子,成功可以在ANDROID_NDK_ROOT/apps/hello-jni/project/libs/armeabi目录下找到一个libhello-jni.so的文件。

二.新建自己的应用
   1.新建Java文件
public class Hello {
	
	public String sayHello() {
		return displayHelloWorld();
	}
	
	private native String displayHelloWorld();

}

   2.编译,并使用Javah命令生成c的文件hello-jni.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_demo_Hello */

#ifndef _Included_com_demo_Hello
#define _Included_com_demo_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_demo_Hello
 * Method:    displayHelloWorld
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_demo_Hello_displayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

   3.新建c文件hello-jni.c实现displayHelloWorld方法
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#include <string.h>
//#include <stdio.h>
#include "hello-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
JNIEXPORT jstring JNICALL Java_com_demo_Hello_displayHelloWorld( JNIEnv* env, jobject thiz )
{
	//printf("Hello  JNI Is Run!\n");
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

   4.把hello-jni.h和hello-jni.c文件拷贝到ANDROID_NDK_ROOT/sources/samples/hello-jni下,运行make APP=hello-jni命令生成libhello-jni.so
   5.在android应用根目录下添加文件夹/libs/armeabi,并拷贝libhello-jni.so文件到此目录下
   6.编写调用程序
public class MainActivity extends Activity {
	
	private static final String LOG_TAG = "MainActivity";
	//private List<ItemDO> items;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String msg = new Hello().sayHello();
        setContentView(R.layout.main);
        TextView messageView = (TextView)findViewById(R.id.message);
        messageView.setText(msg);
    }
    
    
    static {
    	System.loadLibrary("hello-jni");
    }
}
注意这里的System.loadLibrary("hello-jni");library名称是你make时的APP=的名称,跟生成的libhello-jni.so文件名没有任何关系。
哈哈,入门篇先讲到这里吧。赶紧试试吧

参考了javaeye上的NDK教程http://fanth.iteye.com/blog/444815
1
0
分享到:
评论

相关推荐

    android-ndk(android-ndk-r25b-linux.zip)

    在Android应用开发中,NDK扮演着至关重要的角色,它允许开发者使用原生代码(如C和C++)来编写部分应用,以提高性能、利用硬件加速功能或复用现有的C/C++库。 1. **JNI(Java Native Interface)**: JNI是Java...

    android-ndk(android-ndk-r23b-windows.zip)

    NDK是Android应用开发中的一个重要组成部分,它允许开发者使用原生代码(如C、C++)来编写部分应用程序,从而利用底层的硬件性能,提高程序运行效率,尤其是在处理图形计算、物理模拟和游戏引擎等高性能需求的场景下...

    android-ndk(android-ndk-r26b-windows.zip)

    使用“android-ndk-r26b-windows.zip”,开发者需要解压到指定目录,并将其添加到Android Studio的环境变量中,以便在构建过程中使用。同时,Android Studio提供了对NDK的集成支持,可以在IDE内进行NDK相关的开发和...

    android-ndk(android-ndk-r25b-windows.zip)

    结合使用Gradle插件,如CMake或ndk-build,可以方便地集成原生代码到Android Studio项目中。总的来说,Android NDK是一个强大的工具,能够帮助开发者充分利用Android平台的潜力,但同时也需要开发者具备一定的C/C++...

    android-ndk-r20b-windows-x86_64.zip

    对于64位Windows用户来说,"android-ndk-r20b-windows-x86_64.zip"是一个关键资源,它意味着可以直接在Windows环境中搭建本地开发环境,无需担心系统架构问题。解压后的文件包括了所有必要的工具和库,如编译器、...

    android-ndk(android-ndk-r23b-linux.zip)

    在Android应用开发中,NDK扮演着至关重要的角色,它允许开发者使用原生代码(如C和C++)来编写部分应用,以提升性能或利用特定硬件功能。 NDK的主要用途包括: 1. **性能优化**:对于计算密集型任务,如图形处理、...

    android-ndk-r19c-linux-x86_64.zip

    《在Ubuntu 18.04上使用QT5.13构建基于Android NDK r19c的开发环境》 Android Native Development Kit (NDK) 是Google提供的一款工具集,用于在Android平台上进行原生代码(如C/C++)的开发。NDK r19c是其中的一个...

    android-ndk(android-ndk-r26b-darwin.zip)

    Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++原生代码开发...在macOS环境下,"android-ndk-r26b-darwin.zip"为开发者提供了在原生环境中构建和调试Android原生代码的平台。

    android-ndk-r18b-windows-x86_64.zip

    在Android应用开发中,NDK的主要用途包括: 1. **性能优化**:对于计算密集型或图形密集型的应用,如游戏和科学计算,使用NDK可以实现C/C++代码,利用硬件加速功能提高性能。 2. **复用现有库**:如果项目依赖于已...

    android-ndk-r16-windows-x86_64.zip

    android-ndk-r16-windows-x86_64.zip

    android-ndk-r9-windows-x86_64.zip

    Android NDK(Native Development Kit)是Google为Android平台提供的一套工具,允许开发者使用C/C++语言编写应用程序,从而利用原生代码的高性能。本文将深入探讨Android NDK R9这一历史版本,揭示其核心功能、应用...

    android-ndk-r20-linux-x86_64.zip

    在实际应用中,NDK的使用通常分为几个步骤:配置NDK环境,编写C/C++代码,创建Android.mk或CMakeLists.txt构建文件,使用ndk-build或Android Studio的CMake插件进行编译,最后将生成的.so文件打包进APK。 然而,NDK...

    android-ndk-r17c-windows-x86_64.zip

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具集,它允许开发者使用C和C++等低级语言编写部分应用,以提高性能或利用特定硬件功能。"android-ndk-r17c-...

    安卓NDK android-ndk-r12b-windows-x86_64

    可用于安卓 qt开发 安卓NDK android-ndk-r12b-windows-x86_64

    NDK工具android-ndk-r10e-linux-x86_64

    标题中的"android-ndk-r10e-linux-x86_64"表明这是一个特定版本的NDK,即版本号为R10e,针对Linux 64位系统的版本。 **NDK的基本概念与功能:** 1. **本地库开发:**NDK允许开发者使用C/C++编写部分或全部应用代码...

    android-ndk(android-ndk-r25b-darwin.zip)

    `android-ndk-r25b-darwin.zip` 是针对macOS系统的NDK版本,版本号为r25b,包含了一系列用于构建、编译和调试原生代码的工具。 在Android应用开发中,NDK的主要作用和知识点包括: 1. **JNI (Java Native ...

    android-ndk-r18b-linux-x86_64.zip

    android-ndk-r18b-linux-x86_64.zip https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip

    android-ndk-r16b-windows-x86_64.zip

    在Android应用开发中,通常我们使用Java或Kotlin编写大部分代码,但由于这些语言运行在Dalvik或ART虚拟机上,它们的执行效率可能无法满足某些对性能有高要求的场景,比如游戏引擎、图像处理或物理模拟等。...

    android-ndk-r13b-windows-x86_64

    本篇将详细探讨Android NDK R13B在Windows x86_64环境下的应用和特点。 一、NDK概述 NDK是Google为Android平台提供的一个补充性开发套件,与Android SDK协同工作,为开发者提供了在Android应用程序中使用C和C++...

    android-ndk-r10e-linux-x86_64

    Android的ndk包,版本android-ndk-r10e-linux-x86_64,运行下64位操作系统下

Global site tag (gtag.js) - Google Analytics