本文共 1402 字,大约阅读时间需要 4 分钟。
本文档基于mac操作
1、先下载bzip2-1.0.6.tar.gz
连接地址:
2、我们可以新建一个项目,我取名makeso
3、在我们所建的工程的main包下新建一个jin的包,将后缀名为.c和.h的全部拷贝到jin包下(我是带了包名,你也可以不带,主要是为了分类,不然密密麻麻一堆文件),样板图:
4、在这个jni的目录下,再建一个文件,命名为Android.mk,配置如下:(重点操作,我在这里卡了很久,如果解决不了你的问题,请继续google)
#当前路径及android.mk的路径LOCAL_PATH := $(call my-dir)#清除上一个模块编译时候留下的所有LOCAL_变量,以准备给当前模块使用。include $(CLEAR_VARS)#指定那些存在于系统目录下本模块需要连接的库。如果某一个库既有动态库又有静态库,那么在默认情况下是链接的动态库而非静态库。#如果你的Android.mk文件中只有这么一行,那么将会采用动态链接#LOCAL_LDLIBS := -llog#要生成的.so库名,随便取名LOCAL_MODULE := bsdiff#指定要编译的c文件LOCAL_SRC_FILES := com_example_makeso_MainActivity.c#负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定编译为什么。include $(BUILD_SHARED_LIBRARY)#拓展#BUILD_STATIC_LIBRARY:编译为静态库。#BUILD_SHARED_LIBRARY :编译为动态库#BUILD_EXECUTABLE:编译为Native C可执行程序
5、打开终端,输入以下两个命令:
输入命名:cd /Users/gsony/Desktop/MyZLGX/makeso/src/main/java(切换到项目的java目录,这是我的java目录)
再次输入命令:javah -d ../jni com.example.makeso.MainActivity (这步容易出错)
系统会在jni包下生成一个.h的文件(附:操作和生成的文件)
6、准备工作做完了,现在就可以编译生成so库了
在jni包下,新建一个文件,命名为 com_example_makeso_MainActivity.c(附样板图)
7、在终端输入 ndk-build,,刷新项目就可以看见lib了,(附样板图)
!!!!!!!!!!!!!!!!!!!分割线!!!!!!!!!!!!!!!!!!!!!!
其实到这个时候已经完成了,可以拷贝so库使用了,但是看不惯警告的也可以搞定他
上图会看见一个 APP_PLATFORM not set. Defaultin to minimum supported version android-14.
解决办法:在jni包下,新建文件,命名为Application.mk,并在里面添加 APP_PLATFORM := android-14(我的是上面显示的错误是14,所以我写成14),样板图
上图还会有警告,如果要去除警告,需要在AndroidManifest.xml加入以下代码(这个不需要附样板图了吧)
最后在ndk-build的时候就很干净了,样板图