您的位置:首页 > 移动开发 > Android开发

android打包so文件到apk

2015-09-17 20:18 549 查看
在apk里打包进.so文件的方法

有两种方法,

1 是在Android.mk文件里增加

LOCAL_JNI_SHARED_LIBRARIES := libxxx

这样在编译的时候,NDK自动会把这个libxxx打包进apk;

放在youapk/lib/目录下。

2 是在应用的目录下手工建

libs/armeabi

目录,然后把libxxx.so拷贝到这个目录下,

这样NDK就会自动把这个libxxx.so打包进apk,位置还是在

放在youapk/lib/目录下。

在代码里,使用

System.loadLibrary("xxx");

就可以加载这个动态库了。

这里要注意,参数只写xxx就可以了,不需要写libxxx,也不需要写libxxx.so。

还有一点要说明,System.loadLibrary这个函数会在如下路径搜索libxxx.so文件:

/system/lib

/data/data/you apk package/lib

但,如果libxxx.so还依赖其它.so文件,比如libyyy.so,则System.loadLibrary只会

在/system/lib目录下去找,如果没找到,它不会自动到/data/data/you apk package/lib

下去找,这个时候就会报动态库没找到的错;

解决方法是在load libxxx.so之前,先load libyyy.so,如下:

System.loadLibrary("yyy");

System.loadLibrary("xxx");

下面详细说明过程如下:
使用android SDK原代码 开发APK,将so文件打包进apk,这样可以只提供给客户一个apk.

1.含义全代码的so打包.

a)建立工程,并使用本地调用,java文件如下

01.package
test.jni;

02.import
android.app.Activity;

03.import
android.os.Bundle;

04.import
android.widget.TextView;

05.public
class jnitest extends Activity {

06./**
Called when the activity is first created. */

07.@Override

08.public
void onCreate(Bundle savedInstanceState) {

09.super.onCreate(savedInstanceState);

10.TextView
tv = new TextView(this);

11.int
x = 55;

12.int
y = 8;

13.System.loadLibrary("apptest");

14.//System.loadLibrary("testapi");

15.<span
class="block" margin-top:4px;"="" style="word-wrap: break-word; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important;"> 注:暂存的内容只能恢复到当前文章的编辑器中,如需恢复到其他文章中,请编辑该文章并从暂存箱中恢复;或者直接复制以上内容,手工恢复到相关文章。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: