NDK下STLdoapk反编译不成功功,怎么处理

JNI下调用NDK编译的C++库问题
[问题点数:50分,结帖人sward2005]
JNI下调用NDK编译的C++库问题
[问题点数:50分,结帖人sward2005]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2007年4月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。#include &string.h&#include &jni.h&#include &iostream&#include &vector&using namespace#ifndef _Included_com_example_hellojni_HelloJni#define _Included_com_example_hellojni_HelloJni#ifdef __cplusplusextern &C& {#endifjstring_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz ){
vector&int& //只写这一行,还可以编译成功
vec.push_back(1);//一写这行,马上出下面一大堆错误
return env-&NewStringUTF(&Hello from JNI !&);}#ifdef __cplusplus}#endif#endifSTL库也编译成功了。写vector&int&也可以编译成功。但只要一写vector&int&vec.push_back(1);马上就出一大堆编译错误,如下: NDK: WARNING: Rebuilding STLport libraries from sources!
& Android NDK: You might want to use $NDK/build/tools/build-stlport.sh
& Android NDK: in order to build prebuilt versions to speed up your builds!
& Gdbserver
: [arm--eabi-4.4.3] libs/armeabi/gdbserverGdbsetup
: libs/armeabi/gdb.setupCompile++ thumb
: hello-jni &= hello-jni.cppmake: 放弃循环依赖 /cygdrive/d/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a &- /cygdrive/d/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a 。SharedLibrary
: libhello-jni.soD:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `~exception':/tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_exception.cc:31: multiple definition of `std::exception::~exception()'D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):D:/android-ndk-r6/sources/cxx-stl/stlport/src/dll_main.cpp:65: first defined hereD:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `~exception':/tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_exception.cc:31: multiple definition of `std::exception::~exception()'D:/android-ndk-r6/samples/hello-jni/obj/local/armeabi/libstlport_static.a(dll_main.o):D:/android-ndk-r6/sources/cxx-stl/stlport/src/dll_main.cpp:65: first defined hereD:/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/lib\libsupc++.a(eh_exception.o): In function `~bad_exception':共3页顶一下(0)0%踩一下(0)0%------分隔线------上一篇: 下一篇: 栏目列表推荐内容Android中有Context的概念,想必大家都知道。Context可以做很多事情...
在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的...
本文内容 环境 项目结构 演示 1:PagerTitleStrip 演示 2:PagerTabSt...
今天给大家带来一个拼图游戏,当然了不是很传统那个缺一块的...
这是一个我们比较熟悉的一款应用,高仿专仿最新QQ应用源码,...
该源码是校园二手交易系统应用带服务端,也是一个基于安卓和...     
来自eoeAndroid wiki
NDK是一个工具集,可以让你实现你的应用程序使用本机代码的语言,如C和C++。对于某些类型的应用程序,这可能是有帮助的,这样你就可以重复使用现有的代码库,这些语言编写的,并可能增加性能.
下载NDK之前,你应该明白,NDK将不利于大多数应用程序。作为一个开发人员,你需要平衡它的好处,针对其缺点。值得一提的是,在Android上使用本机代码一般不会导致显著的性能改善,但它总是会增加您的应用程序的复杂性。在一般情况下,你应该只使用NDK您的应用程序,从来没有,如果有必要的,因为你更喜欢C / C ++程序中。
典型的NDK很好的候选人是自包含的,CPU密集型操作,因此不分配太多的内存,如信号处理,物理模拟,等等。检查是否你不应该在本机代码开发时,想想你的要求,如果Android框架API提供的功能,您需要.
37b1afcc09e1b9c07e3f14
Mac OS X (intel)
bytes bytes
81ce5de731f7afe0bad9
Linux 32/64-bit (x86)
5c9afcf82fbf
以下各节提供的信息及注意事项后续版本的NDK,表示修订号。
Android NDK, Revision 8 (May 2012)
    此版本的NDK,包括MIPS ABI的支持和一些额外的修正。
    新功能:
          o 新增的MIPS ABI的支持,它允许您生成机器代码兼容MIPS的Android设备上运行。 MIPS的主要功能包括MIPS特定工具链,系统头文件,库和调试的支持。关于MIPS支持的详细信息,请参阅文档/ CPU-MIPS.html的NDK包。
           默认情况下,代码生成的基于ARM的设备。您可以添加MIPS科技APP_ABI定义在您的Application.mk文件到MIPS平台建设。例如,下面的线指示NDK构建的时候,你的代码的三个不同的ABI:
APP_ABI := armeabi armeabi-v7a mips
           除非你依靠特定于体系结构的组件,如ARM汇编代码,你不应该需要触摸你的Android.mk文件,建立MIPS机器代码。
          o 您可以建立一个独立的MIPS工具使用 - ARCH = MIPS选项时,调用使单机-toolchain.sh的。更多详细信息,请参阅doc/ STANDALONE-TOOLCHAIN.html的为。
注:为了确保您的应用程序提供给用户,如果他们的设备能够运行它们,谷歌播放器应用程序的指令集信息包含在您的应用程序吗?没有需要采取行动的一部分,以使过滤。此外,Android系统本身也可以检查你的应用程序在安装时,只有当应用程序提供对设备的CPU架构编译的库中,允许才能继续安装。
    重要的错误修正:
          o 修正了一个在加比+ +实现,结果dynamic_cast &“(乙)基类派生类对象乙是正确调整在相反的方向从基类。(问题28721)
          o 固定的问题,make-standalone-toolchain.sh未能复制libsupc + + *。
    其他错误修正:
          o 固定ndk-build.cmd确保ndk-build.cmd工作正常,即使用户重新定义了环境变量,这可能是改变时,安装各种开发工具在视窗环境
Android NDK, Revision 7c (April 2012)
    此版本的NDK基于Tegra2的设备包括一个重要的补丁,和一些额外的修正和改进:
    重要的错误修正:
            修正了GNU STL的armeabi-V7A的二进制文件不会崩溃对非NEON设备。 NDK R7B提供的文件配置不正确,导致崩溃时,尝试使用某些浮点功能(例如,COSF,SINF,expf)基于Tegra2的设备及其他。
    重要的变化:
          o 新增支持自定义输出目录通过的NDK_OUT的环境变量。定义时,这个变量是用来存储所有的中间生成的文件,而不是$ PROJECT_PATH/ obj的。 NDK-gdb的变量也认识到。
          o 新增为true,在你的Android.mk定义LOCAL_SHORT_COMMANDS构建模块与数百个,甚至数千个源文件的支持。
            这种变化迫使NDK编译系统把大部分连接器或归档到文件列表,作为工作的命令行长度的限制。有关详细信息,请参阅文档/ ANDROID-MK.html的。
    其他bug修复:
          o 固定的android_getCpuCount()实施的cpufeatures辅助库。在某些设备中,其中芯由系统动态启用,以前的实现将报告的活动核心的总数首次在函数被调用,而不是物理上可用核的总数。
Android NDK, Revision 7b (February 2012)
    此版本的NDK原生Windows版本,Cygwin和许多其他改进包括修正:
    重要的错误修正:
        更新sys/ atomics.h中,以避免一些多核心基于ARM的设备上的正确性问题。重建未修改的来源,这个版本的NDK,这个问题应该被完全消除。有关详细信息,请阅读文档/ ANDROID-ATOMICS.html的。
          o 缩图与binutils2.19修复调试中出现的问题NDK R7(切换与binutils2.20.1)。
          o 固定NDK建立在32位Linux上。一个包装错误,把一个64位版本的awk可执行文件下prebuilt/linux-x86/bin在NDK R7。
          o 固定本地Windows版本(NDK,build.cmd)。其他的构建模式并没有受到影响。该修补程序包括:
                删除一个无限循环/堆栈溢出错误发生时,试图不顶你的项目路径(例如,在任何子目录的目录中调用NDK-build.cmd)
                o 修正了一个自动生成的依赖文件被忽略的问题。这意味着,更新的头没有触发重新编译的来源,其中包括
                o 修正了一个问题,即未正确处理特殊字符的文件或路径,除空格和引号。
          o 固定独立的工具,以产生适当的二进制文件时使用lstdc++(即,链接GNU++ C++运行时)。您应该使用lgnustl_shared如果你想链接的共享库版本或lstdc++的静态版本。
          请参阅doc/ STANDALONE-TOOLCHAIN.html的有关此修补程序的详细信息。
          o 修正gnustl_shared在Cygwin。链接器抱怨说,找不到libsupc++。一个,即使该文件是在正确的位置。
          o 修正了Cygwin的C ++链接时,不使用任何特定的C ++运行时通过APP_STL。
    其他的变化:
          o 当应用程序使用的GNU的libstdc++运行时,编译器将不再强行使异常和RTTI。这种变化的结果在更小的代码。
          如果你需要这些功能,您必须执行下列操作之一:
                o 启用异常和/或RTTI明确地在自己的模块或Application.mk。(推荐)
                o 定义app_gnustl_force_cpp_features '例外','语句'或在application.mk。看到doc/ application-mk.html更多细节
          o ndk-gdb现在正常运作时,你的应用有私人服务运行在独立的进程。它的主要应用程序调试过程,而不是第一个上市的过程,通常是一个服务进程。
          o 修正了一个罕见的错误在不良会失败的荣誉local_arm_mode价值和一定总是编译源文件(但不是全部)32位指令
          o 时差:刷新源匹配的机器人平台的版本。此更新修复了一些小错误:
                o 固定一个不完整的类型实例化
                o 固定的小“= =”与“=”错误
                o 使用memmove代替memcpy字符串::分配
                o 添加更好地处理isnanorinf,isinf,isnegnan,等
          完整的细节,见提交日志。
          o stlport:删除不必要的静态初始化器从图书馆5。
          o GUN libstdc + +库armeabi-v7a被误为armeabi相反。这种变化并没有影响准确性,但使用正确的能力应该提供更高。
          o 的cpu-features辅助库更新报告三可选的86 CPU特征(ssse3,movbe和popcnt)。看医生/ cpu-features.html更多细节。
          o 文档/ ndk-build.html更新提ndk_application_mk代替ndk_app_application_mk选择一个自定义application.mk文件。
          o Cyg win:ndk-build不再创建一个空的“空”在当前目录中的文件时调用。
          o Cyg win:加入了更好的自动依赖检测。在以前的版本,它不能正确的工作在以下情况:
                o 当Cyg win驱动器不cygdrive前缀。
                o 时使用drive-less坐骑,例如,当Cyg win转化/家\ \服务器\子目录而不是:一些\目录。
          o Cyg win:ndk-build不尝试使用原生视窗工具在美元/预置/窗口/斌与某些版本的这个软件和/或角马交
Android NDK, Revision 7 (November 2011)
    这个版本的新功能包括基于支持机器人4台以及其他许多补充和改进:
    新特点
          o 补充官方API(应用编程接口在机器人4级14),增加了以下的本土特征的平台。
                o 增加本地多媒体接口的基础上khronos集团Open MAX吗?一个标准。新的&omxal/openmaxal.h&和&omxal/openmaxal_android.h&头允许应用程序针对原料药14级进行多媒体输出直接从本地代码使用一种新的机器人专用的缓冲区队列接口。更多详情,见文件/openmaxal/index.html和断点续传://www.khronos Open MAX/组织。
                o 更新本地音频接口的基础上khronos集团opensl胚胎赛?标准的。用14级,你现在可以解码音频压缩(例如,音频,vorbis)到脉码调制。更多详情,见文件/ opensles / index.html和
          o 添加ccache支持。加快大型重建,确定ndk_ccache环境变量ccache(或路径到您的ccache二进制)。当宣布,在建立系统自动使用ccache当编译源文件。比如说呢:
export NDK_CCACHE=ccache
          o 增加支持设置app_abi都表示要建立在模块的所有接口支持您在释放了。这意味着,无论是以下一行中的application.mk相当的这个版本。
APP_ABI := all
APP_ABI := armeabi armeabi-v7a x86
           这也适用如果你定义app_abi ndk-build从命令行调用时,这是一个快速的方法来检查你的项目建设对所有支持的区域不改变项目的application.mk文件。比如说呢:
ndk-build APP_ABI=all
          o 添加了一个local_cpp_features变量android.mk,让你宣布这+功能(语句或模块使用例外)。这确保了最终连接工作正常,如果你有预依赖这些功能模块。看医生/ android-mk.html和文档/ cplusplus-support.html更多细节。
          o 缩短路径的源和目标文件中所使用的建造命令。当调用$电波/ ndk-build从项目的路径,该路径的源,目标,和二进制文件所传递的命令是大大缩短了,因为他们通过相对于当前目录。这是有用的建设项目,许多源文件,避免限制的最高命令行长度由主机操作系统。如果你调用的行为是不变的ndk-build从一个子目录的项目,或者如果你定义ndk_project_path指向一个特定的目录。
    实验特征
           你现在可以建立在源文件窗口没有Cyg win通过调用ndk-build.cmd脚本命令行项目路径。该脚本需要完全相同的参数作为原始ndk-build脚本。窗户在包都有自己的预置二进制程式,程式和其他工具所需要的建立。你不需要安装任何其他去建立一个工作系统。
重要:ndk-gdb不工作,所以你仍然需要这个软件调试。
           此功能仍然是实验性的,所以觉得免费试用和报告问题的公共数据库或公共论坛。所有样品和单元测试装在成功编译此功能。
    重要的错误修正
          o 进口的共享库现在是默认安装的安装位置(库/ &能力&)如果app_modules未定义的application.mk。例如,如果一个顶层模块的食品进口模块,然后libfoo.so和libbar.so复制到安装位置。以前,只有libfoo.so复制,除非你在你的app_modules太上市。如果你app_modules明确定义的行为,是不变的。
          o ndk-gdb现在正确的活动与多个类别的主要意图过滤器。
          o 静态库进口现在正确的传递。例如,如果一个顶层模块的食品进口静态库,进口静态库的动物园,libfoo.so现在将与对libbar和libzoo.a。
    其他的变化
          o 文档/ native-activity.html:固定错字。最低的水平应该是9,不是8个本地活动。
          o 文档/ stable-apis.html:添加丢失的文件列表东瀛作为支持稳定的原料药,原料药起始于9级。
          o download-toolchain-sources.sh:更新下载工具来源,这是新定位为aosp服务器。
          o 增添了一个新的VC + +支持运行时命名为加比+ +。关于它更多细节可在更新文档/ cplusplus-support.html。
          o 增添了一个新的VC + +支持运行时命名为gnustl_shared对应的共享库的版本角马libstdc + + V(GPL v3许可证)。更多信息在文档/ cplusplus-support.html
          o 增加支持运行时类型信息的stlport vc + +运行(不支持例外)。
          o 添加支持多个文件扩展名的local_cpp_extension。例如,编译都foo.cpp和bar.cxx为+来源,声明如下:
LOCAL_CPP_EXTENSION := .cpp .cxx
          o 删除了许多不必要的出口从符号链接共享系统提供了在图书馆。这确保了代码生成独立的工具并不危险意外取决于非稳定能力的符号(如libgcc。一个象征,每次都会改变的工具用来建立平台化)。
          o 刷新东瀛和编译khronos头支持更多的扩展。请注意,这并没有改变在接口的相应的图书馆,因为每个扩展必须探索在运行时由客户端应用程序。
           扩展可取决于您的实际设备和处理器的司机,没有平台版本上运行的装置。头的变化仅仅添加新的常数和类型,使它更容易使用的扩展时,他们已探索与eglgetprocaddress()或glgetprocaddress()。下面列出了新的支持扩展:
           GLES 1.x
                 o GL_OES_vertex_array_object
                 o GL_OES_EGL_image_external
                 o GL_APPLE_texture_2D_limited_npot
                 o GL_EXT_blend_minmax
                 o GL_EXT_discard_framebuffer
                 o GL_EXT_multi_draw_arrays
                 o GL_EXT_read_format_bgra
                 o GL_EXT_texture_filter_anisotropic
                 o GL_EXT_texture_format_BGRA8888
                 o GL_EXT_texture_lod_bias
                 o GL_IMG_read_format
                 o GL_IMG_texture_compression_pvrtc
                 o GL_IMG_texture_env_enhanced_fixed_function
                 o GL_IMG_user_clip_plane
                 o GL_IMG_multisampled_render_to_texture
                 o GL_NV_fence
                 o GL_QCOM_driver_control
                 o GL_QCOM_extended_get
                 o GL_QCOM_extended_get2
                 o GL_QCOM_perfmon_global_mode
                 o GL_QCOM_writeonly_rendering
                 o GL_QCOM_tiled_rendering
           GLES 2.0
                 o GL_OES_element_index_uint
                 o GL_OES_get_program_binary
                 o GL_OES_mapbuffer
                 o GL_OES_packed_depth_stencil
                 o GL_OES_texture_3D
                 o GL_OES_texture_float
                 o GL_OES_texture_float_linear
                 o GL_OES_texture_half_float_linear
                 o GL_OES_texture_npot
                 o GL_OES_vertex_array_object
                 o GL_OES_EGL_image_external
                 o GL_AMD_program_binary_Z400
                 o GL_EXT_blend_minmax
                 o GL_EXT_discard_framebuffer
                 o GL_EXT_multi_draw_arrays
                 o GL_EXT_read_format_bgra
                 o GL_EXT_texture_format_BGRA8888
                 o GL_EXT_texture_compression_dxt1
                 o GL_IMG_program_binary
                 o GL_IMG_read_format
                 o GL_IMG_shader_binary
                 o GL_IMG_texture_compression_pvrtc
                 o GL_IMG_multisampled_render_to_texture
                 o GL_NV_coverage_sample
                 o GL_NV_depth_nonlinear
                 o GL_QCOM_extended_get
                 o GL_QCOM_extended_get2
                 o GL_QCOM_writeonly_rendering
                 o GL_QCOM_tiled_rendering
           EGL
                 o EGL_ANDROID_recordable
                 o EGL_NV_system_time
Android NDK, Revision 6b (August 2011)
    这个版本在不包含任何新的特点与发展。在充满版本解决下列问题的释放:
    重要的错误修正o固定时建立的app_abi =“armeabi 86”是用于多建筑建设。
          o 固定位置的预stlport二进制文件在发布软件包。错误的包装脚本放在错误的位置。
          o 固定atexit()使用共享库的x86standalone工具。
          o 固定make-standalone-toolchain.sh——拱= 86。它曾经不复制适当的角马libstdc + +双星的正确位置。
          o 固定独立的工具连接器警告失踪的定义和大小的__dso_handle符号(只)。
          o 固定列入达(sysroot)/认证包括建设为86。看到错误的更多信息。
          o 固定的定义,ptrdiff_t和size_t在x86-specific系统时,他们使用32位独立的工具。
Android NDK, Revision 6 (July 2011)
    这个版本在包括支持的技术能力和其他小的变化。详细资料说明本新闻稿中的变化,读changes.html文件包括在包。
    一般注释:
          o 添加支持32位,这使你产生的机器上运行的代码兼容x86机器人装置。主要功能包括系统中x86-specific toolchains,标题,图书馆和调试支持。所有的细节方面的技术支持,见文件/ cpu-x86.html在基于包。
           默认情况下,生成的代码为基于ARM的装置,但您可以添加到您的app_abi定义中的application.mk文件建立技术平台。例如,下列指示ndk-build建立你的代码为三个不同的区域:
APP_ABI := armeabi armeabi-v7a x86
           除非你依靠ARM的集会,你不需要触摸你的android.mk文件建立x 86机器码。
          o 你可以建立一个独立的技术工具使用——工具= x86-4.4.3选项时,呼叫make-standalone-toolchain.sh。看到文档/ standalone-toolchain.html更多细节。
          o 新ndk-stack工具让你翻译的堆栈跟踪,在logcat所产生的本地代码。该工具翻译指令地址到一个可读的格式,包含诸如功能,源文件和行号,对应于每个堆栈帧。更多的信息和使用的例子,见文件/ ndk-stack.html。
    其他的变化:
           arm-eabi-4.4.0已经过时,因为在赛车,已被删除从电波分布。
Android NDK, Revision 5c (June 2011)
    这个版本在不包含任何新功能比较的r5b。r5c释放涉及下列问题的r5b释放:
    重要的错误修正:
          o ndk-build:修正了一个罕见的错误出现时试图执行并行的可调试项目建设。
          o 固定一个错字,防止local_whole_static_libraries正确工作的新工具和补充文件这个文件/ android-mk.html。
          o 修正代码对gnustl_static撞上运行时,平台发布以上原料药8级(2.2)。
          o ndk-gdb:修正了一个导致分段错误调试时,机器人3或更新设备。
          o &机器人/输入。小时&:功能,介绍了原料药的9级(2.3)是不正确的,固定的。而这打破了源程序,二进制接口的系统是不变的。不正确的功能缺失history_index参数,和正确的定义如下:
float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
size_t pointer_index,
size_t history_index);
float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
size_t pointer_index,
size_t history_index);
          o 更新的二进制库臂用9级(2.3)正确揭露连接新的功能,增加了原料药的水平(例如,thread_flock_init)。
    小的改进和修正:
          o 对象文件现在总是联系在一起的,他们出现在local_src_files。这是以前没有的情况因为文件是按源扩展代替。
          o import-module失败时,它现在打印的目录列表,搜索。这是有用的检查,ndk_module_path定义所建立的系统是正确的。
          o import-module成功时,它现在打印目录里的模块被发现日志(可见与ndk_log = 1)。
          o 增加建设速度可调试应用时,有一个非常大的数目,包括目录中的项目。
          o ndk-gdb:更好地检测亚行外壳失败和改进错误消息。
          o &是&:固定。小时的定义为原料药pthread_rwlock_initializer 9级(2.3)和较高的。
          o 修正了一个模块可以进口,导致在一个无限循环中的牛羚让。
          o 修正导致生成失败如果local_arm_neon被设置为真(错字建立/核心/ build-binary队。)。
          o 修正汇编。大会文件(文件都好。)。
Android NDK, Revision 5b (January 2011)
    这个版本在不包含任何新的功能比r。该r5b释放涉及下列问题的赛车版本:
          o 赛车套件2.11二进制文件要求,但r5b二进制文件生成一个特殊的工具,目标为2.7或更高而套件。编程工具的二进制文件运行在8.04或更高。
          o 修复编译器错误的arm-linux-androideabi-4.4.3工具。以前的二进制指令序列生成无效的拇指时签署的字符。
          o 增加了失踪的文件“gnustl_static”价值app_stl,允许你对一个静态链接库版本角马libstdc + +。
          o 以下ndk-build问题是固定的:o错误,创造了不依赖文件编译错误发生时窗。这使一个适当的建设后,错误是固定的源代码。
                o 一cygwin-specific错误使用很短的路径的机器人安装或工程路径导致产生无效的依赖文件。这使增量建设不可能。
                o 错字,防止cpufeatures图书馆从正常工作与新的基于工具。
                o 建立在Cyg win更快避免来电cygpath -米角马,使每一个源或目标文件,造成的问题具有非常大的源码树。如果这个工作不正常,定义ndk_use_cygpath = 1在您的环境中使用cygpath-再次。
                o Cyg win安装现在通知用户无效的安装路径中包含空格。以前,一个无效的路径将输出一个错误,抱怨不正确的版本的角马,即使是正确的安装。
          o 固定一个错字,防止ndk_module_path环境变量正常工作时,它包含多个目录用冒号分隔。
          o 的prebuilt-common.sh脚本包含固定检查编译器的64位生成机器代码,而不是依赖于宿主的标签,使32位的工具重建正确的雪豹。重建的工具脚本现在也支持使用32位的主机工具。
          o 失踪宣言inet_addrstrlen加入& netinet /小时&。
          o 遗失声明in6_is_addr_mc_nodelocal和in6_is_addr_mc_global被添加到& netinet / 6小时&。
          o 'asm '改为' __asm__ ' &学会/字节顺序。小时&允许编译与性传播疾病名称。
Android NDK, Revision 5 (December 2010)
    这个版本在包括了许多新的API,其中大部分是推出支持游戏开发和类似的应用,广泛使用本地代码。使用API,开发商直接本地访问事件,音频,图形和窗口管理,资产,和存储。开发者也可以执行的应用程序生命周期的代码帮助新nativeactivity班。详细资料说明本新闻稿中的变化,读changes.html文件包含在下载的基于包。
    一般附注:
          o 还支持本地的活动,你可以执行应用程序生命周期的代码。
          o 增加了本地支持以下:o输入子系统(如键盘和触摸屏)
                o 获得传感器数据(加速度,罗经,陀螺,等)。
                o 事件循环的API等待的东西,如输入传感器事件。
                o 窗口和子系统
                o 音频API为基础的opensl胚胎干的标准,支持回放、录音以及控制平台的音频效果
                o 获得的资产打包在一个文件。
          o 包括一个新的工具(根据海合会动词),产生更好的代码,也可以被用来作为一个独立的交叉编译器,为人们谁想要建立自己的东西。/配置&使。看医生/ standalone-toolchain.html的细节。二进制文件的快还提供,但2二进制文件被删除。
          o 加支持预设的静态和共享库(文件/ prebuilts。网页)和模块的出口和进口共享和重用的模块(文件/ import-module.html很容易解释为什么)。
          o 提供一个默认的VC + +中实现(根据stlport)作为一个辅助模块。它可以用来作为一个静态或共享库(细节和使用的例子是在源/机器人/ stlport /自述)。预编译的二进制stlport(静态或共享)和「libstdc + +(静态的)还提供如果你选择编译那些图书馆代替默认的VC + +中实现。+例外和运行时类型不支持默认的程序实现。更多信息,见文件/ cplusplus-support.html。
          o 包括改进的cpufeatures辅助库,提高报告的类型(有些设备以前的报告armv7处理器设备时,真的是一个armv6)。我们建议开发者使用这个图书馆重建他们的应用程序然后上传到谷歌发挥效益的改进。
          o 加入东瀛库,可让您创建和管理中,纹理和服务。
          o 增添新的示例应用程序,native-plasma和native-activity,演示了如何写一个本地活动。
          o 包括许多错误修正和其他小的改进;见文件/ changes.html进行更详细的清单的变化。&br/
Android NDK, Revision 4b (December 2010)
    在r4b笔记:
    修正了几个问题,包括在建立和调试脚本-如果您使用的是基于品牌,推荐大家下载在r4b建。详细资料说明本新闻稿中的变化,读changes.txt文件包含在下载的基于包。
    一般注释:
          o 提供了一个简化的构建系统通过新的ndk-build建造命令。
          o 添加支持本地调试容易生成机器代码的生产设备通过新ndk-gdb命令。
          o 增加了一个新的机器人专用ARM处理器架构对,armeabi-v7a。新阿比扩展现有的armeabi能力包括这些处理器的指令集扩展:
                o thumb-2指令
                o 实现硬件浮点运算指令(vfpv3-d16)
                o 可选支持先进单指令多数据(霓虹灯)函数和vfpv3-d32海湾合作委员会。支持设备等公司的摩托罗拉德罗伊德,谷歌之一,和其他人。
          o 增加了一个新的cpufeatures静态库(来源),让您的应用程序的主机设备的中央处理器检测功能在运行时。具体来说,应用程序可以检查armv7-a支持,以及vfpv3-d32和霓虹灯的支持,提供不同的代码路径,需要。
          o 增加了一个示例应用程序,hello-neon,演示了如何使用图书馆的cpufeatures检查处理器的特点和提供一个优化的代码路径使用霓虹灯instrinsics,如果支持的处理器。
          o 让您生成机器码的一方或双方的指令集的支持在。例如,您可以建立为armv5和armv7-a架构的同时,都保存到您的应用程序的最终之。
          o 确保您的应用程序提供给用户只有在其设备能够运行,谷歌现在玩的过滤器为基础的应用指令集的信息包括在您的应用程序不需要采取行动对你的一部分,使过滤。此外,机器人系统本身也检查你的应用程序在安装时,允许安装只继续如果应用程序提供了一个图书馆,编制设备的处理器架构。
          o 增加支持的机器人2.2,包括一个新的稳定的接口访问像素缓冲区位图对象从本地代码。
Android NDK, Revision 3 (March 2010)
    一般注释:
          o 加中胚胎2土库支持。
          o 增加了一个示例应用程序,hello-gl2,说明使用的是2个顶点和片段着色器。
          o 双星的工具已刷新此版本与海湾合作委员会快,这应该产生稍微更紧凑和高效的机器代码比以前(法)。在2也仍然提供了二进制程序,你可以选择使用来建立您的机器码。
Android NDK, Revision 2 (September 2009)
    最初发布的“机器人1.6电波,版本1”。
    一般注释:
          o 加中胚胎1.1土库支持。
          o 增加了一个示例应用程序,san-angeles,呈现三维图形中,通过本地API,而管理活动与glsurfaceview对象生命周期。
Android NDK, Revision 1 (June 2009)
    最初发布的“机器人1.5电波,版本1”。
    一般注释:
          o 包含编译器支持(海合会)为armv5te指令,包括thumb-1指令。
          o 包括系统稳定的原生API标题,文件,和示例应用程序。
以下各节描述的系统和软件的要求,采用了Android NDK,以及为平台兼容性的考虑,影响appplications使用图书馆的NDK。
一个完整的Android SDK安装(包括所有依赖关系)是必需的。
Android 1.5的SDK或更高版本需要。
WINDOWS XP(32位)或Windows Vista(32
- 位或64位)
Mac OS X 10.4.8或更高版本(仅适用于x86)
Linux操作系统(32位或64位Ubuntu的8.04,或其它Linux发行版使用glibc2.7或更高版本)
对于所有的开发平台,GNU3.81或更高版本。早期版本的GNU make可能工作,但还没有经过测试。
最近的awk版本中(无论是GNU awk或NAWK),也是必需的。
对于Windows,Cygwin的1.7或更高版本是必需的。 NDK不会使用Cygwin1.5安装工作。
o本机库创建了Android NDK只能用于运行特定的最低版本的Android平台的设备上。所需的最小平台版本取决于你的目标设备的CPU架构。下表详细说明Android平台的版本是兼容与本机代码开发特定的CPU架构。
本机代码使用的CPU架构
兼容Android平台(S)
ARM, ARM-NEON
Android 1.5(API等级3)和较高的
Android 2.3 (API等级9)和较高的
Android 2.3 (API等级9)和较高的
这些要求意味着您可以使用本机库在应用程序部署到基于ARM的设备运行Android1.5或更高版本的NDK。如果您正在部署的本地库,x86和MIPS为基础的设备,必须针对您的应用程序的Android 2.3或更高版本。
为了确保兼容性,应用程序使用的NDK本地库必须在清单文件中声明&uses-sdk&元素,在Android:minSdkVersion属性值“3”或更高。例如:
&manifest&
&uses-sdk android:minSdkVersion=&3& /&
&/manifest&
如果你使用这个NDK来创建一个本地库,使用的OpenGL ES API的,包含库的应用程序可以部署到设备运行的最低平台下表中描述的版本。为了确保兼容性,请确保您的应用程序声明的Android版本:minSdkVersion属性值,如下表所示:
使用OpenGL ES版本
兼容Android平台(S)
需要uses-SDK属性
OpenGL ES 1.1
Android 1.6 (API等级4)和较高的
android:minSdkVersion="4"
OpenGL ES 2.0
Android 2.0 (API等级5)和较高的
android:minSdkVersion="5"
空气污染指数空气污染水平及其与Android平台版本的更多信息,请参见Android API的级别。
此外,使用OpenGL ES API的应用程序应在其清单中声明一个&uses-feature&元素,在Android:的glEsVersion属性,该属性指定应用程序所需的最低的OpenGL ES版本。这将确保谷歌比赛将只显示您的应用程序的设备能够支持您的应用程序的用户。例如:
&manifest&
&uses-feature android:glEsVersion=&0x& /&
&/manifest&
欲了解更多信息,请参阅&uses-feature&文档。
如果你使用NDK来创建一个本地库,使用API来访问Android位图像素缓冲区,或利用本地活动,包含库的应用程序可以只部署到运行Android 2.2(API8级)或更高版本的设备。为了确保兼容性,请确保您的应用程序声明&uses-sdk android:minSdkVersion="8"在其清单中的属性值。
在开发计算机上安装NDK是简单的,涉及从下载包中提取NDK。
在你开始之前确保你已经下载了最新的Android SDK和升级您的应用程序和环境。 NDK是兼容旧的平台版本,但没有旧版本的SDK工具。此外,花一些时间来查看系统和软件要求的NDK,如果你还没有。
要安装NDK,请按照下列步骤操作:
在这页的顶部,从表中,选择NDK包,为您的开发计算机上是适当的,下载包。
解压缩NDK下载使用您的计算机上可用的工具包。未压缩时,NDK文件中包含一个目录名为Android NDK-&VERSION&的。您可以重新命名NDK的目录,如果有必要,你可以将它移动到你的电脑上的任何位置。此文件是指NDK目录&ndk&。
现在,您已经准备好开始工作的NDK。
一旦你已经成功安装NDK,花几分钟的时间阅读文档中包含的NDK。你可以找到在&ndk&/ docs /目录下的文件。特别是,请阅读OVERVIEW.HTML文件,完全让你明白的NDK的意图和如何使用它。
如果您使用的是以前版本的NDK,花一点时间来审查的NDK的变化在CHANGES.HTML文件列表。
这里的大致轮廓的NDK工具,您的工作方式:
将您的本地源代码的&project&/ JNI/...
创建的&project&/ JNI / Android.mk NDK编译系统描述你的本地源。
可选:创建&项目&/ JNI/ Application.mk
建立本机代码运行项目目录“NDK构建脚本。它坐落在顶级NDK目录
cd &project&
&ndk&/ndk-build
     5.  最后,在通常的方式使用SDK工具编译应用程序。 SDK构建工具包会在应用程序的部署。apk文件的共享库。
对于上面列出的所有步骤的完整信息,请参阅与NDK包中包含的文档。
Android框架提供了两种方式来使用本地代码:
写您的应用程序使用了Android框架,并使用JNI来访问了Android NDK提供的API。这种技术可以让您充分利用Android框架的便利,但仍允许您编写本地代码,在必要时。如果你使用这种方法,您的应用程序必须针对具体的,最小的Android平台的水平,看到Android平台的兼容性的更多信息。
写一本机的活动,可以让你实现在本机代码中的生命周期回调。 Android SDK提供了NativeActivity的类,它是一个方便的类,通知您的本机代码的任何活动的生命周期回调(onCreate()中,onPause(),onResume()等)。您可以在您的本机代码实现的回调来处理这些事件,这些事件发生时。使用本机活动的应用程序必须运行在Android2.3(API等级9)或更高版本。
您不能访问的功能,如服务和内容提供商本身,所以如果你想使用它们,或任何其他框架API,你仍然可以写JNI代码这样做。
NDK包含的API,文档,示例应用程序,帮助你写你的本机代码。特别是:
一组工具和编译文件,用于从C和C++源代码生成本地代码库
一种嵌入相应的本地库,可以部署在Android设备上的应用程序包文件(APK)
A组中的所有未来版本的Android平台将支持原生系统头文件和库,从Android1.5开始。使用本机活动的应用程序必须运行在Android2.3或更高版本。
文档,示例和教程
最新版本的NDK支持的指令集:
ARMv5TE,包括拇指说明(有关详细信息,请参阅文档/ CPU-ARCH-ABIS.html)
用于ARMv7-A,包括Thumb-2-D16 VFPv3的指示,与可选的支持为NEON/VFPv3-D32指示(请参见相关文档/ CPU-ARM-NEON.html的更多信息)
x86指令(见docs/CPU-X86.html更多信息)
MIPS指令(见文档/ CPU-MIPS.html的更多信息)
ARMv5TE机器代码将运行在所有基于ARM的Android设备。用于ARMv7-A将只运行在设备上,如Verizon的Droid和谷歌Nexus One有一个兼容的CPU。两个指令集之间的主要区别就是用于ARMv7-A支持Thumb-2的硬件FPU,和NEON指令。您可以针对一个或两个指令集 -
ARMv5TE是默认的,但切换到的ARMv7-A是一样容易,而无需改变任何东西在文件中添加一行到应用程序的Application.mk文件。同时,您也可以建立两种架构和存储在决赛中的一切。apk文件。提供完整信息的NDK包中在CPU-ARCH-ABIS.HTML的中。
NDK提供了稳定的标头的libc(C库),libm的(数学库),ES(OpenGL的3D图形库),JNI接口,和其他库,如“开发工具”部分中列出的。
NDK包含了一组交叉工具链(编译器,连接器等),可以产生原生的ARM二进制文件在Linux,OS X和Windows(Cygwin的)平台。
它提供了一套稳定的原生API,这样可以保证更高版本的平台支持所有系统头文件:
的libc(C库)头
libm的数学库头
中的libz(Zlib压缩)头
liblog(Android的记录)头
OpenGL ES 1.1和OpenGL ES 2.0的(三维图形库)头
的libjnigraphics(像素缓冲区的访问)头(适用于Android 2.2及以上)。
最小的一组头用于C ++支持
OpenSL ES本机的音频库
Android原生应用程序API
NDK还提供了生成系统,可以让你的工作效率与你的源代码,而无需处理工具/平台/ CPU/ ABI的详细信息。您可以创建很短的构建文件来描述它的来源,编译和Android应用程序将使用它们 - 构建系统的源代码编译和地方的共享库直接在您的应用程序项目。
重要提示:除了上面列出的库,在Android平台上的本地系统库并不稳定,可能会改变未来的平台版本。你的应用程序只应使用稳定的原生系统,在这个NDK提供的库。
NDK包包括一组文档描述的能力,NDK,以及如何用它来为你的Android应用程序中创建共享库。在此版本中,该文档只提供下载NDK包。你可以找到在&ndk&/ docs /目录下的文件。这些文件包括(部分清单):
INSTALL.html的 - 介绍如何安装NDK,将其配置为您的主机系统
OVERVIEW.HTML - 提供了一个概述NDK的功能和用法
ANDROID-MK.HTML - 描述了使用的Android.mk文件,它定义了本机的来源,你要编译
应用MK.HTML - 描述Application.mk文件,它描述了使用本机需要你的Android应用程序的来源
CPLUSPLUS SUPPORT.HTML - 描述了在Android NDK提供的支持C
CPU-ARCH-ABIS.HTML - 支持的CPU架构,以及如何针对他们的描述。
CPU FEATURES.HTML - 描述的cpufeatures静态库,让您的应用程序代码中检测到目标设备的CPU家族和可选的功能,在运行时。
CHANGES.HTML - 在所有版本的NDK的完整列表。
DEVELOPMENT.HTML - 介绍如何修改NDK和产生它的发布包
HOWTO.HTML - 关于与NDK发展相关的常见任务的信息
进口MODULE.HTML - 介绍如何共享和重复使用模块
LICENSES.HTML - 各种不同的开源许可证管理的Android NDK信息
本机ACTIVITY.HTML - 介绍如何实现本地活动
NDK-BUILD.HTML - 描述了使用NDK构建脚本
NDK-GDB.HTML - 介绍如何使用本机代码调试器
PREBUILTS.HTML - 信息共享与静态预建库工作
独立TOOLCHAIN.HTML - 介绍如何使用的Android NDK工具链作为一个独立的编译器(仍处于测试阶段)。
系统ISSUES.HTML的 - 已知问题在Android系统中的图像,你应该知道,如果你正在开发使用NDK。
稳定APIS.HTML的稳定的API暴露在NDK头 - 一个完整的列表
此外,该套件包含“仿生”C库提供的Android平台,你应该知道,如果你正在开发使用NDK的详细信息。你可以找到的&ndk&/文档/系统/ libc中/目录中的文档:
overview.html - “仿生”C库,并提供了一个概述,它提供的功能。
NDK包括示例应用程序来说明如何使用本机代码在你的Android应用程序:
HELLO-jni的 - 一个简单的应用程序加载一个字符串从一个本地方法实现共享库中,然后将其显示在应用程序UI。
库 - 一个简单的应用程序,动态加载的共享库,并调用一个本地方法库提供的。在这种情况下,该方法被实现静态库中的进口的共享库。
圣 - 洛杉矶 - 一个简单的应用程序,通过本机的OpenGL ES API的渲染3D图形,而管理活动与GLSurfaceView对象的生命周期。
HELLO-GL2 - 一个简单的应用程序,使用OpenGL ES 2.0的顶点和片段着色器渲染一个三角形。
您好,霓虹灯 - 一个简单的应用程序,显示在运行时,如何使用cpufeatures的库来检查CPU的能力,然后使用NEON内在函数,如果CPU所支持。具体而言,应用程序实现了两个版本,一个微小的基准的FIR滤波器环路,C版本和一个NEON优化的版本支持它的设备。
位图等离子 - 一个简单的应用程序,演示了如何访问从本机代码的Android Bitmap对象的像素的缓冲区,并使用它来产生一个老派的“等离子”的效果。
本机活动 - 一个简单的应用程序,演示如何使用本机应用程序胶的静态库来创建一个本地活动。
本地等离子 - 一个版本的位图等离子实现与本地活动。
对于每个样本,NDK包含相应的C源代码和必要的Android.mk和Application.mk文件。位于下&ndk&/样品/&NAME&的/他们的源代码,可以发现下的&ndk&/样本/&NAME&的/ JNI/。
进入&ndk&/样品/&NAME&的/然后调用NDK-build命令,您可以构建示例应用程序的共享库。生成的共享库将位于&ndk&/的样本/&NAME&/库/ armeabi/(ARMv5TE机器代码)和/或的&ndk&/样本/&NAME&的/ libs/armeabi-v7a,/(ARMv7体系机器代码)。
接下来,构建样品Android应用程序使用共享库:
如果您在开发Eclipse的ADT,使用新项目向导来创建一个新的Android项目,每个样本,使用“导入从现有源”选项和进口的来源的&ndk&/样本/&NAME&的/。然后,建立一个AVD,如果有必要,并建立/在模拟器中运行的应用程序。
如果您正在开发使用Ant,使用Android的工具来创建构建文件的样本项目的&ndk&/样本/&NAME&的/。然后建立一个AVD,如果有必要,在通常的方式建立你的项目,并在模拟器中运行。
欲了解更多信息开发的Android SDK工具,你需要做的创建,构建和运行您的应用程序,请参阅“概述”部分,在Android开发。
如何从一个Android应用程序中使用JNI的hello-jni的例子是一个简单的示范。 HelloJni活动从一个简单的C函数接收一个字符串,并将其显示在TextView。
样品的主要组成部分包括:
熟悉基本结构的一个Android应用程序的AndroidManifest.xml文件中的src / res目录,主要活动
JNI的,其中包括本机代码实现的源文件以及Android.mk文件/目录
A测试/目录包含单元测试代码
创建一个新的Eclipse项目中,从现有的样本源,或使用Android的工具,所以它会生成一个build.xml文件,你可以用它来生成示例更新项目。
o在Eclipse中:
a.Click文件“&”新建Android项目...
b.Select从现有的源单选按钮创建项目。
c.Select任何API的Android 1.5以上的水平。
d.In“位置”字段中,单击“浏览...”,并选择&ndk-root&的/样/的hello-jni目录。
e.Click完成。
o在命令行:
a.Change的&ndk-root&/样本/ HELLO-jni目录。
b.Run下面的命令来生成一个build.xml文件
android update project -p . -s
编译本机代码使用NDK-build命令
cd &ndk-root&/samples/hello-jni
&ndk_root&/ndk-build
构建和安装的应用程序作为一个普通的Android应用程序。如果你使用的是Eclipse,构建和安装的设备上运行的应用程序。如果您是使用Ant,运行下面的命令从项目目录
adb install bin/HelloJni-debug.apk
当你在设备上运行的应用程序,字符串Hello JNI应该会出现在您的设备上。您可以探索剩下的样品更多的例子如何使用JNI位于的&ndk-root&/ samples目录。
为母语的活动与Android NDK提供的示例演示如何使用静态库android_native_app_glue的。这个静态库使得更容易创建一个原生的活动,为您提供一个实现,在另一个线程处理您的回调,所以你不必担心他们会阻止你的主UI线程。下面描述的示例的主要部分的:
熟悉的一个Android应用程序的基本结构(AndroidManifest.xml文件中的src / res目录)。 AndroidManifest.xml中声明该应用程序本地和指定文件的本地活动。请参阅NativeActivity的源或看到的&ndk_root&/平台/样本/本地活动/ AndroidManifest.xml文件。
一个JNI/目录包含的本地活动,main.c中,这使用的android_native_app_glue.h的接口实现的活动。这里也存在Android.mk描述本机模块生成系统
要构建这个示例应用程序:
创建一个新的Eclipse项目中,从现有的样本源,或使用Android的工具,所以它会生成一个build.xml文件,你可以用它来生成示例更新项目。
o在Eclipse中:
a.Click文件“&”新建Android项目...
b.Select从现有的源单选按钮创建项目。
c.Select任何API的Android 2.3以上的水平。
d.In“位置”字段中,单击“浏览...”,并选择&ndk-root&的/样本/本地活动目录。
e.Click完成。
o在命令行:
a.Change的&ndk-root&/样本/本地活动目录。
b.Run下面的命令来生成一个build.xml文件
android update project -p . -s
编译本机代码使用NDK-build命令
cd &ndk-root&/platforms/samples/android-9/samples/native-activity
&ndk_root&/ndk-build
构建和安装的应用程序作为一个普通的Android应用程序。如果你使用的是Eclipse,构建和安装的设备上运行的应用程序。如果您是使用Ant,在项目目录中运行以下命令,然后在设备上运行的应用程序。
adb install bin/NativeActivity-debug.apk
Android - 安卓}

我要回帖

更多关于 eclipse ndk 编译 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信