一、下载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沉浸状态栏实现、地图多线路规划、Retrofit+RxJava+Jsoup
  2. Android编译系统分析
  3. RenderScript 让你的Android计算速度快的飞上天!
  4. Android(安卓)NDK 入门
  5. Android(安卓)Studio 3.0 新特性
  6. 《Android/OPhone开发完全讲义》连载(4):Android(安卓)SDK中常用命
  7. 修改Android(安卓)Media Scanner的扫描路径
  8. 阿里云OS和Android的"基友“关系
  9. 编译Android内核 For nexus 5 以及绕过Android的反调试

随机推荐

  1. scrollView的fillviewport
  2. Dialog的样式
  3. Android实现圆角照片和圆形照片
  4. android获取NetworkMode
  5. android 音视频录制
  6. Android跳转浏览器打开URL
  7. Android引入外部字体源代码
  8. 安卓shape属性详细介绍
  9. android plugin dsl 部分整理
  10. Android(安卓)Camera框架分析