`
googlelee
  • 浏览: 116075 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android JNI完整调试过程

 
阅读更多
整个JNI的调试过程如下:

1.创建手电筒工程
在工程中加入一个开关手电筒的类,其中将调用lib层的函数声明为native。另外,还要引入c++编译生成的so库,如果编译成的so名为liblight,则引入名称为light。代码示例如下:
package com.flashlight.jni;
public class OnOffFlashlight {
public native void onFlashlight();
public native void offFlashlight();
static{
System.loadLibrary("light");
}
}

2.生成.h文件
在命令行中进入Android工程的bin目录,运行如下命令:
D:\workspace\Rflashlight\bin>javah -classpath . -jni  com.flashlight.jni.OnOffFlashlight
将生成名为“com_flashlight_jni_OnOffFlashlight.h”的文件。
自己编写“com_flashlight_jni_OnOffFlashlight.cpp”实现.h中的函数。手电筒代码范例如下:

#include "com_flashlight_jni_OnOffFlashlight.h"


JNIEXPORT void JNICALL Java_com_flashlight_jni_OnOffFlashlight_onFlashlight
(JNIEnv *, jobject)
{
write_int(TORCH_LED_FILE, 255);
}

JNIEXPORT void JNICALL Java_com_flashlight_jni_OnOffFlashlight_offFlashlight
(JNIEnv *, jobject)
{
  write_int(TORCH_LED_FILE, 0);
}


3.编译c文件
编写Android.mk文件用于编译如上提到的两个c文件,主要是声明要编译的源码文件和将要生成的模块名称。范例如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_SRC_FILES:= \
com_flashlight_jni_OnOffFlashlight.cpp
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := liblight
include $(BUILD_SHARED_LIBRARY)

将c文件和Android.mk放入同一文件夹中,本例放入新建的jni目录,再将jni放入手电筒工程根目录。

4.编写用于编译Android工程的Android.mk
范例如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := flashlight
# LOCAL_SDK_VERSION := current
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

5.将手电筒工程放入源码中编译
将Rflashlight文件夹放入packages/apps/,Rflashlight下有jni、res、src、Android.mk以及AndroidManifest.xml。
输入:
Source /etc/android.conf
./mk g3 r
编译结束后可以在out /target/product /lee/system/lib目录下找到flshlight.so。将其拷出来,在cmd中 运行:adb remount ; adb push flashlight.so /system/lib/ ; 将so文件拷入单板的nand中。

至此jni库已经安装完,可以运行相应的apk了。

6.编译手电筒的整个Android工程
我将Rflashlight放到packages/apps目录下,写了相应的Android.mk文件,内容如下:
# lee
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_MODULE := Rflashlight

include $(BUILD_STATIC_JAVA_LIBRARY)
       
LOCAL_PACKAGE_NAME := Rflashlight

LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)

include $(call all-makefiles-under,$(LOCAL_PATH))


这个文件放到ubuntu上居然有些问题,搞了很久,编译多次。之前几次编译通过了,产生了so文件,但没有生成apk。怀疑是手电筒根目录下的Android.mk没写好。直到现在仍然在编译。
分享到:
评论

相关推荐

    Android JNI 断点调试C++

    2. 在Android Studio中,启用调试模式,选择目标设备或模拟器,确保它支持JNI调试。 调试步骤: 1. 在C++代码中设置断点。 2. 在Android Studio中运行应用,当执行到本地方法时,调试会暂停在C++断点处。 3. 使用...

    [转]好消息,android平台从froyo 2.2开始支持jni单步调试了

    标题中的“[转]好消息,android平台从froyo 2.2开始支持jni单步调试了”揭示了一个重要的更新,即从Android Froyo (2.2)版本开始,开发者可以利用Java Native Interface (JNI)进行单步调试。这是一个重大的进步,...

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    `serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_`这个项目就是关于如何使用JNI来实现Android设备的串口读写的示例。 首先,我们需要了解JNI的概念。JNI是Java平台提供的一种接口,允许Java代码...

    android jni调用demo

    本项目“android jni调用demo”是一个实际操作的例子,它提供了在Android Studio环境中运行的完整流程。 首先,我们需要理解JNI的基本概念。JNI是Java平台的一部分,允许Java代码与其他编程语言(如C/C++)进行通信...

    android jni 屏幕截图 NativeScreenCapture

    10. **调试与测试**:在开发过程中,开发者可能需要使用NDK工具链进行编译和调试。同时,由于涉及到系统级别的操作,测试应在真机上进行,模拟器可能无法完全模拟真实环境。 综上所述,“android jni 屏幕截图 ...

    Android JNI使用demo

    - 在Android系统中,JNI接口是通过NDK(Native Development Kit)提供的,它是一组工具,用于构建和调试本地库。 2. **创建JNI工程**: - 创建一个新的Android Studio项目,选择包含C++支持的模板。 - 在项目的`...

    android jni抛出异常

    5. **日志记录**:当JNI抛出异常时,记录详细的日志信息有助于调试,可以使用`__android_log_print()`函数输出日志。 6. **捕获和处理本地异常**:虽然JNI不直接支持try-catch,但可以通过在本地代码中设置错误标志...

    Android JNI 用C函数写本地库读写文件,底层调用小例子

    同时,`__android_log_print`用于在Android日志系统中输出调试信息。 最后,通过NDK工具链编译C代码为.so动态链接库,然后将.so文件放置到Android项目的`jniLibs`目录下,以便在运行时被Java代码加载。 总结起来,...

    android jni 中文字符传递demo

    描述提到"实现了C语言与java端之间互相传递汉字的功能",这意味着这个示例项目包含了一个完整的解决方案,演示了如何在两端进行正确编码和解码,以确保中文字符在转换过程中不被破坏。通常,这会涉及到Java的`String...

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    Android Studio提供了对JNI的调试支持,可以通过设置断点、查看变量值等来帮助调试。 9. **总结**:这个教程资料“Android--JNI-Device.zip”对于希望深入了解Android硬件驱动开发的开发者来说非常有价值,它将帮助...

    android JNI video工程(surface显示输出)

    在Android平台上,JNI (Java Native Interface) 是一种技术,它允许Java代码和其他语言写的代码进行交互。本项目涉及的是使用JNI和C++来处理视频,尤其是将FFmpeg解码后的视频帧渲染到Android的Surface上,这对于...

    I2CJNI.rar_Android jni_android_android i2c_android i2c通信 JNI_i2c

    4. **实现过程**:创建一个JNI函数库,定义Java层的接口,并在本地代码中实现I2C的初始化、发送数据、接收数据等功能。在Android应用中,通过Java层的接口调用这些本地函数,完成与I2C设备的通信。 5. **开发环境**...

    Android JNI总结

    开发者可以使用 JNI 来实现一些特殊的功能,例如 native 代码的调试、性能优化等。 Android JNI 是一个功能强大且复杂的接口,它提供了多种实现方式和数据结构。开发者可以根据不同的需求和场景选择合适的实现方式...

    android通过JNI访问硬件LED

    - 调试JNI代码通常较为困难,因为需要在设备或模拟器上运行,并可能涉及系统日志(Logcat)和调试器(如NDK-GDB)的使用。 - 性能优化:虽然JNI提供了直接访问硬件的便利,但频繁的JNI调用会增加系统开销,因此应...

    Android jni调试打印char阵列的实例详解

    "Android JNI 调试打印 char 数组的实例详解" Android JNI 调试打印 char 数组的实例详解是 Android 开发中的一种常见需求,特别是在 debug 和测试阶段。在 Android 中,使用 JNI 调用 native 方法时,需要将 char...

    Android JNI日志工具类

    为了简化这个过程,我们可以创建一个特定的日志工具类,就像“Android JNI日志工具类”所描述的那样。 这个工具类的目标是消除每次需要打印日志时都要手动编写`android_print_info`的繁琐工作。通常,`android_...

    android-jni.zip_Android jni_android_jni_jni android

    Android NDK(Native Development Kit)是一套工具,提供了编译、构建、调试本地代码的功能,使得开发者可以在Android应用中使用JNI技术。 八、Android Studio与JNI集成 现代Android开发中,大部分开发者使用...

    Android使用JNI调用Python so解释器

    9. **调试和测试**:在开发过程中,可以使用Android Studio的NDK调试工具,以及Android设备上的logcat来跟踪和调试C/C++代码。 10. **打包与部署**:最后,将生成的.so库文件和Java代码打包到APK中,确保目标设备...

    android_JNI学习(记录文档+参考代码)

    本资源包含了Android JNI的学习文档和参考代码,帮助开发者理解和实践JNI的开发过程。 1. **环境搭建**: 在开始Android JNI开发前,首先需要搭建好开发环境。这包括安装Android Studio,配置NDK(Native ...

Global site tag (gtag.js) - Google Analytics