android SDK中添加自定义api【转】
本文转载自:http://blog.csdn.net/a624731186/article/details/23548409
本文的思路:
android APP调用自定义java API,自定义java API调用自定义jni接口
1:在android源码目录framework/base下面创建add目录
add目录里面的结构如下:
里面的Nadd.java android_jnitest_Nadd.cpp 和Android.mk内容如下:
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 <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <assert.h>
- #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.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)
上面的步骤已经将代码准备好了
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/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会编译到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;
}
}
android SDK中添加自定义api【转】的更多相关文章
- 腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
- Android SDK中的Support兼容包详解
这篇文章主要介绍了Android SDK中的Support兼容包详解,本文详细区分了Support Library的版本区别.各种Theme的概念和使用注意事项等内容,需要的朋友可以参考下 背景 来自 ...
- Android SDK版本号 与 API Level 对应关系 201911
API是开发用的,所以API LEVEL可以认为是内部的:而SDK的版本提供了新特性给用户,是外部可见的. 可以查看以下网址以获取最新的对应关系: http://developer.android. ...
- 如何解决Android SDK中离线文档打开慢的问题
原文:http://blog.csdn.net/hansel/article/details/39268511 Android SDK中的离线文档虽然都是本地文件,但是有很多Javascript, C ...
- Android SDK版本号 与 API Level 对应关系
转自:https://blog.csdn.net/qiaoquan3/article/details/70185550 Android SDK版本号 与 API Level 对应关系 新接触And ...
- Android SDK版本号与API Level 的对应关系-转
Android SDK版本号 与 API Level 对应关系 http://developer.android.com/guide/appendix/api-levels.html Android ...
- Android SDK版本号与API Level 的对应关系及发布时间(更新到28)
Android SDK版本号与API Level 的对应关系及发布时间 平台版本号 API 级别 VERSION_CODE(代号) 发布时间 Android 9.0 28 Pie/P(馅饼) 2018 ...
- Android SDK中 tools 工具介绍
Android SDK包含了各种各样的定制工具,简介如下: Android模拟器(Android Emulator ) 它是在你的计算机上运行的一个虚拟移动设备.你可以使用模拟器来在一个实际的Andr ...
- Android SDK下载OpenMobile api
在Android SDK Manager的Tools -> Manager Add-on sites... -> User Defined Sites中,添加以下地址: http://se ...
随机推荐
- 洛谷——P2919 [USACO08NOV]守护农场Guarding the Farm
P2919 [USACO08NOV]守护农场Guarding the Farm 题目描述 The farm has many hills upon which Farmer John would li ...
- 域名缓存侦测(DNS Cache Snooping)技术
域名缓存侦测(DNS Cache Snooping)技术 在企业网络中,通常都会配置DNS服务器,为网络内的主机提供域名解析服务.这些DNS不仅解析自己的私有域名,还会用递归方式,请求公网的DNS解析 ...
- MQTT协议介绍
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf MQTT 文档 http://mqtt.org/new/wp-c ...
- javascript --- 原型初探七日谈(二)
扩展内建对象: 在javascript中,内建对象的构造函数都是可以通过其原型来进行扩展的.这意味着我们可以做一些事情,例如我们要往数组原型中添加一个新方法,就可以在其所有的数组中使用,下面我们来试试 ...
- pv,uv
1.PV PV(page view),即页面浏览量:用户每1次对网站中的每个网页访问均被记录1次.用户对同一页面的多次访问,访问量累计. 2.什么是UV uv(unique visitor),指访问某 ...
- Samp免流软件以及地铁跑酷的自校验分析
[文章标题]:Samp免流软件以及地铁跑酷的自校验分析 [文章作者]: Ericky [作者博客]: http://blog.csdn.net/hk9259 [下载地址]: 自行百度 [保护方式]: ...
- Windows系统文件详解【大全】
这是网络上转载的一篇文章,找不到原创的出处了--详细的介绍了WINDOWS系统文件的用途,我想各位保存一份以后说不定会有用吧,呵呵..这里按A到Z为大家分好类了,查询的话可以按键盘的Ctrl+F进行搜 ...
- Dubbo简介及实例
节点角色说明: Ø Provider: 暴露服务的服务提供方. Ø Consumer: 调用远程服务的服务消费方. Ø Registry: 服务注册与发现的注册中心. Ø Monitor: 统 ...
- 21. Spring Boot过滤器、监听器【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter) ...
- Odoo10尝鲜:MRP 10 新概念
OEE [ overall equipment Effectiveness 整体设备效率 ] 整體設備效率是整合稼働率 (Availability).產能效率 (Performance).良率 (Qu ...