另外通用的添加API的方法android APP调用自定义java API,自定义java API调用自定义jni接口1:在android源码目录framework/base下面创建add目录add目录里面的结构如下:里面的Nadd.java android_jnitest_Nadd.cpp 和Android.mk内容如下:Nadd.javapackage android.jnitest; public class Nadd { static {System.loadLibrary("hello_jni");} public native int nadd(int a, int b);}android_jnitest_Nadd.cpp#define LOG_TAG "hello-JNI" #include #include #include #include #include #include #include #include "jni.h" #include "JNIHelp.h" #include "android_runtime/AndroidRuntime.h" static jint native_nadd(JNIEnv *env, jobject obj, jint a, jint b){ return (a + b);}static JNINativeMethod gMethods[] = { {"nadd", "(II)I", (void *)native_nadd},};static int register_android_jnitest_Nadd(JNIEnv *env){ return android::AndroidRuntime::registerNativeMethods(env, "android/jnitest/Nadd", gMethods, NELEM(gMethods));}jint JNI_OnLoad(JavaVM *vm, void *reserved){ JNIEnv *env = NULL; if (vm->GetEnv((void **)&env, JNI_VERSION_1_4) != JNI_OK) { printf("Error GetEnv\n"); return -1; } assert(env != NULL); if (register_android_jnitest_Nadd(env) 0) { printf("register_android_test_hello error.\n"); return -1; } return JNI_VERSION_1_4;}Android.mkLOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_PRELINK_MODULE := false LOCAL_SRC_FILES := \ android_jnitest_Nadd.cpp LOCAL_SHARED_LIBRARIES := \ libandroid_runtime LOCAL_MODULE := libhello_jni include $(BUILD_SHARED_LIBRARY)上面的步骤已经将代码准备好了2:修改build/core/pathmap.mk文件在FRAMEWORKS_BASE_SUBDIRS变量后添加 add\ ,代码如下FRAMEWORKS_BASE_SUBDIRS := \ $(addsuffix /java, \ core \ graphics \ location \ media \ opengl \ sax \ telephony \ wifi \ vpn \ keystore \ add \ )3:修改frameworks/base/Android.mk 文件在packages_to_document变量后添加自己源代码的包名称,如 android/jnitest ,结果如下packages_to_document := \ android \ javax/microedition/khronos\ android/jnitest4:make update-api这一步更新api,api文档在frameworks/base/api/current.txt5:修改build/target/product/base.mk在PRODUCT_PACKAGES += \后面添加 libhello_jniPRODUCT_PACKAGES += \ 20-dns.conf \ 95-configured \ am \ android.policy \ android.test.runner \ app_process \ applypatch \ bmgr \ bugreport \ content \ dhcpcd \ dhcpcd-run-hooks \ dnsmasq \ framework \ fsck_msdos \ ime \ javax.obex \ libSR_AudioIn \ libandroid \ libandroid_runtime \ libandroid_servers \ libaudioeffect_jni \ libaudioflinger \ libbundlewrapper \ libcamera_client \ libcameraservice \ libchromium_net \ libdl \ libdrm1 \ libdrm1_jni \ libeffects \ libiprouteutil \ libjni_latinime \ libjnigraphics \ libmedia \ libmedia_jni \ libmediaplayerservice \ libmtp \ libnetlink \ libnetutils \ libreference-ril \ libreverbwrapper \ libril \ librtp_jni \ libsensorservice \ libskia \ libsonivox \ libsoundpool \ libsqlite \ libstagefright \ libstagefright_amrnb_common \ libstagefright_avc_common \ libstagefright_enc_common \ libstagefright_foundation \ libstagefright_omx \ libstagefright_yuv \ libsystem_server \ libusbhost \ libutils \ libvisualizer \ libvorbisidec \ libwpa_client \ media \ media_cmd \ mediaserver \ monkey \ mtpd \ ndc \ netcfg \ netd \ ping \ platform.xml \ pppd \ pm \ racoon \ run-as \ schedtest \ screenshot \ sdcard \ services \ settings \ svc \ system_server \ tc \ vdc \ vold \ webview \ wm\ libhello_jni 6:make PRODUCT-sdk-sdk -j 4 7:编译好后,自己的sdk会编译到out/host/linux-x86/下,里面的android-sdk_eng.xxx_linux-x86就是自己的sdk,在eclipse中选择自己sdk的路径如下图:我这里只是介绍,没有选择,用户可以选择~/out/host/linux-x86/android-sdk_eng.xxx_linux-x86路径,然后点击Apply 8:编写app测试eclipse创建一个最简单的hello工程,将里面的MainActivity.java内容替换如下(或者来这里下载http://download.csdn.net/detail/a624731186/7219509)package com.example.jnitest;import android.jnitest.Nadd;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Nadd test = new Nadd(); setTitle("The Native Add Result is "+String.valueOf(test.nadd(30, 30))); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}//======================================================================================== 开放systemProperty的方法.vi ./frameworks/base/core/java/android/os/SystemProperties.java修改 其中 @Hide, 中间插几个空格, 其实就是把javadoc的这个类开放出来.make update-apimake PRODUCT-sdk-sdk -j 4out/host/linux-x86/下,里面的android-sdk_eng.xxx_linux-x86就是自己的sdk编译android sdk 时:不要直接make sdkwindows版sdk: $make -j4 PRODUCT-sdk-win_sdk 参考development/build/tools/windows_sdk.mk