`
dingran
  • 浏览: 372389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Andorid编译so为什么必须要找接口实现?

 
阅读更多

Andorid编译so为什么必须要找接口实现?

 

      无论是ndk还是源码环境下编译,都不能只提供头文件就行,都需要由编译器去找到具体实现的so才行,so里面没有实现对应的接口都会报错,如:error: undefined reference to 'SSL_library_init'

     

       我以使用openssl为例,做了两个工程分别测试在ndk下编译和源码环境下编译的区别,发现都一个样。那就是必须要找到libcrypt.so和libssl.so才行。这有悖于我们对于so动态库的认知啊!请有识之士告诉我吧。

 

       试验过程:

 

      eclipse中的工程,用ndk编译so的,mk文件中:

     

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= dingran_sotest_test_JniTest.c

LOCAL_MODULE := soTest


include $(BUILD_SHARED_LIBRARY)

 

     对应的报错信息是:test_JniTest.c:14: undefined reference to `SSL_library_init'

 

     如果把工程放到源码环境下编译,需要修改mk文件为:

 

    

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= dingran_sotest_test_JniTest.c

LOCAL_MODULE := soTest

LOCAL_SHARED_LIBRARIES := \
	libutils \
	libstlport \
	libcrypto \
        libssl \

base := $(LOCAL_PATH)

LOCAL_C_INCLUDES := \
	$(base)/../include \
	$(base)/../stbruntime \

include  $(base)/../../stlport/libstlport.mk


LOCAL_LDLIBS :=  -L$(SYSROOT)/usr/lib -llog

LOCAL_PRELINK_MODULE := false

LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

 

      由于引用了

libcrypto \
        libssl \

      所以可以正常编译出来,这两个so都在out/下面的system/lib下。是伴随android的external/openssl/编译出来而存在的,所以我们可以直接用了。如果取消这两个库,那么结果和ndk一样:

 

    error: undefined reference to 'SSL_library_init'

 

    至于用ndk怎么编译使用openssl,那就待我下回做个Demo放放来吧,用的原理是预编译。反正是离不开接口的实现,哎,android真是牛逼,这样有什么好处呢?

 

       提前非要找到实现,这样运行时就安全了?这样岂不是很麻烦。

 

分享到:
评论

相关推荐

    Android下AES加密算法的JNI实现(包含SO文件)

    将AES加密算法用C语言实现并封装成JNI接口供Android调用,包含编译生成的SO库文件,以及Java声明和调用方法的简单例子。希望帮到有需要的朋友,如果觉得不错麻烦给个好评~~!

    编译Android下3DES加密算法的.SO文件及源码

    将C语言编写的3DES加密算法源码编译成Android下可调用的SO库文件,包含JNI源码以及Android MakeFile文件,可以很容易实现按需定制并重新编译成你想要的调用接口。

    android 移植ffmpeg后so库的使用

    1,ffmpeg库在android上的移植。 2,怎么编译FFMPEG库 3,怎么编写JNI 4,接口调用

    kerberos-android-ndk:使用交叉编译的MIT Kerberos库和wolfSSL嵌入式SSL库的示例Android Kerberos应用程序

    对于对在自己的Android NDK应用程序中使用Kerberos库或GSS-API接口感兴趣的Android开发人员来说,这将有所帮助。 默认情况下,此程序包使用预先构建的静态Kerberos和CyaSSL库,以便链接到KerberosApp应用程序的本...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说是一把双刃剑 4 1.3 Android和Linux 4 1.3.1 Linux简介 5 1.3.2 Android和Linux的关系 5 1.4 简析Linux内核 8 ...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说是一把双刃剑 4 1.3 Android和Linux 4 1.3.1 Linux简介 5 1.3.2 Android和Linux的关系 5 1.4 简析Linux内核 8 ...

    android中c++层binder例子

    1. 一个比较完整的c++实现的例子,提供各位同学参考(看辣么多理论不如操作个例子)。...5. 功能是一些比较简单的读取系统信息的接口,shell实现,各个系统有差异有问题注意修改,就是让大家理解一下binder。

    Android Studio JNI 调用demo

    Android Studio两个工程中:一个使用jni可以编译成so,一个app中加载so,调用jni的接口

    android 上的 OCR 源码

    android上使用tesseract进行OCR的源码,对tesseract3.01已近进行编译为.so,并写好JNI接口。源码可以直接在android上运行

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part2

    1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说是一把双刃剑 4 1.3 Android和Linux 4 1.3.1 Linux简介 5 1.3.2 Android和Linux的关系 5 1.4 简析Linux内核 8 ...

    Android移植ffmpeg2.0解码器

    本资源深度裁剪于ffmpeg2.0解码器中的H264视频解码部分,编译成Android可调用的SO文件。附带有Android make文件以及JNI接口C源码文件等,特别适合于android下的视频开发(只适合H264视频格式的解码),可以通过简单...

    Android 代码分析

    1 Android build system 4 1.1 Basic 4 1.2 Executable 6 1.3 Shared Library 9 2 Android Initialization Process 11 3 Android JAVA AIDL Analysis 15 4 Android JAVA Binder IPC System 20 5 Android Media ...

    libjpcap.so

    JPcap移植到Android平台,这是编译后的库文件,在Android项目中可通过JPcap中的Java接口对之进行调用。

    android增量更新

    android 增量更新 bsdiff\bspatch库编译 具体思路参考 http://blog.csdn.net/hmg25/article/details/8100896 jni提供的接口: public native String bsdiff(String oldFilePath, String newFilePath, String ...

    ffmpeg-3.0_compiled_so

    ffmpeg编译后的android版本,能够通过将so加载到本地android应用程序中,通过JNI编程,调用C层接口,实现FFmpeg接口调用,如rtsp,本地编解码,等等

    安卓源码截屏

    在开发截屏应用的时候调用系统接口来截屏,自己单独写了一个jni来调用系统截屏接口 screencap ( frameworks/base/cmds/screencap/screencap.cpp),然后在源代码中编译jni成一个so文件(libscreencapjni.so),可是...

    libp2p-android:p2p live stream,android平台的依赖库

    如果您的项目是一个使用gradle编译的AndroidStudio项目,那么集成是非常简单的。 首先,在buildscript的repositories里面加入mavenCenter,因为我们的库是公开在maven central的 buildscript { repositories { ...

    移动安全系列教学下载共43份.zip

    Android安全应用逆向--23--反编译classes.dex文件.pdf Android安全应用逆向--24--使用Apktool解包并打包.pdf Android安全应用逆向--25--使用IDA静态分析so文件.pdf Android安全应用逆向--26--动态调试Smali源码.pdf ...

    Android增量更新功能(增量升级客户端+服务端)测试正常.rar

    a) 若想改包名:解决方法,重新编译JNI文件生成.so文件(动态链接库) 2. src/com.dodola.patcher/ContantValue 下更改连接服务器的地址 (默认为: http://10.0.2.2:8080/项目名称/访问的setvlet名称) 3. 清单文件中...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: Java本地接口(JNI) Android安全开发基础: Android系统的启动过程分析 Android安全开发基础: 图形界面(UI)和碎片(Fragment)(上) Android安全开发基础: 图形界面(UI)和碎片(Fragment...

Global site tag (gtag.js) - Google Analytics