`
VIP庚
  • 浏览: 223890 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在Android源码下编译jni所需要知道的事~

 
阅读更多
以下只是自己的一些总结,欢迎讨论

通过NDK编译jni网上有很多例子,在这我只总结在Android源码下编译

1、android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK编译会自动给添加lib,即使Android.mk文件里面LOCAL_MODULE :=名字前面没有lib,NDK也会自动给你添加lib. 所以NDK编译时Android.mk文件编译出来的so包名字可以加lib也可不加,但源码下编译必须加


2、系统应用和用户应用的区别

   在package/app下的工程 编译后生成的apk都会在system/app下 将系统 烧录到手机后 这些apk都会作为系统应用,系统应用所使用到的.so库全部在system/lib下面,若没有则会出错。这就是为什么源码下编译jni生成的库会放在out/target/product/xxxxxxxx_xx_m0/system/lib
   用户应用会默认到应用的data/data目录的lib文件夹下找.so,如果找不到就会报错误。当前前提是你的系统system/lib下没有同样的so文件.


3、adb push 与 adb install 区别

   adb push 能够指定安装目录。比如执行"adb push xxx.apk system/app" 后,xxx.apk被安装到了system/app目录下。 这时候就是系统应用
   adb install 用此命令安装的软件位于 data/app 目录,则为user application。


4、当我们修改系统应用中的jni文件,你刷机后,系统的system/lib下就有你需要的so文件了。如果你不想刷机,你也可以通过adb push *.so \system\lib的方式,将*.so放到system\lib下,以供调用,因为不刷机系统中的system/lib下并没有刚才生成的.so


5、如果我们没有jni文件只有.so的话,系统应用因为需要在system/lib下调用.so,所有我们就需要在编译的时候将这个.so文件预置到out/target/product/xxxxxxxx_xx_m0/system/lib中
include $(CLEAR_VARS)
LOCAL_MODULE := libfp_gf_mp
LOCAL_SRC_FILES := ../libs/arm64-v8a/libfp_gf_mp.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_PROPRIETARY_MODULE := true
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(BUILD_PREBUILT)

6、直接使用.so 库 步骤
   1、第三方的so文件或者别人编译好的so文件,你可以直接放到 libs/armeabi 下

   2、在主文件夹的Android.mk中加上依赖    LOCAL_JNI_SHARED_LIBRARIES :=      libuserbookpatcher_jni

   3 、如果是系统应用则要在jni的Android.mk中将.so文件预置到system/lib中

   注:在程序中用jni文件生成.so不用进行预置,因为会直接生成到里面system/lib中  但是主文件夹的Android.mk中加上依赖  LOCAL_JNI_SHARED_LIBRARIES := libuserbookpatcher_jni


7、在工程目录的Android.mk中 最后加上
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
会将当前工程目录所有子目录中的Android.mk进行编译

1
1
分享到:
评论

相关推荐

    android源码下编译jni示例项目代码

    Android源码下编译JNI(Java Native Interface)示例项目是一种深入理解Android系统与本地C/C++代码交互机制的关键实践。JNI是Java平台提供的一种接口,允许Java代码和其他语言写的代码进行交互。在这个示例项目中,...

    Android 4.4.2 动态添加JNI库方法记录 (二 app应用层)源码

    本文将深入探讨在Android 4.4.2版本中如何在应用程序层动态添加JNI库的方法,这对于那些希望在运行时加载特定硬件平台的原生库或避免在编译时静态链接所有可能的库的开发者来说非常有用。 首先,让我们理解JNI的...

    Android 源码编译的jar包

    在Android开发中,源码编译的jar包是开发者深入理解系统运作、定制化系统或者进行二次开发的重要工具。本文将详细阐述如何编译Android源码以生成`classes.jar`,以及这个过程中的关键知识点。 首先,让我们了解`...

    Android 下编译ffmpeg源码

    本篇文章将详细阐述如何在Android环境下利用JNI接口编译FFmpeg源码,创建一个可使用的本地库。 首先,我们需要了解Android NDK(Native Development Kit),它是Google提供的一个工具集,允许开发者在C或C++中编写...

    zbar android源码编译

    首先,我们来看标题“zbar android源码编译”。这意味着我们要把ZBar的源代码转换为适用于Android平台的库。这通常涉及到Android Native Development Kit (NDK)的使用,NDK是Google提供的一套工具,允许开发者在C/...

    ceres2.0.0编译Android的jni文件

    首先,你需要确保已经安装了Android NDK,这是在Android项目中使用C++代码所必需的。NDK提供了一个交叉编译环境,允许我们在本地机器上构建针对Android平台的原生代码。 接下来,我们需要下载Ceres Solver的源代码...

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    在Android平台上进行硬件交互,例如串口通信,通常需要借助JNI(Java Native Interface)技术,因为Android的Dalvik/ART虚拟机不直接支持底层硬件访问。`serial_jni_largestgle_Androidjni_Android串口操作JNI代码_...

    android中用ndk编译c并用jni调用的demo源码

    这个“android中用ndk编译c并用jni调用的demo源码”提供了实践NDK和JNI集成的实例,帮助我们深入理解它们的工作原理和使用方法。 首先,NDK是Android开发的一个组成部分,它允许开发者使用C、C++语言编写部分应用...

    jni.zip jni编译jni下载

    JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地代码集成。 在描述中提到的`jni.h`和`jni_md.h`是JNI编程中必不可少的头文件。`jni.h`包含了JNI接口的...

    Android4.0.3 Gallery JNI源码

    在这个"Android4.0.3 Gallery JNI源码"中,我们可以深入学习到如何在Android的相册应用(Gallery)中应用JNI技术。 Gallery应用是Android系统中用于查看和管理图片的原生应用。在Android 4.0.3版本中,Gallery应用...

    Android JNI示例代码

    在Android项目中,通常会创建一个`jni`目录,然后在`Android.mk`或`CMakeLists.txt`文件中配置编译规则。 5. **链接库**:将生成的.so文件放入Android项目的`jniLibs`目录下,对应不同的ABI(armeabi、armeabi-v7a...

    Android13 增加 APP->JNI ->HAL

    在Android系统中,APP(应用程序)与硬件交互通常通过JNI(Java Native Interface)和HAL(Hardware Abstraction Layer)层来实现。随着Android13的发布,这个交互过程得到了进一步优化和增强,使得APP能更高效、...

    Android Studio JNI 调用demo

    本示例"Android Studio JNI 调用demo"将展示如何在Android Studio中创建、编译JNI代码,并在Android应用中加载和调用本地库(SO文件)。 1. **JNI基础知识** JNI是Java平台的标准组成部分,它定义了一组API,让...

    Android源码编译make的错误处理

    在进行Android源码编译的过程中,可能会遇到各种各样的错误。本文主要针对在Linux环境下编译Android 4.0.1版本源码时遇到的一些典型问题,提供详细的解决方案。 #### 二、编译环境 - **Android编译版本**:...

    2023-06-16 Android Studio 使用CMakeList编译JNI ,源码

    在2023年,Android Studio的更新版本中,支持使用CMakeLists.txt文件来编译JNI(Java Native Interface)代码,这使得原生库的管理变得更加方便。本教程将详细介绍如何在Android Studio中使用CMakeLists来构建和编译...

    android studio jni demo

    Android Studio JNI Demo是一个关于在Android开发环境中使用Java Native Interface(JNI)的实例教程。JNI是Android平台中用于在Java代码和本地C/C++代码之间建立桥梁的技术,它允许开发者利用C/C++的强大性能来处理...

    Android studio NDK,JNI开发

    在Android Studio中集成NDK,首先需要在项目级`build.gradle`文件中添加对NDK的支持,通过设置`ndkVersion`来指定NDK版本。然后,更新项目的Gradle插件和Gradle版本,以确保兼容性。在`app`模块的`build.gradle`中...

    Android应用源码串口通信(JNI)例子.zip

    该压缩包文件“Android应用源码串口通信(JNI)例子.zip”主要包含了一个使用JNI技术在Android平台上实现串口通信的应用示例。首先,我们需要理解Android应用开发的基础,它是基于Java语言,但为了实现一些底层操作...

    android ndk下编译的live555源码(新版)

    在Android系统中,由于原生的Java API无法直接处理这些底层的流媒体协议,因此需要借助于NDK(Native Development Kit)来实现C或C++代码的编译,将Live555移植到Android平台。 **关于Live555:** Live555是一个...

Global site tag (gtag.js) - Google Analytics