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/tools
exportPATH
借助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下面有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"/>