话题:能否利用NDK把第三方so文件打入apk中

zhangyuehao 2010-06-30 09:10:56
我所说的第三方,就是我没有源代码(c/c++),只有so文件。不知道有没有方法打入apk中。我在网上也没查到方法。请高人解惑~~
...全文
1203 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
javacode23 2011-10-24
  • 打赏
  • 举报
回复
你好,你这问题解决了吗?我也遇到了同样的问题。希望能和你交流一下!
ldf198312 2011-01-07
  • 打赏
  • 举报
回复
Android.mk - app(apk) use c/++ and java library

When you want write an android app that built with Android source, you need create an Android.mk to indicate compiler how to do that.

If the app need use c/c++ & java library, the content of Android.mk is listed as below.


dir structure :

app
|- AndroidManifest.xml
|- Android.mk
|- res
|- src
|- libs
|- XXX.jar
|- YYY.so
|- Android.mk


The first Android.mk content :

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

############################################################
LOCAL_STATIC_JAVA_LIBRARIES := my-jar-lib
LOCAL_MODULE_TAGS := eng user
############################################################

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

LOCAL_PACKAGE_NAME := DMClient

include $(BUILD_PACKAGE)

############################################################
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
my-jar-lib:libs/XXX.jar

include $(BUILD_MULTI_PREBUILT)

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

LOCAL_STATIC_JAVA_LIBRARIES defines the java library.

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES associates the lib name and jar file (represented by relative path) which is contributed by third party.

The last line means that includes all Android.mk which locate under the current path. In that way, the second Android.mk listed as below is included.


The second Android.mk content :


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PREBUILT_LIBS := YYY.so

include $(BUILD_MULTI_PREBUILT)

The first line is important that announce YYY.so located in the current directory . If you didn't declare LOCAL_PATH (the first line), compiler will go to app/ to find XXX.so instead go to app/libs/ to find due to the second Android.mk is included by the first Android.mk.
=====================================================
上述可以编译通过,但不会将*.so文件打包到.apk中,在第一个mk文件中,加入:
LOCAL_JNI_SHARED_LIBRARIES := YYY
sunnyboyi 2010-10-14
  • 打赏
  • 举报
回复
直接使用System.LoadLibrary加载是不行的,必须重新用Ndk编译,生成*.so库时用到的交叉编译工具和Ndk使用的交叉编译工具不同,所以不能运行。
keensword007 2010-08-14
  • 打赏
  • 举报
回复
第三方库文件直接放到工程的libs/armeabi/目录下,自然会打包到apk中。对于普通的so文件,使用System.LoadLibrary加载是不行的,必须是JNI so文件才可以
MEYEGG 2010-07-02
  • 打赏
  • 举报
回复
好阿。学习。。
cc_net 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhangyuehao 的回复:]
引用 7 楼 vclongking 的回复:
放到lib路径里面 ,System.loadLibrary("xx")就行了

不行~~你说的是要在工程中自带jni源文件再通过ndk编译后的SO才会自动打包到apk文件,如果是第三方的so根本打不进去。
[/Quote]

不用吧,工程里直接把so拷过去就行了啊
yihua0001 2010-07-01
  • 打赏
  • 举报
回复
建议参考一下Android系统里browser部分代码,里面有个assets目录,放着浏览器需要用到的插件。运行的嘶吼会自动复制到/data/data/目录下browser的目录下,相信有参考价值。
ahphone 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhangyuehao 的回复:]
引用 7 楼 vclongking 的回复:
放到lib路径里面 ,System.loadLibrary("xx")就行了

不行~~你说的是要在工程中自带jni源文件再通过ndk编译后的SO才会自动打包到apk文件,如果是第三方的so根本打不进去。
[/Quote]

NDK是把原来一些繁琐的东西简单化了一点,
你可以找一下在ndk出现前,工程师们如何手工打包so的文章

ahphone 2010-06-30
  • 打赏
  • 举报
回复
找一个NDK的例子看看就知道了,

把SO放在lib下,打包进工程,然后代码中
static{system.loadlibrary("");}
yyy025025025 2010-06-30
  • 打赏
  • 举报
回复
1. put the xx.so to a folder in the application, such as /lib/
2. add the so to the build path
3. use System.loadLibrary("xx") to load library.
儿大不由爷 2010-06-30
  • 打赏
  • 举报
回复
肯定是可以的
Hinagi 2010-06-30
  • 打赏
  • 举报
回复
本来so这种东西就是只要知道怎么用就可以了,直接load就可以了
zhangyuehao 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liujinrui 的回复:]
放在assets目录中,通过路径访问。
[/Quote]
在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径。
如果我要用/assets/hello-jni.so这个文件,我如何设置访问路径呢
liujinrui 2010-06-30
  • 打赏
  • 举报
回复
放在assets目录中,通过路径访问。
zhangyuehao 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vclongking 的回复:]
放到lib路径里面 ,System.loadLibrary("xx")就行了
[/Quote]
不行~~你说的是要在工程中自带jni源文件再通过ndk编译后的SO才会自动打包到apk文件,如果是第三方的so根本打不进去。
vclongking 2010-06-30
  • 打赏
  • 举报
回复
放到lib路径里面 ,System.loadLibrary("xx")就行了

80,351

社区成员

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

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