一、下载android的源码 注: 此处源码的下载、配置、编译请自行搜寻。   二、创建相关文件 1、 在/mnt/yqmiao/android_2.2_20100715/development/apps下创建工程目录JniLog mkdir JniLog 注: 有些文档的是在/mnt/yqmiao/android_2.2_20100715/development/下创建工程目录的,我之前执行[make xxxx]是成功的,但后来失败了!通过分析源码的核心配置文件Android.xml后放在apps下却是成功的!   注: 摘录Android.xml文件 subdirs += \
       ...               development/apps \        ...
通过以上的Android.xml文件可以看出,如果我们修改Android.xml文件也是可以实现的! eg: subdirs +=\        ...        development\        ...   2、在JniLog下创建JniLog.c文件 #include
#define LOG_TAG "------JniLog Main--------"
#undef LOG
#include
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 机制,这样才能通过 Android logcat 工具看到 log信息。   3、在JniLog下创建Android.mk文件 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \
    JniLog.c LOCAL_C_INCLUDES := \
    $(JNI_H_INCLUDE) LOCAL_SHARED_LIBRARIES := \
    libutils LOCAL_PRELINK_MODULE := false LOCAL_MODULE := libJniLog include $(BUILD_SHARED_LIBRARY)   注: LOCAL_MODULE := libJniLog libJniLog前面加lib是必须的,在加载的时候只需要JniLog eg: 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 remount adb push out/target/product/generic/system/lib/libJniLog.so /system/lib   6、java测试代码 1)本地方法类 package com.myq.android; public class Jni {
 public native void printLog() ;
}   注: 包名必须是 com.myq.android.JniLog 方法名 printLog   2)测试类 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(  3 80): 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下修改hosts文件不起作用(无效)的解决办法
  2. Android中使用手势识别功能
  3. Android(安卓)Handler 异步消息处理机制的妙用 创建强大的图片加
  4. Android源码内部编译过程总结(Make)(转)
  5. (4.1.21.4)Android(安卓)Handler 异步消息处理机制的妙用 创建强大
  6. Android(安卓)学习日志 2 :创建虚拟机,运行第一个Hello Android程
  7. 2011.07.14——— android res与assets的区别
  8. android 自定义进度条颜色
  9. NPM 和webpack 的基础使用

随机推荐

  1. 中国Android开发者可以向全球用户提供付
  2. XBMC Romote:用 Android(安卓)手机控制 X
  3. Android(安卓)STB 编译自定义jar
  4. Android基础入门教程——7.1.2 Android(
  5. 修改android 4.4系统下面的休眠时间,只留
  6. Hbuilder android 在线更新功能 后端获取
  7. 关于获取设备的唯一设备ID,MAC地址 IOS/An
  8. Android(安卓)Studio 导入 so 简明教程:通
  9. Android异步任务处理之Thread线程
  10. Android(安卓)6.0(API 23) 运行时权限