Android 开发环境搭建和基本的使用

时间:2022-02-11 20:09:12

一、JDKCYGWIN

首先安装JDK 和 Cygwin。

如果之前在电脑上安装过JDK,并卸载过,就会遇见卸载不完全从而导致新的JDK安装不正确。这个时候就需要手动在注册表中删除JDK的信息,在windows上可以运行regedit.exe,然后在里面搜索JDK,SUN,JRE,等关键字,然后全部删除,即可完全删除JDK.

Cygwin装起来貌似也比较费劲,可以在网上多参考一些文章。

二、安装Android 开发环境

现在安装Android的开发环境还是比较简单的,在 Android Developers 上有 ADT Bundle 下载,ADT Bundle集成了Eclipse + ADT pluginSDK,还有一些开发工具,如果只是开发Android程序,那么就够了。下载下来解压,路径中不能出现空格,否则不能正常使用。

运行SDK Manager.exe 可以来管理和安装SDK,选择自己需要的版本直接安装就行了,非常方便。

在最新版本的SDK Manager.exe中还可以管理AVDAVD就是Android的模拟器。我们可以在创建一些模拟器,供在开发的时候使用。

SDKAVD都弄好了,现在Android的基本开发环境就弄好了,然后我们就可以在Eclipse中创建一些demo来熟悉一下环境。

三、NDK环境配置

有时候我们会需要使用C/C++的一些代码,这个时候就需要用到NDK。我们可以在Java代码中调用C/C++的代码,或者C/C++调用Java的代码,这里需要用到JNI做转换。

可以在Android Developers上下载NDK,同样只需要解压出来就行。然后在Cygwin中配置NDK的路径。在/home/<username>/.bash_profile文件末尾加入NDK的路径。像这样:NDK=/cygdrive/d/adt-bundle-windows-x86_64/android-ndk-r8d

重启Cygwin的命令行,然后就搞定了。

NDK的使用

NDK的目录下有些例子还有说明文档,可以先看一遍。如果在Java中使用了Native函数,那么就需要先生成JNI的头文件,然后在根据JNI的头文件去实现。

如果是使用Eclipse构建的project,只需要在Cygwin命令行下进入project/bin/classes目录下,然后运行 javah 命令,就会自动生成 .h 的头文件。

例如:javah -classpath . com.UC.jnitest.MainActivity

在 project 目录下创建 jni 目录,把生成的 .h 头文件拷贝过来,然后就可以根据头文件实现 c/cpp 文件。最后我们需要使用NDK来生成so文件供Java调用,这时候就需要用到Ardroid.mk文件,这个其实也比较简单,可以参考NDK目录下的例子,然后将要生成的so文件名和使用到的c/cpp文件修改过来就ok了。

project目录下使用$NDK/ndk-build命令,就能自动生成so文件。

四、JNI编程注意点

JNI编程中要注意内存的泄露,尤其是JNI Local Reference比较容易引起内存泄露,吃饭的时候有想到这个问题,然后在测试代码的时候发现了问题所在。

详情参考:http://www.ibm.com/developerworks/cn/java/j-lo-jnileak/index.html?ca=drs-

五、在C/C++中使用AndroidLogCat

要使用LogCat,需要包含android/log.h 这个文件。并且在Android.mk中加入参数,将其连接进来:LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

查看log.h文件会发现,里面有提供几个函数入口供打印日志,我在使用的过程中将去简单包装了一下。

#include <android/log.h>

#include <sys/timeb.h>

#include <stdio.h>

#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "verbose", __VA_ARGS__)

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "debug", __VA_ARGS__)

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , "info", __VA_ARGS__)

#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , "warn", __VA_ARGS__)

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "error", __VA_ARGS__)

这样就可以在C/C++的代码中类似这样: LOGE(“error”)  打印日志。

六、在C中使用毫秒级别时间

long long getSystemTime()

{

    struct timeb t;

    ftime(&t);

    return 1000L * t.time + t.millitm;

}

开发中需要很重要的是调试的环境,可以将NDK集成到Eclipse中,使用ADB来调试,这些有空的时候再去学习一下。