一、下载android的源码注:此处源码的下载、配置、编译请自行搜寻。二、创建相关文件1、在/mnt/yqmiao/android_2.2_20100715/development/apps下创建工程目录JniLogmkdir JniLog注:有些文档的是在/mnt/yqmiao/android_2.2_20100715/development/下创建工程目录的,我之前执行[makexxxx]是成功的,但后来失败了!通过分析源码的核心配置文件Android.xml后放在apps下却是成功的!注:摘录Android.xml文件subdirs += \
... development/apps \ ...
通过以上的Android.xml文件可以看出,如果我们修改Android.xml文件也是可以实现的!eg:subdirs +=\ ... development\ ...2、在JniLog下创建JniLog.c文件#include<jni.h>
#define LOG_TAG "------JniLog Main--------"
#undef LOG
#include<utils/Log.h>
JNIEXPORT void JNICALL Java_com_myq_android_Jni_printLog(JNIEnv * env, jobject jobj)
{
LOGD("Android Jni Log test !\n");
}注:LOGD#define LOG_TAG "xxx"打印log的方式采用了Android所提供的LOG机制,这样才能通过Androidlogcat工具看到log信息。3、在JniLog下创建Android.mk文件LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \
JniLog.cLOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE)LOCAL_SHARED_LIBRARIES := \
libutilsLOCAL_PRELINK_MODULE := falseLOCAL_MODULE := libJniLoginclude $(BUILD_SHARED_LIBRARY)注:LOCAL_MODULE := libJniLoglibJniLog前面加lib是必须的,在加载的时候只需要JniLogeg:static
{
System.loadLibrary("JniLog") ;
}4、到android源代码的根目录下执行make libJniLog输出如下信息:target thumb C: libJniLog <= development/apps/JniLog/JniLog.c
target SharedLib: libJniLog (out/target/product/generic/obj/SHARED_LIBRARIES/libJniLog_intermediates/LINKED/libJniLog.so)
target Non-prelinked: libJniLog (out/target/product/generic/symbols/system/lib/libJniLog.so)
target Strip: libJniLog (out/target/product/generic/obj/lib/libJniLog.so)
Install: out/target/product/generic/system/lib/libJniLog.so
可以看出:成功make后生成out/target/product/generic/system/lib/libJniLog.so文件
那么libJniLog.so如何使用呢?5、libJniLog.so文件使用1)方法一在Android工程根目录下创建目录libs/armeabi,然后将此文件拷入2)方法二启动Emulator后adb remountadb push out/target/product/generic/system/lib/libJniLog.so /system/lib6、java测试代码1)本地方法类package com.myq.android;public class Jni {
public native void printLog() ;
}注:包名必须是 com.myq.android.JniLog方法名 printLog2)测试类package com.myq.android.jni;import android.app.Activity;
import android.os.Bundle;
import com.myq.android.Jni;public class Main extends Activity {

private Jni mJniLog ;

static
{
System.loadLibrary("JniLog") ;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

this.mJniLog = new Jni() ;

this.mJniLog.printLog() ;

}
}三、运行adb logcat如下结果:D/dalvikvm( 380): No JNI_OnLoad found in /data/data/com.myq.android.jni/lib/libJniLog.so 0x43e16a28, skipping init
D/------JniLog Main--------( 380): Android Jni Log test !
I/ActivityManager( 61): Displayed activity com.myq.android.jni/.Main: 1288 ms (total 1288 ms)
说明:我是将libJniLog.so拷贝到工程目录/libs/armeabi下使用的四、重点强调1、目前我是必须放在android的源码下make的,如果单纯的放在NDK里,会报错!究其原因是有关于Log方面的!2、有关于libJniLog.so文件Android.mk文件中LOCAL_MODULE := libJniLog在程序中加载时,如下使用方法:static
{
System.loadLibrary("JniLog") ;//前面没有lib啊
}
3、有关libJniLog.so文件的使用方法1)放在设备的/system/lib 下2)放在 工程目录/libs/armeabi 下五、附件说明附件中是我的:1、Jni源码 --可以解压后放到$Android_Src_Root/development/apps下2、Client测试源码 --用Eclipse直接运行,我用的是Android2.2版本的

更多相关文章

  1. android沉浸状态栏实现、地图多线路规划、Retrofit+RxJava+Jsoup
  2. android中编译资源文件的相关问题
  3. Android 神兵利器Dagger2使用详解(二)Module&Component源码分析
  4. 在Eclipse中导入android sdk源码
  5. 写TextView的Selector了解到的android读取xml文件的几点规则
  6. android私有目录直接读取
  7. Android基础知识之Manifest文件的组织结构

随机推荐

  1. View类的XML属性、相关方法及说明
  2. Android(安卓)仿淘宝选中商品不同尺寸的
  3. [Android]Android FTP Server
  4. android fragment ontouch 事件
  5. 一次偶然机遇找到一个不错的关于Android
  6. Android锁屏 DevicePolicyManager介绍
  7. [Android] 如何查看当前分支
  8. Android:interpolator用法
  9. Android Battery 架构
  10. android全屏去掉title栏的多种实现方法