android sdk中添加自定义api,android SDK中添加自定义api【转】
本文的思路:
android APP調(diào)用自定義java API,自定義java API調(diào)用自定義jni接口
1:在android源碼目錄framework/base下面創(chuàng)建add目錄
add目錄里面的結(jié)構(gòu)如下:
里面的Nadd.java android_jnitest_Nadd.cpp 和Android.mk內(nèi)容如下:
Nadd.java
package?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)?
printf("register_android_test_hello?error.\n");
return?-1;
}
return?JNI_VERSION_1_4;
}
Android.mk
LOCAL_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)
上面的步驟已經(jīng)將代碼準(zhǔn)備好了
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,結(jié)果如下
packages_to_document := \
android \
javax/microedition/khronos\
android/jnitest
4:make update-api
這一步更新api,api文檔在frameworks/base/api/current.txt
5:修改build/target/product/base.mk
在PRODUCT_PACKAGES += \后面添加?libhello_jni
PRODUCT_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會(huì)編譯到out/host/linux-x86/下,里面的android-sdk_eng.xxx_linux-x86就是自己的sdk,在eclipse中選擇自己sdk的路徑
如下圖:我這里只是介紹,沒有選擇,用戶可以選擇~/out/host/linux-x86/android-sdk_eng.xxx_linux-x86路徑,然后點(diǎn)擊Apply
8:編寫app測試
eclipse創(chuàng)建一個(gè)最簡單的hello工程,
將里面的MainActivity.java內(nèi)容替換如下(或者來這里下載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;
}
}
總結(jié)
以上是生活随笔為你收集整理的android sdk中添加自定义api,android SDK中添加自定义api【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归函数就兔子数C语言,【C语言】求斐波
- 下一篇: excel函数中if android,在