日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android sdk中添加自定义api,android SDK中添加自定义api【转】

發(fā)布時(shí)間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android sdk中添加自定义api,android SDK中添加自定义api【转】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文的思路:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。