Android-JNI实现方式及实例演示 有米分享

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

有米手机应用广告(优蜜信息科技)实现方式及实例演示试阅…….回到android顶层目录。执行:coconut@ubuntu:~/android$makeSimpleJNI============================================PLATFORM_VERSION_CODENAME=AOSPPLATFORM_VERSION=AOSPTARGET_PRODUCT=genericTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=TARGET_BUILD_TYPE=releaseTARGET_ARCH=armHOST_ARCH=x86HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=MASTER============================================/bin/bash:line0:cd:development/tools/layoutopt/app/src/resources:NosuchfileordirectoryNoticefile:external/elfcopy/NOTICE--out/host/linux-x86/obj/NOTICE_FILES/src//lib/libelfcopy.a.txt有米手机应用广告(优蜜信息科技):libdl(out/target/product/generic/symbols/system/lib/libdl.so)targetStrip:libdl(out/target/product/generic/obj/lib/libdl.so)targetSharedLib:libc(out/target/product/generic/obj/SHARED_LIBRARIES/libc_intermediates/LINKED/libc.so)targetPrelink:libc(out/target/product/generic/symbols/system/lib/libc.so)libelfcopy:Warning:DW_FORM_data8isunsupportedwhensizeof(unsignedlong)!=8libelfcopy:Warning:Rangelistsin.debug_infosectionaren'tinascendingorder!libelfcopy:Warning:Rangelistsin.debug_rangessectionstartat0x40targetStrip:libc(out/target/product/generic/obj/lib/libc.so)……正文:主要内容:一、JNI的多重实现方式二、Android-JNI编译实例教程三、实现一个非常简单的JNI的实例程序一、JNI的多重实现方式1应用级用eclipse构建一个应用程序,JNITest1。Xml代码?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=Android:orientation=verticalAndroid:layout_width=fill_parentAndroid:layout_height=fill_parentTextViewAndroid:id=@+id/JNITestAndroid:layout_width=fill_parentAndroid:layout_height=wrap_contentAndroid:text=@string/JNITest//LinearLayoutJAVA代码:packagecom.jni.test;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassJNITestextendsActivity{有米手机应用广告(优蜜信息科技)**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Stringstr=GetTest();TextViewtv=(TextView)findViewById(R.id.JNITest);tv.setText(str);}static{System.loadLibrary(JNITest1);//libJNITest1.so}publicnativeStringGetTest();}在java文件生成class文件后,进入工程根目录,使用如下命令:javah-classpathbin-djnicom.jni.test.JNITest会在根目录下生成jni目录:com_jni_test_JNITest.h如下:/*DONOTEDITTHISFILE-itismachinegenerated*/#includejni.h#ifndef__com_jni_test_JNITest__#define__com_jni_test_JNITest__#ifdef__cplusplusexternC{#endifJNIEXPORTjstringJNICALLJava_com_jni_test_JNITest_GetTest(JNIEnv*env,jobject);#ifdef__cplusplus}#endif#endif/*__com_jni_test_JNITest__*/在external目录下,建立目录TestJNI/libJNITest1,将com_jni_test_JNITest.h复制到该目录下,建立a.c如下:有米手机应用广告(优蜜信息科技)(JNIEnv*env,jobjectfggg)//一定要补上{return(*env)-NewStringUTF(env,(char*)JNITest1nativeString);LOGD(HelloLIB!\n);}编写Android.mk文件,内容如下:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_SRC_FILES:=a.cLOCAL_C_INCLUDES:=$(JNI_H_INCLUDE)LOCAL_SHARED_LIBRARIES:=libutilsLOCAL_PRELINK_MODULE:=falseLOCAL_MODULE:=libJNITest1include$(BUILD_SHARED_LIBRARY)执行命令模式如下:cdcdmydroid/build/envsetup.shcd~/mydroidcdexternal/libJNITest/mmmm输出:make:Enteringdirectory`/home/smrdn/Android/android-1.6_r2'targetthumbC:libJNITest1=/home/smrdn/Android/android-1.6_r2/external/TestJni/libJNITest1/a.ctargetSharedLib:libJNITest1(out/target/product/generic/obj/SHARED_LIBRARIES/libJNITest1_intermediates/LINKED/libJNITest1.so)targetNon-prelinked:libJNITest1(out/target/product/generic/symbols/system/lib/libJNITest1.so)targetStrip:libJNITest1(out/target/product/generic/obj/lib/libJNITest1.so)Install:out/target/product/generic/system/lib/libJNITest1.somake:Leavingdirectory`/home/smrdn/Android/android-1.6_r2'实验证明只要是在external中的目录下的jni都会出现如上情况,在不同的目录下生成目标模块。有米手机应用广告(优蜜信息科技)使用方法步骤(8)在模拟器中执行程序首先要把动态库拷进/system/lib中。启动模拟器adbshelladbremountadbpushlibJNITest.so/system/lib确认拷贝成功。cd/system/libls然后不要关闭模拟器(关掉再开动态库就没了,因为模拟器rom是只读)执行java程序JNITest会看到屏幕上打印出JNITestNativeString2在framework中的JNI第一步:编写java类,其并不完整,有部分方法需要用到C++,先建立java,在回到底层的C++部分在文件android-1.6_r2下:frameworks/base/core/java/下建立自己的Java类。例如建立android/myTest/helloJNI.java,代码如下:packageandroid.myTest;publicclasshelloJNI{publichelloJNI(){System.out.println(TesthelloJNI:+getString());}publicnativeStringgetString();}其中getString是用C++编写的部分。第二步:编写自己的C++函数体:frameworks/base/core/jni/android_myTest_helloJNI.cpp,注意文件名是java类的包名和类名的结合。代码如下:#defineLOG_TAGDebugJNI#includejni.h#includenativehelper/JNIHelp.h#includeutils/Log.h有米手机应用广告(优蜜信息科技){/**Implements:*nativeintpart1(intintArg,doubledoubleArg,StringstringArg,*int[]arrayArg)*///jstring是jni与java中string相对应,可以看出函数名的前面部分是包名和类名,最后面就是Java中定义的方法,//参数:JNIEnv*env,jobjectobject是必须的,如果有别的参数,在添加到后面staticjstringandroid_myTest_helloJNI_getString(JNIEnv*env,jobjectobject){LOGI(helloJNI\thelloJNI\t

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功