zoukankan      html  css  js  c++  java
  • 使用NDK c++建立一个Android应用

    使用NDK c++建立一个Android应用

    一.工具

    • ADT(集成了eclipse,cdt,ndk plug-in)
    • NDK (用它来编译c/c++程序)
    • JDK (Java开发包)
    • ANT(eclipse打包插件)

    二.配置环境变量

    • 1.JAVA_HOME=C:Program FilesJavajdk1.7.0_71
    • 2.ANT_HOME=D:apacheant
    • 3.ANDROID_SDK_HOME=D:SDKandroid-sdk
    • 4.NDK_HOME=D:SDKandroid-ndk-r10e

    添加Path变量
    JAVA_HOME%in;%NDK_HOME%;%ANDROID_SDK_HOME%platform-tools;%ANT_HOME%in

    三.环境检查

    打开控制台,依次输入

    • javac –version (检验JDK安装)
    • ant –version (检验ant安装)
    • ndk-build –version (检验NDK安装)
    • adb devices ( 检验android platforms tools安装)

    如果以上命令都是有效命令,安装完成

    四.为Eclipse分别配置SDK和NDK位置

    • Windows->Preferences->Android设置SDK路径
    • Windows->Preferences->Android->NDK设置NDK路径

    五.创建Android应用

    打开eclipse,File->new->Project->Android->Android Application Project 创建Android应用。

    六.让Android工程支持C++编译

    右键单击工程,Android Tools->Add Native Support,在弹出对话框中直接点击finish,此时eclipse会自动在工程文件中创建jni文件,含对应配置文件和源文件

    七.编写JNI及调用代码

    //jni/hellojni.cpp
    
    #include <jni.h>
    
    jstring JniString(JNIEnv* env) {
    	return env->NewStringUTF("Hello,NDK");
    }
    extern "C"
    {
    	JNIEXPORT jstring JNICALL Java_com_example_hellondk_NDKUtils_stringFromJNI(JNIEnv* env,jobject o){
    	return JniString(env);
    }
    }
    
    
    //com.example.hellondk.NDKUtils
    
    package com.example.hellondk;
    
    public class NDKUtils {
    	public static native String  stringFromJNI();
    	static {
    	      System.loadLibrary("hellondk");
    	}
    }
    
    
    //com.example.hellondk.MainActivity
    
    package com.example.hellondk;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		TextView  textView01 = (TextView)findViewById(R.id.textView01);
    		textView01.setText(NDKUtils.stringFromJNI());
    	}
    }
    
    

    八.编译生成so

    • 1.通过Eclipse编译
      右键单击工程进行Clean Project,然后再执行Build Project,即可在libs目录下看到生成的so文件
    • 2.也可以通过命令行编译(定位到jni目录下),执行命令“ndk-build clean”进行清理,执行“ndk-build”进行编译

    九.编译支持多架构

    • 在jni目录下创建Application.mk文件
      配置 APP_ABI := all 重新编译,即可在libs目录下看到编译生成所有平台so
    • 也可以指定需编译支持的架构平台
      APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64

    如果你的工程没有Application.mk文件,则系统会用默认的,$(NDK_ROOT)/build/core/default-application.mk

    十.本示例代码

    附:参考资料

  • 相关阅读:
    SQL常规查询详解
    WEBGL学习【二】平面图形
    WEBGL学习【一】初识WEBGL
    VS2008集成QT的OpenGL开发(实现二维图形的旋转)
    Window文件路径
    字符串转DateTime
    字符串连接
    String.Split分隔字符串
    使用对象初始值设定项初始化
    表达式树
  • 原文地址:https://www.cnblogs.com/huligong1234/p/5469932.html
Copyright © 2011-2022 走看看