一、下载android的源码 注: 此处源码的下载、配置、编译请自行搜寻。 二、创建相关文件 1、 在/mnt/yqmiao/android_2.2_20100715/development/apps下创建工程目录JniLog mkdir 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 机制,这样才能通过 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小项目合集(经典教程)包含十五个Android开发应用实例
  2. Android(二)数据存储和访问 之文件
  3. Android(安卓)读写Excel文件
  4. android 开发资源
  5. android编译系统分析
  6. android 怎样做SDK
  7. Android基础笔记(一)-快速入门
  8. Android(安卓)之 复习大纲
  9. 如何跟踪调试Android的源码

随机推荐

  1. android里设置图片透明。
  2. Android设置ScrollView滚动到底部和顶部
  3. Android启动流程分析(八) 解析init.rc的a
  4. Android中 RatingBar评分条的使用
  5. Android自定义进度条-带文本(文字进度)的
  6. Android4: Status bar or System UI
  7. android中button设计UI的一个小技巧
  8. Android实现图片轮播切换
  9. Android删除系统自带软件对照表
  10. Android 7.0 之后抓包 unknown 和证书无