Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)
记于正文前:环境是ubuntu10.10,android 源码是2.0的,在第一次编译源码的时候遇到不少问题,第二次一次make通过。
1)可能用到的文件或库全部安装(sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev);
2)建议用jdk1.5编译android源码,1.6也是可以编译通过的,不过需要修改一个文件(这里以2.0为例,要修改文件/build/core/main.mk,将文件中的javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]') 全部改为javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]'),总共两处)
Android 源码下利用jni编译自己的项目
我的练习项目实现了一个简单的四则运算,项目的目录层次如下:
AndroidManifest.xml Android.mk jni res src
资源文件简简单单,一个布局文件,稍后会有demo的下载地址
主要记录备忘的内容如下:
MainActivity.java
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_JNI_SHARED_LIBRARIES := libarithmeticLOCAL_PACKAGE_NAME := LongTestLOCAL_SHARED_LIBRARIES := \libutils\libloginclude $(BUILD_PACKAGE)include $(LOCAL_PATH)/jni/Android.mk # Also build all of the sub-targets under this one: the shared library.include $(call all-makefiles-under,$(LOCAL_PATH))
LOCAL_PACKAGE_NAME:项目名称,即最终生成apk的名字
LOCAL_JNI_SHARED_LIBRARIES := libxxx就是把so文件放到apk文件里的libs/armeabi里
执行BUILD_PACKAGE。它的定义也是在config.mk中定义如下:BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk
$(call all-java-files-under, src)编译的源代码文件列表添加src目录下所有的java 源文件
$(call all-makefiles-under, $(LOCAL_PATH))编译器会在编译完当前目录下的文件后再深入子目录编译
如果make过android源码,可以在项目根目录下执行mm命令进行编译。前提是执行过source androidSRC/build/envsetup.sh
或者直接把source androidSRC/build/envsetup.sh添加到~/.bashrc中,会更加方便
示例代码下载
