Android 源码上利用jni编译自己的项目(参考系统development/samples/SimpleJNI)

Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)记于正文前:环境是ubuntu10

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中,会更加方便


示例代码下载