Android JNI 调用非JNI规范的so文件

请问Android中可以使用JNI调用非JNI规范纯C函数编译出的so文件吗

我使用的是针对特殊平台产生的非JNI规范的so文件,在Android官网看到谷歌采用了一种新的make方式,通过Cmake和CMakeLists.txt来链接编译
我看到官方的源码谷歌官方示例直接放在默认的libry目录下,我想让他在自己的目录下找,但是最新的这种CMake方式,不知道so文件和头文件的目录应该怎么建立。谷歌官方NDK

 add_library( iconv
             SHARED
             IMPORTED )
set_target_properties( # Specifies the target library.
                       iconv

                       # Specifies the parameter you want to define.
                       PROPERTIES IMPORTED_LOCATION

                       # Provides the path to the library you want to import.
                       /libs/src/armeabi/libiconv.so)
#include_directories( imported-lib/src/include/ )

target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       iconv ${log-lib} )

但是Make时一直报错,显示iconv.so needed by native-lib.so ; missing or no known rule to make it

1个回答

不推荐这么做,因为android是用来在手机上运行的,但是手机上的cpu不像pc,它指令集各不相同,用c编译出的so文件只能针对特定的cpu指令集,在程序部署的时候存在兼容性的问题。建议你用java改写。

five0918
发条毛虫 老师,您看我这边无法make是什么问题,具体信息我又补充了下
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android NDK调用不符合jni规范的so文件
我们在使用Android静态加载so库的时候,一般都需要这个so库是符合jni命名规范的,像这样: Java_全类名_方法名 但是可能会遇到一些比较特殊的情况,同事只给了你一个so库,这个so库并不是用的jni命名,除此之外,他还给了你一个so库中函数的头文件,这时候我们就需要自己再次包装这个so库了。 建立java文件 这里建立的java文件命名可以是自定义的,而不需要遵守某...
jni调用so文件问题
[code=Java] public class CplusGraphics rn staticrn System.out.println("方法被调用之前--------------");rn System.loadLibrary("ShapeRead");rn System.out.println("方法被调用--------------");rn rn public static native int GetShpType(); rn [/code]rnrn[code=C/C++] /* DO NOT EDIT THIS FILE - it is machine generated */rn #include rn /* Header for class com_graphics_base_CplusGraphics */rnrn #ifndef _Included_com_graphics_base_CplusGraphicsrn #define _Included_com_graphics_base_CplusGraphicsrn #ifdef __cplusplusrn extern "C" rn #endifrn /*rn * Class: com_graphics_base_CplusGraphicsrn * Method: GetShpTypern * Signature: ()Irn */rn JNIEXPORT jint JNICALL Java_com_graphics_base_CplusGraphics_GetShpTypern (JNIEnv *, jobject);rnrn #ifdef __cplusplusrn rn #endifrn #endif[/code]rn[code=C/C++] #include "com_graphics_base_CplusGraphics.h"rn #include rnrn #ifndef _Included_com_fileText_fileReadrn #define _Included_com_fileText_fileReadrn #ifdef __cplusplusrnrn extern "C" rn #endifrn //jobject arraylist;rnrn JNIEXPORT jint JNICALL Java_com_graphics_base_CplusGraphics_GetShpTypern (JNIEnv *env, jobject obj)rnrn /*rn * Class: CplusGraphicsrn * Method: SetShpTypern * Signature: (I)Vrn */rn rn int i = 100;rn jint type = i;rn return type;rn rnrn #ifdef __cplusplusrn rn #endifrn #endifrn[/code]rnrnrn //其他类里面调用rn System.out.println(CplusGraphics.GetShpType());rnrnrn然后编译没问题,android模拟器里面运行程序,屏幕会卡住。rn而rnSystem.out.println("方法被调用之前--------------");rn System.loadLibrary("ShapeRead");rn System.out.println("方法被调用--------------");rn中只有第一句输出了。就卡在第二句java语句上了。 求各位大大帮忙看看哪里错了。rnrn[img=http://www.eoeandroid.com/data/attachment/forum/201107/09/200906p8mq2xcz989mlnlp.jpg][/img]
Android Jni之编写so文件
开发中我们在集成第三方的时候经常用到一些so文件等,但这个so文件是如何编写的?并且我们为什么要用so文件?接下来我们就慢慢谈论一下这两个问题。     我们为什么要用so文件? 一些基础的概念就不说了:首先我们知道so文件中有我们需要的方法,我们可以直接调用,说明对我们开发方便。但是我们既然用起来方便,我们为什么不直接写成java类,供我们直接调用呢?原因有两个:1、so文件不太容易逆向(也...
Android之so文件、JNI和NDK
Android之so文件、JNI和NDK
Android Studio 调用写好的SO文件(JNI)
package org.ccser.warning; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import org.w3c.dom.Text; /** * Created by Administrator o
android jni调用jni 方法
在android中使用jni,在jni中调用jni里面的方法
Android Eclipse JNI 调用 so文件加载问题
Android Eclipse JNI 调用 so文件加载问题
安卓jni之so文件打包和调用
详情点击我的github 如果有帮助到您,请给个star
Android JNI学习笔记——so文件动态加载
Android中对于so的加载提供了两个方法。 System.loadLibrary("libName"); System.load("pathName"); /** * See {@link Runtime#load}. */ public static void load(String pathName) { Runtime.getRuntime().load(path...
android jni ndk so文件的使用
android jni javame ndk so 制作so文件 一个完整的例子 一份完整的文档 花费哥 3 小时整理
JNI so文件生成,和jni打开设备节点
生成jni 高用的c的so文件,并通过java调用该接口,实现能/dev/下的设备驱动的操作
jni文件编译成.so文件
1、jni文件在编译成.so文件的时候,必须首先下载ndk 2、配置好ndk的环境变量 3、进入jni文件以后,点击shift+鼠标右键,显示黑窗口。输入命令ndk_build即可
JNI动态加载so文件
最近在工作中遇到一个问题,就是一些c/c++工程师写好的代码要移植到移动端使用,但是这些函数本身不可能符合JNI规范,打包出来的so动态依赖库是没办法直接调用的。所以还是要写jni来动态加载so文件,把他们桥接起来,Jni怎么写这里就不说了,在c/c++文件里#include 这个头文件,写个函数指针,利用dlopen()函数就可以实现动态加载so文件。这里有如下几点心得体会: ①打包成
Android JNI专题 02 第一个JNI调用
咨询QQ: 347181469. 本课程适合中,从事音视频,网络通讯开发的学员。实战案例可用于 音视频处理,无人机,安防,直播等所有音视频领域。课程从Linux音视频采集,到TCP/IP UDP Socket服务器,客户端编程, 如何去定义网络通讯私有协议,x264,FFmpeg编解码,OpenGL ES渲染视频。OpenAL播放音频。到pcm实时转AAC,到H.264+AAC合成mp4. 整个过程,涵盖iOS,Android ,Mac 嵌入式Linux音视频相关绝大多数实用场景。以及Posix编程接口,C C++ Qt,FFmpeg跨平台开发,iOS,Android,Mac,linux,桌面软件都不再是障碍。让学员能够,融汇贯通掌握音视频领域相关知识,从事音视频相关职业,年薪轻松三四十万不是梦。 付费学员加入QQ群,可获得1~3年的专业解答,周六晚8:00 ~10:00 QQ群内部直播答疑, 以及就业指导,项目练习等服务.rn
android jni调用静态库
我将libcurl编译成静态库-libcurl.a。现在我向在jni中调用libcurl.a中的方法。请问如何实现?rnJNI C代码:rn#include rn#include rn#include rn#include "curl/curl.h"rnrnJNIEXPORT jint JNICALL Java_com_curljni_curljni_curjni(JNIEnv *env, jobject this)rnrn CURL *curl;rn curl = curl_easy_init();rn if(curl) rn curl_easy_cleanup(curl);rn return 1;rn rn return 0;rnrnrn#MK文件:静态库在local_path目录rnLOCAL_PATH:= $(call my-dir)rnrninclude $(CLEAR_VARS)rnrn#LOCAL_C_INCLUDES := $(LOCAL_PATH)rn rnLOCAL_MODULE := curjnirnrnLOCAL_SRC_FILES := curjni.crnrnrn#LOCAL_LDFLAGS = $(LOCAL_PATH)/libcurl.arnLOCAL_LDLIBS := -lz -llog -L$(LOCAL_PATH)rnrninclude $(BUILD_SHARED_LIBRARY)rnrn编译错误提示:rn$ make APP=curljni2 -BrnAndroid NDK: Building for application 'curljni2'rnCompile thumb : curjni <= apps/curljni2/project/jni/curjni.crnSharedLibrary : libcurjni.sornout/apps/curljni2//objs/curjni/curjni.o: In function `Java_com_curljni_curljni_crnurjni':rnapps/curljni2/project/jni/curjni.c:13: undefined reference to `curl_easy_init'rnapps/curljni2/project/jni/curjni.c:21: undefined reference to `curl_easy_cleanuprn'rncollect2: ld returned 1 exit statusrnmake: *** [out/apps/curljni2//libcurjni.so] Error 1rnrnAdministrator@Luye /cygdrive/D/NDKrn
Android JNI的调用过程
1)安装和下载Cygwin,下载 Android NDK   2)在ndk项目中JNI接口的设计   3)使用C/C++实现本地方法   4)JNI生成动态链接库.so文件   5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可
【android jni调用注意事项】
由于工作需要,最近又要用到NDK开发,java层通过jni层去调用c层代码。再次总结一下几点注意事项。希望自己以后不要重蹈覆辙。也希望对大家有所帮助,哈哈!话不多说,切入正题。注意事项:1:看图:默认情况下,程序会去加载 jniLibs 文件夹下的so库。而你如果这样的话: 很有可能会报错,提示你无法加载你的so库。说明:程序,找不到 libs 文件夹下的so库。 此时你可以这样: sou
android jni调用心得
jni 的调用分几种方式: 1。静态调用 2。动态调用 动态调用就是,平时说的,在项目中新建jni目标,用NDK方法来编译。最终生成so文件借当前项目需要的时候,调用  静态调用就是开机的时候加载到虚拟机里面的方式,这里也分两种方式,   1。同样Simplejni 路径:/rowboat-android/development/samples/SimpleJNI  ...
Android Jni调用实例
Android Jni调用实例,NDK程序开发的demo。
android jni调用demo
这是Android的NDK开发之Android JNI调用流程程一个demo。下载下来可以直接在android studio上运行。
【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法...
错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误。报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/art: No implementation found for void com.netease.xtc.c...
android jni 调用
想研究底层 调用自己的C函数库的 朋友 入门课程
android调用jni实例
首先需要下载安装ndk,他负责创建so库同你的android代码打包成apk文件。高版本的ndk自带打包工具,所以不需要再安装cygwin了,详情见博客
Android 调用JNI
这个是Android 调用底层的c/c++ 代码 实现加法运算和返回一个字符串 显示在Textview上。
android的jni调用例子
android的jni调用例子,对ndk开发是朋友应该有些帮助!
【Android】JNI调用简析
Android 7 中JNI的使用有了些新特性需要注意。 我们来看看JNI调用流程 Parcel.java中的nativeWriteInt方法是如何调用到native层的呢? frameworks/base$ vi ./core/java/android/os/Parcel.java     public final void writeInt(
【Android】jni调用
动态注册jni 1、load so库文件 static { Log.d(LOG_TAG, &quot;EventManager Load library~&quot;); try { System.loadLibrary(&quot;JNI_EventManager&quot;); } catch (UnsatisfiedLinkError e) { Log.d(LOG_TAG, &quot;Cannot load JNI_Even...
android调用JNI接口
非常好用JNI教学,入门级教学。适合刚开始学习,Android开发的小伙伴
Android调用jni
一个android调用jni的非常简单Demo
Android JNI调用-文件操作
Android虚拟机允许你的应用程序源代码通过JNI调用实现本地代码的方法,需要在应用程序中使用关键字native声明一个或多个方法表明该方法是通过本地调用实现的
利用JNI调用非JAVA代码
有没有一些实例给我参考一下。rn还有我在Windows下调用C,C++的代码,Windows下的DLL.rn如何创建一个DLL?rnrn---------------------------------------------rnclass ShowMsgBox rn public static void main(String [] args) rn ShowMsgBox app = new ShowMsgBox();rn app.ShowMessage("Generated with JNI");rn rn private native void ShowMessage(String msg);rn static rn System.loadLibrary("MsgImpl");rn rnrn这个类编译后生成的ShowMsgBox.classrn用javah -jni ShowMsgBoxrn出现这样的错误: Error: Class ShowMsgBox could not be found.rnrn为什么会这样的呢,请高手们帮帮忙rn
JNI调用多个so文件的问题,求教
大家好!rn我最近在做一个项目,需要用opencv里面的一些函数。现在我已经利用opencv中的一些函数写好了代码,并按照网上的教程生成了.so的动态链接库。问题是这个链接库中用到了opencv中的函数,在通过jni加载这个动态链接库并调用其中的函数的时候就会报错,提示说用到的opencv中的函数是“undefined symbol”。请问各位大神这个问题需要如何解决?
Java调用不支持JNI的Linux so文件
Java调用不支持JNI的Linux so文件
Android studio CMake方式引入jni .so文件
引用静态库文件的方法已经上传文件 Android studio CMake方式引入jni .a文件
android studio开发jni无法生成so文件
在交叉编译的时候怎么都无法生成so文件,javah生成头文件没错,c文件也没错,java文件也没错, 原因是JNI文件夹路径不对 在执行javah命令时,我进入的是cd app/src/main/java 这样jni文件夹在java文件夹下,作为一个包存在,这样就无法生成so文件 执行javah的正确姿势: 进入app/src/main目录:cd app/src/main 执行javah
Android Studio项目如何添加.so文件(JNI)
一、问题描述昨天在AS上集成信鸽推送的时候,一直报.so文件加载失败的错误,然后就研究了一下,才发现原来AS上放.so的目录格式和Eclipse上不一样,囧~~(吐槽一下,信鸽推送的官方demo竟然还是Eclipse,害我直接拷贝了libs文件夹)二、解决方法 方法一 如果直接使用 Android Studio 建立项目,项目结构与 Eclipse 建立的项目结构是不同的: [module_
android NDK JNI so文件的制作和使用
参考: java jni 入门1 - 一个简单的从Java程序中调用C函数 : http://blog.csdn.net/u012005313/article/details/49644283 ######################################################### 之前也接触过NDK和JNI,但是并没有很好的结合NDK和JN
Android自助餐之Jni(三)动态导入so文件
Android自助餐之Jni(一)动态导入so文件Android自助餐之Jni一动态导入so文件 拷贝so文件 创建jni对应类 FileUtil类 在需要的地方调用 下载完整源代码拷贝so文件假设so文件放在assets目录下 创建assets文件夹:在main文件夹上右键->new->folder->AssetsFolder 将so文件及其文件夹(armeabi等)复制到assets文件夹创
android studio之jni(上)生成so文件
使用android studio做ndk开发相对于eclipse无疑要简单很多,那么下面我将做详细的步骤介绍: 1、下载ndk (最好使用最新版本的ndk ,我现在使用的ndk版本是android-ndk-r11c,studio版本是2.1.1) 2、新建项目 3、设置ndk路径 4、新建一个moudle 选择android library  命名为hellojni  (下
Android下AES加密算法的JNI实现(包含SO文件)
将AES加密算法用C语言实现并封装成JNI接口供Android调用,包含编译生成的SO库文件,以及Java声明和调用方法的简单例子。希望帮到有需要的朋友,如果觉得不错麻烦给个好评~~!
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法