如何生成android可用的SO文件

zw87804600 2010-11-11 05:49:04
我现在要实现android jni调用,但是我不知道怎么样去吧我的c语言写的头文件 和 实现类文件,
编译成适用android的SO文件
我在LINUX下编译出的SO文件,放在system/lib下 报错找不到该SO文件,
所以求教高手指点一下,如何生成android so文件
...全文
10706 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
liahoo 2011-06-13
  • 打赏
  • 举报
回复
MS不用LINUX的交叉是不可能成功的。
piggogogo2008 2011-01-19
  • 打赏
  • 举报
回复
SO文件是如何生成的,我也没有生成成功~~~
xqhrs232 2010-11-25
  • 打赏
  • 举报
回复
也在学习这一块的东西
guoxianting 2010-11-23
  • 打赏
  • 举报
回复
学习一下,android什么时候能给做一个类似与JNative的东东就好了。
zw87804600 2010-11-15
  • 打赏
  • 举报
回复
http://liangxh2008.blog.163.com/blog/static/1124116792009810105244380/
我看的是这个网页 但是看到生成SO文件那块 就不明白了
他也是在LINUX环境下生成的SO??
zw87804600 2010-11-15
  • 打赏
  • 举报
回复
谢谢你们这多指导 但是我都不太知道你们说的什么意思。。。继续看网页
谁能吧一个完全不的步骤 指导一下
freshui 2010-11-14
  • 打赏
  • 举报
回复
你可以在NDK或者源代码中编译,这样生产的SO就可以了

linux的so和android的不同,android没用glibc,用的是自己的bionic,这个和正常linux上的是不兼容的,原来在linux上的需要拿源代码到android环境下重新编译才能使用。
vclongking 2010-11-14
  • 打赏
  • 举报
回复
LZ , 你在你写的MK文件的第七行里面 ,LOCAL_SHARED_LIBRARIES := libutils
试试把你自己的那个.so文件加进去,看行不
vclongking 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yihua0001 的回复:]
如果已经生成了so想调用,貌似底层要用c/c++包一层,然后生成一个bin档去用,去年做过这样的事情,有点既不很清楚了。或者楼主把so和.a都包含到makefile里去编译试试,不行只能再包一下了。
[/Quote]是的 ,你讲的这种是要启动一个服务进程 ,这个bin文件去调用这个.so文件实现功能
dinjay 2010-11-12
  • 打赏
  • 举报
回复
ndk中自带了个hello-jni,你可以看看
编译的话,返回hello-jni的上层目录
make APP=hello-jni
这样就能编译出so了,在hello-jni的libs里
bjskyhorse 2010-11-12
  • 打赏
  • 举报
回复
GOOGLE NDK,这样的文章很多
vclongking 2010-11-12
  • 打赏
  • 举报
回复
你写的MK里面 ,第十行就代表此模块编译过后生成动态库
至于红色部分是先设置环境变量
. buile/envsetup.sh
lunch

mm就是进行模块编译
就是根据你写的那个Android.mk来编的
zw87804600 2010-11-12
  • 打赏
  • 举报
回复
(6)编写android.mk文件

1. LOCAL_PATH:= $(call my-dir)
2. include $(CLEAR_VARS)
3. LOCAL_SRC_FILES:= \
4. com_ura_test_JNITest.c
5. LOCAL_C_INCLUDES := \
6. $(JNI_H_INCLUDE)
7. LOCAL_SHARED_LIBRARIES := libutils
8. LOCAL_PRELINK_MODULE := false
9. LOCAL_MODULE := libJNITest
10. include $(BUILD_SHARED_LIBRARY)

复制代码

(7)编译生成动态库

新建文件夹


~/mydroid/external/libJNITest


把上面编写好的头文件,c/c++源文件,make文件拷贝进上面目录中

* 需要注意的是把PRELINK_MOUDULE设置成false

否则需要重新做成img文件再烧入。

在ubuntu中执行

1. cd
2. cd mydroid/build/
3. envsetup.sh
4. cd ~/mydroid
5. cd external/libJNITest/
6. mm

复制代码

编译成功的后会在下面目录中生成libJNITest.so文件


~mydroid/out/target/product/generic/system/lib/


红色部分 我根本不知道什么意思

zw87804600 2010-11-12
  • 打赏
  • 举报
回复
那请问 用android代码编译出来SO呢?就是这里很模糊
yihua0001 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yihua0001 的回复:]
如果已经生成了so想调用,貌似底层要用c/c++包一层,然后生成一个bin档去用,去年做过这样的事情,有点既不很清楚了。或者楼主把so和.a都包含到makefile里去编译试试,不行只能再包一下了。
[/Quote]
对了,JNI的应用是少不了的。
yihua0001 2010-11-12
  • 打赏
  • 举报
回复
如果已经生成了so想调用,貌似底层要用c/c++包一层,然后生成一个bin档去用,去年做过这样的事情,有点既不很清楚了。或者楼主把so和.a都包含到makefile里去编译试试,不行只能再包一下了。
yihua0001 2010-11-11
  • 打赏
  • 举报
回复
楼主在linux下编译的是用linux下的头文件,当然不能再android里用,把你的makefile种的include的路径和toolchain指向android的路径下,用android的代码编译出来的so才可以在android中使用。
vclongking 2010-11-11
  • 打赏
  • 举报
回复
你写JNI的时候得注意makefile添加你Nativa层的这个.so
dinjay 2010-11-11
  • 打赏
  • 举报
回复
google一下 android jni,有一大堆啊
http://mintelong.javaeye.com/blog/458391
简单的说就是几部,
1.搭环境
2.编写jni的java接口
3.实现jni(.c和.h的实现)
4.编译jni,就是编译.c生成so
5.java层调用
foley_liao 2010-11-11
  • 打赏
  • 举报
回复
我要学习下......

80,361

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧