当前位置:首页 » 安卓系统 » androidndkhttp

androidndkhttp

发布时间: 2023-03-16 18:56:12

❶ android ndk开发 如何实现一个so包含另一个so

不推荐在jni库之外用so,因为这种情况下,需要在java代码里面依次加载相关的so。

如果一定要用的话android.mk里面的内容如下:
LOCAL_PATH:= $(call my-dir)
# first so, which will be built shared
include $(CLEAR_VARS)
LOCAL_MODULE := shared1
LOCAL_SRC_FILES := libnshared1.so
include $(PREBUILT_SHARED_LIBRARY)

# second so, which will be built shared
include $(CLEAR_VARS)
LOCAL_MODULE := shared2
LOCAL_SRC_FILES := libnshared2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := yourjni
LOCAL_SRC_FILES := xxxx.cpp
LOCAL_SHARED_LIBRARIES := shared1
LOCAL_SHARED_LIBRARIES := shared2

LOCAL_LDLIBS := -llog

#LOCAL_LDFLAGS = $(LOCAL_PATH)/obj/libstdc++.a
#LOCAL_CPPFLAGS += -lstdc++

include $(BUILD_SHARED_LIBRARY)

❷ android开发,怎么使用ndk编译成.so文件

一、首先下载android-ndk,官方网站是:http://developer.android.com/tools/sdk/ndk/index.html
目前最新的版本是android-ndk-r8e-windows-x86.zip,下载地址:
http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86.zip
下载后把压缩解压出来,例如:D:\ndk,目录下的ndk-build.cmd就是用来编译的批处理命令。
二、编译,打开cmd命令行窗口,cd进入目录:D:\ndk\samples\hello-jni,
然后执行命令:D:\ndk\ndk-build.cmd(如果设置过环境变量则直接使用ndk-build.cmd)来编译hello-jni,如果没有错误会输出:
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
"Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
三、创建android应用程序并使用so文件
打开eclipse创建一个android应用程序HelloJni,默认的com.example.hellojni包下面有一个MainActivity.java,
在此包下添加一个HelloJni.java,

❸ Android各个版本的NDK官方下载链接

NDK官方网站:https://developer.android.google.cn/ndk/downloads/index.html?hl=zh-cn

Google Android NDK官网

ndk_r14b (March 2017)

Windows 32 位: android-ndk-r14b-windows-x86.zip

SHA1校验:

Windows 64 位: android-ndk-r14b-windows-x86_64.zip

SHA1校验:

Mac OS X: android-ndk-r14b-darwin-x86_64.zip

SHA1校验:

Linux 64 位 (x86): android-ndk-r14b-linux-x86_64.zip

SHA1校验:

ndk_r13b (Oct 2016)

Windows 32-bit : android-ndk-r13b-windows-x86.zip

Windows 64-bit: android-ndk-r13b-windows-x86_64.zip

Mac OS X : android-ndk-r13b-darwin-x86_64.zip

Linux: android-ndk-r13b-linux-x86_64.zip

ndk_r13 (Sept 2016)

Windows 32-bit : https://dl.google.com/android/repository/android-ndk-r13-windows-x86.zip

Windows 64-bit : https://dl.google.com/android/repository/android-ndk-r13-windows-x86_64.zip

Mac OS X : https://dl.google.com/android/repository/android-ndk-r13-darwin-x86_64.zip

Linux : https://dl.google.com/android/repository/android-ndk-r13-linux-x86_64.zip

ndk_r12 (June 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r12b-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r12b-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r12b-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip

ndk_r11c (March 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r11c-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r11c-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r11c-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r11c-linux-x86_64.zip

ndk_r11b (March 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r11b-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r11b-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r11b-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r11b-linux-x86_64.zip

ndk_r11 (March 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r11-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r11-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r11-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r11-linux-x86_64.zip

ndk_r10e(Jan 2015)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86_64.exe

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r10e-darwin-x86_64.bin

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r10e-darwin-x86.bin

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin

ndk_r10d(December 2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86_64.exe

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r10d-darwin-x86_64.bin

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r10d-darwin-x86.bin

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86.bin

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86_64.bin

ndk_r10c(October2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10c-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10c-windows-x86_64.exe

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r10c-darwin-x86.bin

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r10c-darwin-x86_64.bin

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10c-linux-x86.bin

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10c-linux-x86_64.bin

ndk_r10b(September2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2

ndk_r10(July2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk32-r10-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk32-r10-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk32-r10-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk32-r10-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86_64.tar.bz2

ndk_r9d(March2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9d-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9d-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2

ndk_r9c(December2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9c-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9c-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9c-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9c-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2

ndk_r9b(October 2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9b-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9b-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9b-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9b-linux-x86_64.tar.bz2

ndk_r9(July 2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2

ndk_r8e(March 2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8e-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8e-linux-x86_64.tar.bz2

Note :

NDKr8e is the first NDK with 32bit and 64bit releases. The prior ones were all32bit and didn’t have any suffix, so r8b would be:

ndk_r8d(December 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8d-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8d-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8d-linux-x86.tar.bz2

ndk_r8C(November 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8C-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8C-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8C-linux-x86.tar.bz2

ndk_r8b(July 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8b-linux-x86.tar.bz2

ndk_r8(May 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8-linux-x86.tar.bz2

ndk_r7c(April 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r7c-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r7c-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r7c-linux-x86.tar.bz2

ndk_r7b(February 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r7b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r7b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r7b-linux-x86.tar.bz2

ndk_r7(November 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r7-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r7-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r7-linux-x86.tar.bz2

ndk_r6b(August 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r6b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r6b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r6b-linux-x86.tar.bz2

ndk_r6(July 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r6-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r6-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2

ndk_r5c(June 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r5c-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2

ndk_r5b(January 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r5b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r5b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r5b-linux-x86.tar.bz2

ndk_r5(December 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r5-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r5-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r5-linux-x86.tar.bz2

ndk_r4b(June 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r4b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r4b-darwin-x86.zip

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r4b-linux-x86.zip

ndk_r4(may 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r4-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r4-darwin-x86.zip

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r4-linux-x86.zip

ndk_r3(March 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r3-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r3-darwin-x86.zip

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r3-linux-x86.zip

❹ android ndk是什么

android是安卓的缩写,NDK是日本电波工业株式会社的英文缩写,Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。

Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。NDK包括以下方面:

1、从C / C++生成原生代码库所需要的工具和build files。

2、将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。

3、支持所有未来Android平台的一系列原生系统头文件和库。

(4)androidndkhttp扩展阅读:

NDK的产品优势:

1、NDK拥有培育人工水晶的丰富经验。而好的人工水晶决定了优质晶振产品的一半的品质。

2、NDK晶振产品尺寸、规格全面,既可满足中小型、超小型电子元器件的要求,也适用于各类规格要求的细分市场。

3、NDK晶体谐振器、晶体振荡器具有非常优越的频率一致性和稳定性。特别在汽车电子市场,即使在严峻的宽温(-40度到150度)和震动撞击环境下,都能保持良好的稳定性。

参考资料来源:网络:NDK

❺ 如何从零开始创建Android NDK应用

本文主内容:
1、 Android NDK 安装
2、 安装Cygwin与使用NDK编译
3、 在Eclipse中集成C/C++开发环境CDT
4、 安装Sequoyah插件
5、 JNI编译环境配置

本文建立在已经完成Android开发环境搭建的基础上。其基础环境至少需要包含以下内容:
1、 JDK
2、 Eclipse
3、 Android SDK and ADT
可以参考我之前的“Android开发环境搭建”。
一、Android NDK 安装与配置
下载Android NDK。下载地址:http://developer.android.com/tools/sdk/ndk/index.html
下载后解压缩到你的工作目录,例如:D:\Java\android-ndk-r8,结果如下图:

注意:samples下面包含几个实例开发演示项目,第一次接触NDK开发,建议先从示例开始。
docs内是技术文档,英语能力强的可以研究研究。
二、安装Cygwin与使用NDK编译
由于NDK开发大都涉及到C/C++在GCC环境下编译、运行,所以在Windows环境下,需要用Cygwin模拟Linux编译环境。
下载:
Cygwin的下载地址:http://www.cygwin.com/

点击右上角的“setup.exe”即可下载。
安装:
第一步:运行setup.exe程序,直接点击Next进入下一步。
第二步:选择安装方式。第一次可以采用Direct Connection在线下载安装,如有现成的离线包,可以选择离线安装(Install from Local Directory)。
第三步:选择安装目录。比如D:\Java\Cygwin,注意此目录是指Cygwin最终的安装目录,不是下载文件蚂皮数暂存目录。
第四步:设置本地包暂存路径。暂存目录默认是放到setup.exe的同级目录下,建议放到指定的文件夹,如D:\Cygwin_install_file。安装完成后把这个文件夹打包备份,以后再配置时不用重新下载。
第五步:设置网络连接方式。这个目前河蟹没爬过来,选第一个即可。
第六步:选闷首择下载站点地址。据说国内163站点的速度不错,我也是用的这个。
第七步:等待加载安装项载入,选择安装项。点击Devel-Default,使之变成Devel-Install,展开后可以看到其下的子项被选中了(网上多数教程都说选中某12个包,找起来太坑爹了,直接全下载了吧,全选多了150M左右)。此界面其他设置都不用动。

第八步:等待下载完成。下载完成时间决定于你选择的安装包数量及网络连接速度,安装我安装的版本,约983M,下载完成后会自动握乱安装到上文设置的安装目录,安装也要时间的,总时间较长,去吃个饭没啥问题。
提醒:第四步的备份建议,尽量去做。如果有备份,第二步中选择离线安装。
验证:
运行安装目录下的“Cygwin.bat”,第一次运行时,它会自动创建用户信息,用户信息存放在“.\Cygwin\home”中。
在运行“Cygwin.bat”打开的命令行窗口输入:“cygcheck -c cygwin”命令,会打印出当前Cygwin的版本和运行状态,如果status是ok的话,则cygwin运行正常。
分别输入:“make –v”和,“gcc –v”命令如果检测成功,会有make和gcc相关版本信息打印出来。

设置NDK路径:
在windows的系统环境变量中添加NDK的路径。使用“/cygdrive/d/Java/android-ndk-r8”这种Linux风格路径,如果使用Windows下的“D:\Java\android-ndk-r8”,Cygwin在编译时会发出警告。

运行Cygwin命令行,可以直接使用此环境变量,当然也可以手动的cd到该目录:

使用NDK编译程序:
现在我们用安装好的NDK来编译一个NDK提供的sample程序hello-jni(我的目录位于:D:\Java\android-ndk-r8\samples\hello-jni)。
第一步:运行Cygwin,配置环境变量后可输入“cd $ndk/samples/hello-jni/”,未配置则输入命令“cd /cygdrive/d/java/android-ndk-r8/samples/hello-jni”,进入到“hello-jni”工程目录。

第二步:编译。输入命令“$ndk/ndk-build”命令即可编译。ndk-build是调用ndk的编译程序。
关于下面的错误,我没遇到,但是前人有总结,记录如下:
错误:Android NDK: Host 'awk' tool is outdated。
解决方法:打开目录“D:\Java\android-ndk-r8\prebuilt\windows\bin\”,删除awk.exe(为保险起见请先备份)。

第三步:到”…/hello-jni/libs/armeabi“目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!

导入NDK的hello-jni示例到Eclipse中:
第一步:在Eclipse中新建一个Android工程HelloJni。在Create Android Project时勾选“Create project from existing source”,Location中填“D:\Java\android-ndk-r8\samples\hello-jni” (注意:在选择API level时需要选择1.5或更高的版本)。
第二步:直接以Android Aplication运行。这里要注意,你之前在使用NDK编译程序时要把这个hello-jni编译过并产生了.so文件,此处才能运行起来。

三、在Eclipse中集成C/C++开发环境CDT
CDT的安装可以使我们在一个工程中,同时开发基于C/C++的Native代码和基于Java语言的壳,之后的配置还可以使得一次编译两部分代码。
下载:
下载地址:http://www.eclipse.org/cdt/downloads.php
说明:
Eclipse C/C++ IDE Indigo SR2:是带CDT的Eclipse开发环境。
p2 software repository:在线安装的地址。(似乎被河蟹爬了)
cdt-master-8.0.2.zip:这个是CDT的离线安装包。(推荐使用这个,保留离线包,复用)

离线安装:
Eclipse -> Help -> Install New Software,点击add。Name:随意,建议使用好记的“CDT_版本”。Location:点击Archive,定位到下载的“cdt-master-8.0.2.zip”文件。
错误:
如果Location的下面出现“Duplicate location”错误,请到Window -> preferences -> Install/Update -> Avaliable Software Site中找到该条,remove之。
验证:
安装完成后,在Eclispe中新建一个项目,如果出现了C/C++项目,则表明CDT插件安装成功了。

四、安装Sequoyah插件
Sequoyah插件用于设置Android工程对Native开发的支持。
官方网址:http://www.eclipse.org/sequoyah/downloads/
在线安装:
官网提供了用于在线安装的Update Site地址以及安装包的下载地址。貌似安装包才1M多,在线安装也没被河蟹爬过,直接在线安装了。勾选全部列出的可安装项并完成安装。
Location:http://download.eclipse.org/sequoyah/updates/2.0/

注意:
在安装界面不要勾选“Group items by category”复选框,默认是勾选的,出现了列表为空(There are no categorized items)的情况。

配置:
安装完Sequoyah插件后,为Android配置NDK路径。
在“window –> preferences ->Android -> 本机开发”中添加NDK的路径。

验证:
右键之前建立的“HelloJni”项目,在“Android Tools”选项中包含“Add Native Support…”选项即成功。
五、JNI编译环境配置
仍旧以之前建立的“HelloJni”为例,到目前为止,如果我们修改“/HelloJni/jni/hello-jni.c”文件,动态链接库libhello-jni.so文件却不会被重新编译生成。这是因为我们没有给JNI项目添加它需要的编译配置和依赖库。现在我们来配置它。
第一步:转换工程。点击“文件 -> 新建 -> 其他”(快捷键:Ctrl+N)。选择“C/C++”下的“Convert to a C/C++ Project(Adds C/C++ Nature)”。进入“下一步”。

第二步:选中你刚才建的“HelloJni”工程,下面左边选“Makefile project”右边选“Cygwin GCC”。确定后提示的“透视图”不清楚是什么,点击“是”即可。

第三步:在“HelloJni”工程上右键,选择“属性”。配置“C/C++ Build”和“C/C++ General -> Paths and Symbols”。
C/C++ Build:点击“C/C++ Build”,在右边的“Builder Settings”中去掉默认勾选的“Use default build command”复选框。设置Build command为“bash D:\Java\android-ndk-r8\ndk-build”。

C/C++ General -> Paths and Symbols:在Includes下add新的GNU C依赖路径。此“HelloJni”工程需要“D:\Java\android-ndk-r8\platforms\android-8\arch-arm\usr\include”即可,以后根据不同项目选择不同的依赖库。

验证:
将“/HelloJni/jni/hello-jni.c”中的字符串“Hello from JNI !”如改为“Hello JNI from Baron!”,运行后在模拟器上输出的字符串改变即说明配置成功。

❻ Android ndk如何与服务器实现HTTP通信

安卓是建立在linux上的虚拟机,除了底层硬件的调用和inux有点关系之外罩弊的话,其他功能的实现基本上都是和linux无关的! 你说的NDK的全称是Native Development Kit,这里说的应该是Android NDK,我们说这个应该是一个C、C++的开发工具包,或者可以理解为开发框架或者开发环境。以前开发安卓应用告基使用的是java现在使用了NDK之后就实现了C、C++的应用开发! 这里我找到了一篇博客就是关于安卓NDK的,物友族粘在下面给你参考一下: /devinzhang/archive/2012/02/29/2373729.html

❼ 如何在Ubuntu下搭建Android NDK开发环境

1 搭建Android SDK开发环境
参考在在Ubuntu下搭建Android SDK开发环境(图文) 首先在Ubuntu下搭建Android SDK开发环境.

2 下载NDK开发包
打开官网: http://developer.android.com/sdk/ndk/index.html 下载NDK 开发包,当前最新版本是r7b,如下图:

下载解压到 ~/bin 目录下,有关如何解压tar.bz2压缩包,请参考链接:linux下各种解包打包命令大全

3 配置NDK环境参数
打开 ~/.bashrc文件:

[plain] view plain
$sudo vim ~/.bashrc

在文件最后一行添加一行如下指令:

[plain] view plain
export PATH=$PATH:~/bin/android-ndk-r7b
保存关闭.

这样配置后,以后就可以很方便地使用NDK包中所包含的工具了。

接下来测试一下.打开终端输入如下指令:

[plain] view plain
$ndk-build -v
如果出现如下显示,就表示可以了.

http://blog.csdn.net/flydream0/article/details/7358540

❽ 如何在Ubuntu下搭建Android NDK开发环境

1 搭建Android SDK开发环境

2 下载NDK开发包

3打开官网: 下载NDK 开发包,当前最新版本是r7b

下载解压到 ~/bin 目录下,

3 配置NDK环境参数

打开 ~/.bashrc文件:

❾ vlc-android要怎么用

一.认识android的架构
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

二.搭建环境
搭建开发环境
对国内的开发者来说最痛苦的是无法去访问android开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了, 国内开发者访问(androiddevtools) 上面已经有了所有你要的资源,同时可以下载到我们的主角framework

但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。

搭建源码编译环境
http://www.cnblogs.com/bluestorm/p/4419135.html
https://source.android.com/source/downloading.html(这里详细的介绍了如何下载编译)
三.开始主题

在一开始写c程序的时候都有一个运行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

//这里的main就是应用的入口
int main(int argc, const char * argv[]){
return 0;
}

在计算机网络原理中我们用socket实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加载套接字库,如果失败返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}

//判断高低字节是不是2,如果不是2.2的版本则退出
if (LOBYTE(wsaData.wVersion) != 2 ||

HIBYTE(wsaData.wVersion) != 2)

{
return;
}

//创建流式套接字,基于TCP(SOCK_STREAM)

SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);

//Socket地址结构体的创建

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定端口号,除sin_family参数外,其它参数都是网络字节序,因此需要转换

//将套接字绑定到一个端口号和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必须用sizeof,strlen不行

listen(socSrv, 5);

SOCKADDR_IN addrClient;//字义用来接收客户端Socket的结构体

int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof

//循环等待接受客户端发送请求

while (1)
{
//等待客户请求到来;当请求到来后,接受连接请求,

//返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞

SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);

char sendBuf[100];

sprintf(sendBuf, "Welcome %s to JoyChou",

inet_ntoa(addrClient.sin_addr));//格式化输出

//用返回的套接字和客户端进行通信

send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多发送一个字节

//接收数据

char recvBuf[100];

recv(sockConn, recvBuf, 100, 0);

printf("%s\\n", recvBuf);
closesocket(sockConn);

}
}

他采用了一个while死循环去监听客户端的请求。
在一遍啰嗦之后,主角终于闪亮的登场了。

先上源代码
public final class ActivityThread {

public static void main(String[] args) {
SamplingProfilerIntegration.start();

CloseGuard.setEnabled(false);

Environment.initForCurrentUser();

EventLogger.setReporter(new EventLoggingReporter());

Security.addProvider(new AndroidKeyStoreProvider());

final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);

Process.setArgV0("<pre-initialized>");

Looper.prepareMainLooper();

//从中可以看到为app开辟了一个线程进入了looper之中

ActivityThread thread = new ActivityThread();
thread.attach(false);

if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}

AsyncTask.init();

if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}

Looper.loop();

throw new RuntimeException("Main thread loop unexpectedly exited");
}

}

看到源码失望了,没有一个while循环啊,其实用了他方法实现
//用一个looper的机制循环监听响应
Looper.prepareMainLooper();

Looper.loop();

进一步深入代码
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;

Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();

// 在这里看到了一个循环监听消息

for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}

Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}

msg.target.dispatchMessage(msg);

if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}

// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}

msg.recycleUnchecked();
}
}

❿ 如何在Android下使用JNI

1.引言
我们知道,Android系统的底层库由c/c++编写,上层Android应用程序通过Java虚拟机调用底层接口,衔接底层c/c++库与Java应用程序间的接口正是JNI(JavaNative Interface)。本文描述了如何在ubuntu下配置AndroidJNI的开发环境,以及如何编写一个简单的c函数库和JNI接口,并通过编写Java程序调用这些接口,最终运行在模拟器上的过程。

2.环境配置

2.1.安装jdk1.6
(1)从jdk官方网站下载jdk-6u29-linux-i586.bin文件。
(2)执行jdk安装文件
[html] view plainprint?
01.$chmod a+x jdk-6u29-linux-i586.bin
02.$jdk-6u29-linux-i586.bin
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin
(3)配置jdk环境变量

[html] view plainprint?
01.$sudo vim /etc/profile
02.#JAVAEVIRENMENT
03.exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
04.exportJRE_HOME=$JAVA_HOME/jre
05.exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
06.exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
$sudo vim /etc/profile
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后退出编辑,并重启系统。

(4)验证安装

[html] view plainprint?
01.$java -version
02.javaversion "1.6.0_29"
03.Java(TM)SE Runtime Environment (build 1.6.0_29-b11)
04.JavaHotSpot(TM) Server VM (build 20.4-b02, mixed mode)
05.$javah
06.用法:javah[选项]<类>
07.其中[选项]包括:
08.-help输出此帮助消息并退出
09.-classpath<路径>用于装入类的路径
10.-bootclasspath<路径>用于装入引导类的路径
11.-d<目录>输出目录
12.-o<文件>输出文件(只能使用-d或-o中的一个)
13.-jni生成JNI样式的头文件(默认)
14.-version输出版本信息
15.-verbose启用详细输出
16.-force始终写入输出文件
17.使用全限定名称指定<类>(例
18.如,java.lang.Object)。
$java -version
javaversion "1.6.0_29"
Java(TM)SE Runtime Environment (build 1.6.0_29-b11)
JavaHotSpot(TM) Server VM (build 20.4-b02, mixed mode)
$javah
用法:javah[选项]<类>
其中[选项]包括:
-help输出此帮助消息并退出
-classpath<路径>用于装入类的路径
-bootclasspath<路径>用于装入引导类的路径
-d<目录>输出目录
-o<文件>输出文件(只能使用-d或-o中的一个)
-jni生成JNI样式的头文件(默认)
-version输出版本信息
-verbose启用详细输出
-force始终写入输出文件
使用全限定名称指定<类>(例
如,java.lang.Object)。2.2.安装android应用程序开发环境
ubuntu下安装android应用程序开发环境与windows类似,依次安装好以下软件即可:
(1)Eclipse
(2)ADT
(3)AndroidSDK
与windows下安装唯一不同的一点是,下载这些软件的时候要下载Linux版本的安装包。
安装好以上android应用程序的开发环境后,还可以选择是否需要配置emulator和adb工具的环境变量,以方便在进行JNI开发的时候使用。配置步骤如下:
把emulator所在目录android-sdk-linux/tools以及adb所在目录android-sdk-linux/platform-tools添加到环境变量中,android-sdk-linux指androidsdk安装包android-sdk_rxx-linux的解压目录。
[plain] view plainprint?
01.$sudo vim /etc/profile
02.exportPATH=~/software/android/android-sdk-linux/tools:$PATH
03. exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH
$sudo vim /etc/profile
exportPATH=~/software/android/android-sdk-linux/tools:$PATH
exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH
编辑完毕后退出,并重启生效。

2.3.安装NDK
NDK是由android提供的编译android本地代码的一个工具。
(1)从androidndk官网http://developer.android.com/sdk/ndk/index.html下载ndk,目前最新版本为android-ndk-r6b-linux-x86.tar.bz2.
(2)解压ndk到工作目录:
[plain] view plainprint?
01.$tar -xvf android-ndk-r6b-linux-x86.tar.bz2
02.$sudo mv android-ndk-r6b /usr/local/ndk
$tar -xvf android-ndk-r6b-linux-x86.tar.bz2
$sudo mv android-ndk-r6b /usr/local/ndk
(3)设置ndk环境变量

[plain] view plainprint?
01.$sudo vim /etc/profile
02.exportPATH=/usr/local/ndk:$PATH
$sudo vim /etc/profile
exportPATH=/usr/local/ndk:$PATH

编辑完毕后保存退出,并重启生效

(4)验证安装

[plain] view plainprint?
01.$ cd/usr/local/ndk/samples/hello-jni/
02.$ ndk-build
03.Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
04.Gdbsetup : libs/armeabi/gdb.setup
05.Install : libhello-jni.so => libs/armeabi/libhello-jni.so
$ cd/usr/local/ndk/samples/hello-jni/
$ ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Install : libhello-jni.so => libs/armeabi/libhello-jni.so

3.JNI实现
我们需要定义一个符合JNI接口规范的c/c++接口,这个接口不用太复杂,例如输出一个字符串。接下来,则需要把c/c++接口的代码文件编译成共享库(动态库).so文件,并放到模拟器的相关目录下。最后,启动Java应用程序,就可以看到最终效果了。

3.1.编写Java应用程序代码
(1)启动Eclipse,新建android工程

Project:JNITest

Package:org.tonny.jni

Activity:JNITest

(2)编辑资源文件

编辑res/values/strings.xml文件如下:编辑res/layout/main.xml文件
我们在主界面上添加了一个EditText控件和一个Button控件。

(3)编辑JNITest.java文件


static表示在系统第一次加载类的时候,先执行这一段代码,在这里表示加载动态库libJNITest.so文件。

再看这一段:

[java] view plainprint?
01.privatenativeString GetReply();
privatenativeString GetReply();
native表示这个方法由本地代码定义,需要通过jni接口调用本地c/c++代码。

[java] view plainprint?
01.publicvoidonClick(View arg0) {
02.edtName.setText(reply);
03.}
publicvoidonClick(View arg0) {
edtName.setText(reply);
}

这段代码表示点击按钮后,把native方法的返回的字符串显示到EditText控件。

(4)编译工程,生成.class文件。

3.2.用javah工具生成符合JNI规范的c语言头文件

在终端中,进入android工程所在的bin目录

[plain] view plainprint?
01.$cd ~/project/Android/JNITest/bin
$cd ~/project/Android/JNITest/bin
我们用ls命令查看,可以看到bin目录下有个classes目录,其目录结构为classes/org/tonny/jni,即classes的子目录结构是android工程的包名org.tonny.jni。请注意,下面我们准备执行javah命令的时候,必须进入到org/tonny/jni的上级目录,即classes目录,否则javah会提示找不到相关的java类。

下面继续:

[plain] view plainprint?
01.$cd classes
02.$javah org.tonny.jni.JNITest
03.$ls
04.org org_tonny_jni_JNITest.h
$cd classes
$javah org.tonny.jni.JNITest
$ls
org org_tonny_jni_JNITest.h

执行javahorg.tonny.jni.JNITest命令,在classes目录下会生成org_tonny_jni_JNITest.h头文件。如果不进入到classes目录下的话,也可以这样:

[plain] view plainprint?
01.$javah -classpath ~/project/Android/JNITest/bin/classesorg.tonny.jni.JNITest
$javah -classpath ~/project/Android/JNITest/bin/classesorg.tonny.jni.JNITest
-classpath 参数表示装载类的目录。

3.3.编写c/c++代码
生成org_tonny_jni_JNITest.h头文件后,我们就可以编写相应的函数代码了。下面在android工程目录下新建jni目录,即~/project/Android/JNITest/jni,把org_tonny_jni_JNITest.h头文件拷贝到jni目录下,并在jni目录下新建org_tonny_jni_JNITest.c文件,编辑代码如下:

[cpp] view plainprint?
01.#include<jni.h>
02.#include<string.h>
03.#include"org_tonny_jni_JNITest.h"
04.
05.
06.JNIEXPORTjstring JNICALLJava_org_tonny_jni_JNITest_GetReply
07.(JNIEnv *env, jobject obj){
08.return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");
09.}
#include<jni.h>
#include<string.h>
#include"org_tonny_jni_JNITest.h"

JNIEXPORTjstring JNICALLJava_org_tonny_jni_JNITest_GetReply
(JNIEnv *env, jobject obj){
return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");
}

我们可以看到,该函数的实现相当简单,返回一个字符串为:"Hello,JNITest"

3.4.编写Android.mk文件
在~/project/Android/JNITest/jni目录下新建Android.mk文件,android可以根据这个文件的编译参数编译模块。编辑Android.mk文件如下:

[plain] view plainprint?
01.LOCAL_PATH:= $(call my-dir)
02.include$(CLEAR_VARS)
03.LOCAL_MODULE := libJNITest
04.LOCAL_SRC_FILES:= org_tonny_jni_JNITest.c
05.include$(BUILD_SHARED_LIBRARY)
LOCAL_PATH:= $(call my-dir)
include$(CLEAR_VARS)
LOCAL_MODULE := libJNITest
LOCAL_SRC_FILES:= org_tonny_jni_JNITest.c
include$(BUILD_SHARED_LIBRARY)

LOCAL_MODULE表示编译的动态库名称

LOCAL_SRC_FILES 表示源代码文件

3.5.用ndk工具编译并生成.so文件
进入到JNITest的工程目录,执行ndk-build命令即可生成libJNITest.so文件。

[plain] view plainprint?
01.$cd ~/project/Android/JNITest/
02.$ndk-build
03.Invalidattribute name:
04.package
05.Install : libJNITest.so => libs/armeabi/libJNITest.so
$cd ~/project/Android/JNITest/
$ndk-build
Invalidattribute name:
package
Install : libJNITest.so => libs/armeabi/libJNITest.so
可以看到,在工程目录的libs/armeabi目录下生成了libJNITest.so文件。

3.6.在模拟器上运行
(1)首先,我们把android模拟器启动起来。进入到emulator所在目录,执行emulator命令:

[plain] view plainprint?
01.$cd ~/software/android/android-sdk-linux/tools
02.$./emulator @AVD-2.3.3-V10 -partition-size 512
$cd ~/software/android/android-sdk-linux/tools
$./emulator @AVD-2.3.3-V10 -partition-size 512
AVD-2.3.3-V10表示你的模拟器名称,与在Eclipse->AVDManager下的AVDName对应,-partition-size表示模拟器的存储设备容量。

(2)接下来,我们需要把libJNITest.so文件拷贝到模拟器的/system/lib目录下,执行以下命令:

[plain] view plainprint?
01.$cd ~/project/Android/JNITest/libs/armeabi/
02.$adb remount
03.$adb push libJNITest.so /system/lib
04.80 KB/s (10084 bytes in 0.121s)
$cd ~/project/Android/JNITest/libs/armeabi/
$adb remount
$adb push libJNITest.so /system/lib
80 KB/s (10084 bytes in 0.121s)

当在终端上看到有80 KB/s (10084 bytes in 0.121s)传输速度等信息的时候,说明拷贝成功。

(3)在终端上执行JNITest程序,这个我们可以在Eclipse下,右键点击JNITest工程,RunAs->Android Application,即可在模拟器上启动程序

热点内容
sql合并两列 发布:2025-05-10 07:07:01 浏览:820
linuxmysqlsql 发布:2025-05-10 07:06:12 浏览:917
恒波u盘加密器 发布:2025-05-10 06:55:24 浏览:443
服务器ip需要解析吗 发布:2025-05-10 06:54:26 浏览:427
编译型语言的执行速度 发布:2025-05-10 06:53:43 浏览:219
免费开我的世界国际服服务器 发布:2025-05-10 06:51:35 浏览:276
压缩机拍卖 发布:2025-05-10 06:50:04 浏览:838
服务器映射器怎么固定ip 发布:2025-05-10 06:35:31 浏览:637
蓝牙键盘如何输入电脑密码 发布:2025-05-10 06:32:33 浏览:275
北京php培训机构 发布:2025-05-10 06:28:20 浏览:879