android 全部使用NDK开发android应用程序
android在ndk r5版本中,提供了使用NDK来编写android应用。也算是C,C++的福音,其实android源码中,很多设计本质上都是c和C++实现的,然后使用jni调用来使JAVA程序员能够参与开发。但是在开发复杂应用的过程中,暴露出了大量的问题,由于java语言的局限性,使得很多问题很难从根本上解决。比如java内存管理的自动化,使得项目中经常出现空指针问题,但因为java并不提供指针的直接支持,比如浏览大量图片时,产生的内存异常,这一切官方似乎也提供不了有效的解决办法。自从有了ndk,使得大家可以不再满足于知其然而不知其之所以然。
先设置环境变量,下面是ndk,adk的设置,如果你没有装jdk,也需要安装,并像这样配置好。路径配置如下。使用vim编辑~/.profile在其中加入以下内容。
#---- NDK ----
NDK_ROOT=~/NDK/android-ndk-r8d
PATH=$PATH:$NDK_ROOT
export NDK_ROOT#---- android-SDK ----
ANDROID_SDK_ROOT=~/SDK/adt-bundle-linux-x86_64/sdk
PATH=$PATH:$ANDROID_SDK_ROOT
export ANDROID_SDK_ROOT#---- adb ----
ADB_PATH=~/SDK/adt-bundle-linux-x86_64/sdk/platform-tools
PATH=$PATH:$ADB_PATH#---- tools/android ----
PATH=$PATH:~/SDK/adt-bundle-linux-x86_64/sdk/toolsexportPATH
借助anroid提供的丰富的命令行工具,在没用eclipse等开发工具的情况下,使用VIM和LINUX 的shell可以完成几乎所有的操作。
Android是一个强大的命令行工具。
1。查看帮助信息:
android-h
2。查看android的sdk
androidsdk
3。已经安装的android版本包
androidlist targets
4。查看模拟器
androidlist avd
5。运行模拟器Gingerbread
emulator@Gingerbread
6。创建android工程
android create project -n TestAndroidProj -t 'android-15' -p ./android_proj -k com.magcomm.test -a MainActivity
-n:项目名(TestAndroidProj);-t:androidSDK版本号(android-15);-p:Android项目的路径;-k:Java的包名;-a:初始的Activity。
运行上面的命令后,一个Android项目就创建完成了。名字为TestAndroidProj,api版本为15,路径为当前目录下android_proj,包名为com.magcomm.test,主activity为MainActivity
7。创建java工程
ProjectCreate./myproject -n java
8。创建模拟器
Androidcreate avd -n forwind.cn
9。
ProjectList
ProjectTreemyproject
10。编辑完成,进入jni编绎c,c++
编译so文件
ndk-build
ndk-build NDK_LOG=1
创建build文件
11。生成用于创建apk的build.xml文件
androidupdate project --target 3 -p . -s
12。生成apk,分别对应于release和debug版本
antdebug
antclean release
13。生成证书
keytool-genkey -v -keystore app_signing.keystore -alias release -keyalg RSA-keysize 2048 -validity 10000
JDK的keytool用于创建私钥。-keystore:输出私钥文件的名称;-alias:私钥别名,可存储多个键在密钥库用来后面使用;设置RSA加密算法,密钥长度2048位和10000天的有效期。确保生成的keystore文件非常安全,因为这谷歌市场对你的唯一标识。
14。签名证书
jarsigner-keystore app_signing.keystore -digestalg SHA1 -sigalg MD5withRSAbin/TestAndroidProj-release-unsigned.apk release
15去掉签名jarsigner -verify bin/TestAndroidProj-release-unsigned.apk
15发布,这个未用过,需要google支持,应该不能正常使用
zipalign-v 4 bin/TestAndroidProj-release-unsigned.apk bin/TestAndroidProj.apk
16。
antclean debug install
17.如果是使用eclipse创建的项目,只需要这三步,就可以编辑成apk应用了,而且其实最后一步,eclipse也会帮我们做
a。编译so文件
ndk-build
ndk-build NDK_LOG=1
b。创建build文件
androidupdate project --target 3 -p . -s
c。打包生成apk
antdebug
antrelease
d。漏了个步骤,在创建jni文件时,可以先在eclipse里引入相应的so库名和相应的导出函数,然后使用命令
javah -classpath bin -d jni com.example.hellojni.MainActivity 生成相应头文件
-classpath bin:表示类的路劲
-d jni: 表示生成的头文件存放的目录
com.example.hellojni.HelloJni 则是完整类名
这一步的成功要建立在已经在 bin/com/example/hellojni/ 目录下生成了 HelloJni.class的基础之上,而且这个bin的路径在不同版本时好像略有差异,com.example.hellojni.HelloJni.MainActivity要换成自己的相应包名和引用jni的类名,然后可以完成这些生成包含这些函数的类名。
18。如果对这么多命令行不感冒,希望借助eclipse来完成的话,下面有网友提供的eclipse配置NDK的方法,不保证能运行,试试吧
一.新建一个Android工程,工程名为jnitest
二.右击jnitest工程-->new-->other;选择C/C++-->Convertto a C/C++ Project(Adds C/C++Nature)
三.右击jnitest工程-->properties;在左边找到C/C++Build,在右边的 BuilderSettings将
Buildcommand:添加ndk-build-j4
Builddirectore: ${workspace_loc:/jnitest}
四.打开C/C++Build找到Environment,在右边Add一变量
Variable:NDK
Value:/home//AndroidNDK
确保AndroidNDK下面有ndk-build,这个自己下载。
五然后打开左边的C/C++General-->Path and Symbols
进入右边的includes-->GNUC添加
${NDK}/platforms/android-9/arch-x86/usr/include
${NDK}/platforms/android-9/arch-arm/usr/include
GNUC++添加
${NDK}/sources/cxx-stl/stlport/stlport
${NDK}/platforms/android-9/arch-x86/usr/include
${NDK}/platforms/android-9/arch-arm/usr/include
六.建立jni文件夹,并编写.mk文件
19。提供一个全部使用C编写的activity:
1。首先是AndroidManifest.xml文件配置:
package="com.example.native_activity"
android:versionCode="1"
android:versionName="1.0">
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">
android:value="native-activity"/>