- 浏览: 674875 次
- 性别:
- 来自: 深圳
最新评论
-
fingerplay:
请问一下,第一份,逻辑树,就是代码里可以操纵的,例如更改lay ...
UIView与CALayer -
ok_lyc:
分享到哪里去了
iPhoneUIFont各种字体 -
lliiqiang:
我的个人理解:wait方法是在java虚拟机层面上在获取对象锁 ...
JAVA多线程同步wait、notify、synchronized -
milixw:
谢谢分享,就在找这个
iphone 推送通知 java 实现 -
wsqwsq000:
你的log4j包不行,上网搜一下:log4j-1.2.16.j ...
iphone 推送通知 java 实现
NDK/JNI02-实例开发流程
Android_NDK 2011-01-12 11:16:01 阅读40 评论0 字号:大中小 订阅
一、下载与配置
1、下载
提供如下Linux版下载地址:
下载好以后,解压到任意目录下
unzip android-ndk-r4-linux-x86.zip
2、简单配置
配置NDKROOT及PATH环境变量
方法1)
export NDKROOT=/usr/local/android-sdk-linux_86/android-ndk-r4
export PATH=$PATH:$NDKROOT
方法2)
vim ~/.profile
#配置NDK环境变量
export NDKROOT=/usr/local/android-sdk-linux_86/android-ndk-r4
export PATH=$PATH:$NDKROOT
保存关闭后执行如下方法使之生效
source ~/.profile
方法3)
vim /etc/profile
如下同2)
二、简单实例配置过程
1、创建工程目录
mkdir -p $NDKROOT/apps/HelloNDK/project
说明:
1)$NDKROOT/apps/HelloNDK --是NDK的工程目录
2)$NDKROOT/apps/HelloNDK/project --是Android的工程目录
2、在Eclipse中创建Android工程
工程Location为:
$NDKROOT/apps/HelloNDK/project
3、创建native方法所在的class
package com.myq.android.HelloNDK;
public class Jni {
public native int getCInt(int x , int y) ;
public native String getCString(String name) ;
}
public native String getCString(String name) ;
}
4、创建com_myq_android_HelloNDK_Jni.h文件
1)重新编译Jni.java文件
拷贝Jni.java到$NDKROOT/HelloNDK/project/bin
#进入NDK根
cd $NDKROOT
#进入bin目录
cd apps/HelloNDK/project/bin/
#拷贝 Jni.java文件
cp apps/HelloNDK/project/src/com/myq/android/HelloNDK/Jni.java cd ./
#编译
javac Jni.java
2)创建Jni.h文件
移动apps/HelloNDK/project/bin/下的Jni.class文件
cd $NDKROOT
cd apps/HelloNDK/project/bin/
mv Jni.class com/myq/android/HelloNDK/
生成Jni.h文件,在bin文件夹位置下执行
javah -jni com.myq.android.HelloNDK.Jni
注:
此时在bin下生成如下文件:com_myq_android_HelloNDK_Jni.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_myq_android_HelloNDK_Jni */
#include <jni.h>
/* Header for class com_myq_android_HelloNDK_Jni */
#ifndef _Included_com_myq_android_HelloNDK_Jni
#define _Included_com_myq_android_HelloNDK_Jni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_myq_android_HelloNDK_Jni
* Method: getCInt
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt
(JNIEnv *, jobject, jint, jint);
#define _Included_com_myq_android_HelloNDK_Jni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_myq_android_HelloNDK_Jni
* Method: getCInt
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt
(JNIEnv *, jobject, jint, jint);
/*
* Class: com_myq_android_HelloNDK_Jni
* Method: getCString
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString
(JNIEnv *, jobject, jstring);
* Class: com_myq_android_HelloNDK_Jni
* Method: getCString
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
}
#endif
#endif
5、在android工程根目录下创建jni文件夹,移动刚才的.h文件至此目录下
mkdir $NDKROOT/apps/HelloNDK/project/jni
注:该jni文件夹主要存放c\c++方面的头文件和源文件及Android.mk文件
移动刚才的.h文件至jni目录下
mv com_myq_android_HelloNDK_Jni.h ../jni/
6、在jni下创建com_myq_android_HelloNDK_Jni.c文件
#include<stdio.h>
#include<stdlib.h>
#include"com_myq_android_HelloNDK_Jni.h"
#include<stdlib.h>
#include"com_myq_android_HelloNDK_Jni.h"
JNIEXPORT jint JNICALL Java_com_myq_android_HelloNDK_Jni_getCInt(JNIEnv *env , jobject thiz , jint x , jint y)
{
return x+y ;
}
{
return x+y ;
}
JNIEXPORT jstring JNICALL Java_com_myq_android_HelloNDK_Jni_getCString(JNIEnv *env , jobject thiz , jstring name)
{
const jchar *str = (*env)->GetStringChars(env,name,JNI_FALSE);
jsize len = (*env)->GetStringLength(env,name) ;
(*env)->NewString(env,str,len) ;
//(*env)->ReleaseStringChars(env,name,str) ;
}
{
const jchar *str = (*env)->GetStringChars(env,name,JNI_FALSE);
jsize len = (*env)->GetStringLength(env,name) ;
(*env)->NewString(env,str,len) ;
//(*env)->ReleaseStringChars(env,name,str) ;
}
7、在jni下创建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := HelloNDK
LOCAL_SRC_FILES := com_myq_android_HelloNDK_Jni.c
LOCAL_SRC_FILES := com_myq_android_HelloNDK_Jni.c
include $(BUILD_SHARED_LIBRARY)
注:相关参数说明自行查询
8、在HelloNDK的工程目录[$NDKROOT/apps/HelloNDK]下创建Application.xml文件
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := HelloNDK
APP_MODULES := HelloNDK
注:
该文件时必须的,否则make无法编译
9、在$NDKROOT下编译生成.so文件
make APP=HelloNDK
编译成功后:
在apps/HelloNDK/project/libs/armeabi下生成libHelloNDK.so
注:
重新编译 make -B APP=HelloNDK
10、创建java文件,调用native方法
package com.myq.android.HelloNDK;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.os.Bundle;
import android.util.Log;
public class HelloNDK extends Activity {
public static final String TAG = "------HelloNDK-------" ;
private Jni mJni ;
static
{
System.loadLibrary("HelloNDK") ;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mJni = new Jni() ;
final String cString = mJni.getCString("myq") ;
final int cInt = mJni.getCInt(1, 2) ;
Log.i(TAG, "cString--" + cString + "--cInt--" + cInt) ;
setContentView(R.layout.main);
}
}
public static final String TAG = "------HelloNDK-------" ;
private Jni mJni ;
static
{
System.loadLibrary("HelloNDK") ;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mJni = new Jni() ;
final String cString = mJni.getCString("myq") ;
final int cInt = mJni.getCInt(1, 2) ;
Log.i(TAG, "cString--" + cString + "--cInt--" + cInt) ;
setContentView(R.layout.main);
}
}
注:
加载库文件
static
{
System.loadLibrary("HelloNDK") ;
}
{
System.loadLibrary("HelloNDK") ;
}
11、在eclipe中运行
发表评论
-
google开放的maps api接口
2012-01-12 22:51 1168google开放的Maps api接口,包括很多版 ... -
iphone中请求对应的Mime type
2011-09-21 10:03 2245Extension MIME type Desc ... -
android前端与java web后台的ssl交互
2011-08-18 17:39 2711android前端与java web后台如何进行ssl交 ... -
android style
2011-07-09 21:47 1407对于能够显示文字的控件(如TextView EditTex ... -
android 定时器
2011-07-09 21:47 2108在Android上常用的定时器有两种,一种是Java.util ... -
android 4大组件介绍
2011-07-09 21:47 1881Android组件 横看成岭侧成峰,远近高低各不同。 -- ... -
view中的getTag何setTag
2011-07-09 21:46 1366View中的setTag(Onbect)表示给View添加一个 ... -
android handler介绍
2011-07-09 21:46 1327/*** * Handler的定义: * 主要接受 ... -
AsyncTask的使用
2011-07-09 21:46 1048本片不多说 直接引用: ... -
Android 调试桥abd
2011-07-09 21:44 1037Android 调试桥(adb)是多种用途的工具,该工具可 ... -
Android 应用程序之间数据共享—ContentProvider
2011-07-09 21:44 1907在Android 应用程序之间数据共享—-ContentRes ... -
Content Provider
2011-07-09 21:44 1118Android程序的主要4部分 ... -
android之ContentResolver与ContentProvider
2011-07-09 21:43 1522android中对数据操作包含有: file, sqlite3 ... -
android contentResolver与contentProvider如何关联在一起的
2011-07-09 21:43 2046看到一篇文章觉得不错,推荐给大家,希望大家喜欢Applicat ... -
android service入门
2011-07-09 21:42 851android SDK提供了Service,用于类似*nix守 ... -
AsyncQueryHandler
2011-07-09 21:42 1340AsyncQueryHandler研究 andr ... -
android下载进度条
2011-07-09 21:41 4109我们今天开始学习的是下载进度的实现。今天的这段代码是网上找的, ... -
android UI设计之TableLayout
2011-07-09 21:41 1214TableLayout和我们平时在网页上见到的Table有所不 ... -
android如何获取后台正在运行的service
2011-07-09 21:40 3988给一段获取正在运行的后台service的代码,如下: ... -
Android之getSystemService
2011-07-09 21:40 1494getSystemService是Android很重要的一个 ...
相关推荐
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例
使用Android Studio + NDK进行JNI开发,博客中有详尽说明,可以参考 http://blog.csdn.net/u014316982/article/details/53081597
//-----类实例------ private native Contact GetObjectClassDemo(Contact p); private native void IsInstanceOfDemo(); private native Contact AllocObjectDemo(); private native Contact NewObjectDemo...
博客:NDK-JNI实战教程(三) 从比Hello World稍复杂点儿的NDK例子说说模板 博客文章链接---------实例代码工程 博客:facebook Fresco框架库源使用基础 博客文章链接---------实例代码工程 博客:浅谈MVP实现...
分步骤描述了android jni如实开发。
android ndk 开发入门小例子。 博客地址http://blog.csdn.net/u014702653/article/details/51861013
android ndk 开发的简单实例
android studio 中 进行 JNI 开发的一个简单实例,入门demo
这是一个简单的android studio中jni编程实例,包括生成.so和.jar方法,并且用test进行验证。
Android Jni调用实例,NDK程序开发的demo。
使用NDK完成Android之JNI编程实例
Android JNI应用实例
基于NDK TOOL的动态库实现,包含JNI调用、动态库的编译。 1、编译本地调用的JAVA类 2、使用javah从JAVA类中转换成相应的头文件(已有genHeader.bat的脚本直接生成,其中的com.ex.sot.NativeDataManage是相应的类,需...
首先需要下载安装ndk,他负责创建so库同你的android代码打包成apk文件。高版本的ndk自带打包工具,所以不需要再安装cygwin了,详情见博客
Android-JNI实Android-JNI实现方式及实例演示_有米分享.doc现方式及实例演示_有米分享.doc
Android JNI应用实例02
这个是通过NDK方式创建一个JNI项目。目的在于让大家了解NDK的开发过程及作用。详细讲解该demo对应的博客为: http://blog.csdn.net/chenliqiang12345678/article/details/50495506
Android NDK 绘图实例,从网上碰到的一个例子,在这里分享下,同时自己做个资源保存
Android 简单的JNI开发实例demo源码
android ndk 代码例子,从 HelloWorld 到java 和c 方法互相调用,学习jni的时候写的demo,例子还是很有代表性的