Android 开发环境搭建.docx
- 文档编号:5980093
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:17
- 大小:220.41KB
Android 开发环境搭建.docx
《Android 开发环境搭建.docx》由会员分享,可在线阅读,更多相关《Android 开发环境搭建.docx(17页珍藏版)》请在冰豆网上搜索。
Android开发环境搭建
Android开发环境搭建
一、软件下载
1下载JDK6
点那个“JavaSEDevelopmentKit(JDK)”的链接,下载后解压缩。
2下载开发用IDE
个人建议下载Eclipse的J2EE集成版本,省事。
当前Eclipse最新版本为3.4.1
http:
//www.eclipse.org/downloads/
点那个“EclipseIDEforJavaEEDevelopers”的链接,下载后解压缩。
3下载谷歌的AndroidSDK
找到相应平台的SDK下载。
二、设置开发环境
双击Eclipse解压缩后目录中的eclipse.exe启动,然后
1增加Android开发插件
选择Eclipse菜单Help->SoftwareUpdates->选择选项卡上的AvailableSoftware,点击右侧按钮“AddSite...”,输入
http:
//dl-
左侧会增加该项,点名称前的“+”,可以看到包括DeveloperTools。
点中该项的对勾,然后点右侧的“install”按钮,然后按提示安装。
如图:
(如果不能下载将连接修改为:
https:
//dl-尝试)
稍等片刻,Eclipse会下载并设置好Android插件,然后提示需要重启Eclipse,请点同意。
2设置Android属性中的AndroidSDK目录
选择Eclipse菜单Window->Preferences->选择左侧的Android项,在右侧SDKLocation项中输入你的AndroidSDK解压缩后的目录,点“Apply”,如图:
3设置Java属性中的编译属性
还是选择Eclipse菜单Window->Preferences->选择左侧的Java项->选择Compiler子项,确认当前选择的是1.6版本。
如图:
至此,Android开发环境大功告成,下面就来看下如何在模拟器中运行程序。
三、测试Android程序在模拟器中的运行
1新建项目
选择Eclipse菜单File->New->AndroidProject,填写工程基本信息后确认。
2查看运行效果
选择Eclipse菜单Run->Run,选择以Android方式运行。
Android手机模拟器启动后,稍等片刻后显示AndroidLogo,然后进入锁定键盘的待机状态,点“Menu”按钮解锁后就会显示你的测试程序。
由于模拟器启动时间较长,因此开发期间模拟器窗口最好不要关闭。
此外模拟器可更换皮肤,并可按Ctrl+F12来切换显示模式,下面是我更换G1手机皮肤后的例子:
四、NDK使用
1.配置NDK
本处讨论在Windows下使用cygwin处理NDK的Windows版本。
Linux下的使用方法基本一致。
根据unix系系统的规范,所有讨论中涉及名称的字符串均大小写敏感。
这里仅NDK的配置和C代码编译须用cygwin,此后的ANDROID调试等均可使用普通的命令行操作。
参考链接:
R1–R3配置方法:
收到NDK后首先在NDK的主目录(其中包含apps,build,docs,…文件夹)下,输入命令:
build/host-setup.sh
用来配置NDK工具(例如编译器的使用,目标平台等),最终生成out/host/config-host。
由于out必须在主目录中,因此上述命令须在主目录中输入。
R4配置方法:
Cygwin安装时,选择一个镜像下载点,接着installDevel下的Gcc和make两个文件就可以了。
现在说一下,怎样编译项目的问题:
准备:
在Cygwin安装目录下,找到home/username的目录下的.bash_profile文件,打开文件在最后加上
NDK=/cygdrive/d/android-ndk-r4-windows/android-ndk-r4
exportNDK
HOST_AWK=/usr/bin/gawk
exportHOST_AWK
其中d/android-ndk-r4-windows/android-ndk-r4是NDK的根目录。
在R4下,NDK提供了2种编译方式:
1.在Cygwin下,输入cd<项目路径>$NDK/ndk-build
2.在Cygwin下,$NDK/ndk-build-C
2.编译本地源码
本地源码(主要如C文件)均放在sources下。
NDK提供了两个示例,放在sources/sample目录下。
编译只需要在主目录中输入命令:
makeAPP=<名称>
对于上述示例,分别为hello-jni和two-libs。
1.sources文件夹配置
由于NDK已将MAKE生成系统建立妥善,所以只需要在sources中建立包含源文件的文件夹。
由于NDK的配置是以sources目录作为源文件工程的根节点,因此如果要将源文件工程放在更深的目录,例如sources\package1\proj1,那么就需要在中间的目录中加入一个Android.mk文件,用以转到更深的目录其内容示例可见sources\samples\Android.mk。
上述文件夹proj1名称建议以源文件模块的名称命名。
在源文件工程文件夹中需要有至少一个Android.mk文件用以定义源文件编译信息。
可以参照sources\samples中的两个工程中的示例。
其中LOCAL_MODULE变量必须定义成指定源文件工程(模块)的名称。
2.C源程序JNI入口
C源程序的入口遵照JNI规范:
Java_
其中包名称和Android的JAVA类所属包需要保持一致,只是“.”用“_”替换;JAVA类即是包含这个(实例)方法的类;FuncName则是呈现在JAVA中使用的方法名称。
3.apps文件夹配置
在apps文件夹中创建一个ADNROID工程文件夹,名称为APP工程(JAVA)名称,在其中新建一个Application.mk的配置文件,参照两个示例工程设置。
主要设置两个变量:
APP_PROJECT_PATH,这个是ANDROID工程路径和相应指定库生成目录(复制而来,名称为“lib源文件模块名”),一般设置成$(callmy-dir)/project,即当前目录下project中,而库生成目录就是project/libs。
APP_MODULES则是这个ANDROID将包含的上述源文件工程,填入涉及的一个或多个源文件工程名称。
最后在主目录中用makeAPP=
3.创建工程
NDK两个例程已经含有完整的ANDROID例程,可以在Eclipse中直接导入打开。
如果新建一个工程,只需要仿照ANDROID工程的一般过程开始,由于本地库so处于工程目录下,Eclipse会自动将其包含在工程中,并最终一并链入apk。
4.关于JAVA本地(Native)接口JNI
一些参考文档:
1.
2.
3.http:
//journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html有几个注意点:
1.不能在本地代码中跨线程使用JNI量,而目前又暂没找到联入正确JNI环境量和对象或者JVM的方法,因此只能在调用线程中使用回调,意味着设计需要让回调发生在JAVA调用者线程中。
2.CallXXXMethodX(env,obj,methodid,va_arg)中,va_arg必须输入指针(对象的指针如jstring*,原子的指针如int*)。
3.对于跨线程的UI操作侧需要用runOnUiThread。
5.ANDROID工具使用
1.虚拟设备创建(AVD)
使用android命令
创建:
androidcreateavd–n<虚拟设备名称>-t<目标ID>
在通常情况下接受默认选项(不建立hardwareprofile)
删除:
androiddeleteavd–n<虚拟设备名称>
列印:
androidlist
2.在命令行)运行虚拟机
命令:
emulator–avd<虚拟设备名称>
3.ADB常用命令参考:
安装程序:
adbinstall<待安装APK文件本地位置>
运行命令SHELL:
adbshell,进入SHELL,可以操作访问设备文件系统
adbshell,直接执行命令(SHELL中可以执行logcat)
复制文件:
adbpush<本地源><设备文件系统绝对地址>,复制入文件
adbpull<设备文件系统绝对地址><本地位置>,复制出文件
adbdevices,查看运行的模拟器/设备状态
6.【示例程序】
一个简单的在屏幕上间歇打印的程序。
1.本地C代码
(仅用于示例,不保证正确性和安全性)
#include
#include
#include
#include
#include
#include
typedef struct
{
JNIEnv* env;
jobject thiz;
jclass cls;
} UpdateTextContext;
static int gRunnerRunning = 0;
static int update_text(UpdateTextContext *context, char *buf)
{
JNIEnv* env = context->env;
jobject thiz = context->thiz;
jclass cls = context->cls;
jmethodID mid = (*env)->GetMethodID(env, cls, "appendText", "(Ljava/lang/String;)V");
if (mid == NULL)
return -1;
jstring s = (*env)->NewStringUTF(env, buf);
(*env)->CallVoidMethodV(env, thiz, mid, &s);
return 0;
}
void Java_com_eden_sample_Sample_initTextGenerator(JNIEnv* env, jobject thiz)
{
gRunnerRunning = 0;
}
void Java_com_eden_sample_Sample_runTextGenerator(JNIEnv* env, jobject thiz)
{
char buf[64];
int counter = 0;
UpdateTextContext context;
context.env = env;
context.thiz = thiz;
context.cls = (*env)->GetObjectClass(env, thiz);
gRunnerRunning = 1;
while(gRunnerRunning)
{
sprintf(buf, "sample counting:
%d\n", counter);
int r = update_text(&context, buf);
if (r !
= 0)
break;
counter++;
sleep
(1); /* sleep for one second */
}
gRunnerRunning = 0;
}
void Java_com_eden_sample_Sample_stopTextGenerator(JNIEnv* env, jobject thiz)
{
gRunnerRunning = 0;
}
2.JAVA程序
Packagecom.vendor.sample;
/*packagethatmustkeepinaccordancewiththenativecode*/
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.widget.TextView;
importjava.util.*;
publicclassSampleextendsActivity{
enumUpdateType{
Modify,
Append
}
privateclassUpdateTextRunnerimplementsRunnable{
publicUpdateTextRunner(Strings,UpdateTypetype){
mS=s;
mType=type;
}
publicvoidrun(){
if(mType==UpdateType.Modify){
mLines.clear();
mLines.add(mS);
mTV.setText(mS);
}
else{
mLines.add(mS);
/*intendedtodisplaynomorethan`mMaxLineCount'
*linesandscroll,howeverthisisnot
*alwaysthecase,considerifmSisbroken
*intoseverallines
*/
while(mLines.size()>mMaxLineCount)
mLines.remove(0);
StringBuildersb=newStringBuilder();
for(inti=0;i sb.append(mLines.get(i)); mTV.setText(sb.toString()); } } privateStringmS; privateUpdateTypemType; } /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); mTV=newTextView(this); mTV.setText("initialtext"); setContentView(mTV); initTextGenerator(); /*Thefollowingthreadobjectsimplycontains *anoverridenrunmethodwhichinvokes *runTextGeneratoronthisSampleobject */ mThread=newTextUpdatorThread(this); mThread.start(); } @Override publicvoidonDestroy(){ stopTextGenerator(); try { mThread.join(); } catch(InterruptedExceptione){ e.printStackTrace(); } super.onDestroy(); } publicvoidmodifyText(Strings){ this.runOnUiThread(newUpdateTextRunner(s,UpdateType.Modify)); } publicvoidappendText(Strings){ this.runOnUiThread(newUpdateTextRunner(s,UpdateType.Append)); } publicnativevoidinitTextGenerator(); publicnativevoidstopTextGenerator(); publicnativevoidrunTextGenerator(); privateTextViewmTV; privateArrayListmLines=newArrayList(); privateintmMaxLineCount=20; privateTextUpdatorThreadmThread; static{ System.loadLibrary("sample"); //thecorrespondingClibraryislibsample.so } } 五、Window下cygwin配合Eclipse配置 1.安装SequoyahAndroidNativeCodeSupport http: //download.eclipse.org/sequoyah/updates/1.1/ 2.配置 方法一、 1.在Main页面里 Location栏选择你安装Cygewin时配置的root目录下的bash.exe所在路径,F: \android\NDK\Cygewin\bin\bash.exe 在WorkingDirectory里配置路径为root下的bin目录的路径F: \android\NDK\Cygewin\root\bin 最重要的是在Arguments的配置,(注意! NDKr4版本编译C,C++程序的方式做了变化) --login-c"cd/cygdrive/f/android/workspace/HelloNDK/jni&& $NDK/ndk-build" 以上参数表示首先登陆Cygwin,然后进入HelloNDK这个工程下的jni目录(该目录下存放c或c++的文件和Android.mk)。 最后执行“ndk-build”命令执行编译。 如果ndk-build命令无法识别,先确认是否成功配置了NDK的所在路径(如F: \android\NDK\android-ndk-r4)到Path环境变量里。 2.2 在Refresh页,选择Specificresources并选择要刷新的文件为jni 2.3 在BuildOptions页如下选择,则可以实现修改C或C++程序后立自动编译生成**.so文件 同样选择C或者C++原程序所在目录下的所有文件,作为相关的资源(jni) 选中“AllocateConsole” 选中“Launchinbackground” 选中“RunthebuilderAfteraClean” 选中“RunthebuilderDuringmanualbuilds” 选中“RunthebuilderDuringautobuilds” 选中“Specifyworkingsetofrelevantresources” 点击“SpecifyResources”按钮,选择你项目的JNI目录,并包含所有的文件。 点击“OK”按钮。 方法2: 仅适用helios版本 1.安装SequoyahAndroidNativeCodeSupport http: //download.eclipse.org/sequoyah/updates/1.1/ 2.配置 1、将cygwin的目录加入到环境变量 2、在ndk目录下写一个ndk-build.bat,内容如下: @echooff setTmpPARAM=--login-c"cd/cygdrive/%1&&sh$NDK/ndk-build" setPARAM=%TmpPARAM: : =% bash.exe%PARAM% 3、添加工程编译选项ndk-build.bat${ProjDirPath}如图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 开发环境搭建 开发 环境 搭建