Android 开发环境搭建Word格式.docx

上传人:b****5 文档编号:18972944 上传时间:2023-01-02 格式:DOCX 页数:17 大小:220.41KB
下载 相关 举报
Android 开发环境搭建Word格式.docx_第1页
第1页 / 共17页
Android 开发环境搭建Word格式.docx_第2页
第2页 / 共17页
Android 开发环境搭建Word格式.docx_第3页
第3页 / 共17页
Android 开发环境搭建Word格式.docx_第4页
第4页 / 共17页
Android 开发环境搭建Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

Android 开发环境搭建Word格式.docx

《Android 开发环境搭建Word格式.docx》由会员分享,可在线阅读,更多相关《Android 开发环境搭建Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

Android 开发环境搭建Word格式.docx

至此,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<

project>

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_<

PackageName>

_<

JAVA类名>

FuncName>

其中包名称和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=<

APP工程名称>

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 

<

jni.h>

stdio.h>

string.h>

malloc.h>

pthread.h>

unistd.h>

typedef 

struct 

JNIEnv* 

env;

jobject 

thiz;

jclass 

cls;

UpdateTextContext;

static 

int 

gRunnerRunning 

0;

update_text(UpdateTextContext 

*context, 

char 

*buf) 

env 

context->

thiz 

cls 

jmethodID 

mid 

(*env)->

GetMethodID(env, 

cls, 

"

appendText"

 

(Ljava/lang/String;

)V"

);

if 

(mid 

== 

NULL) 

return 

-1;

jstring 

NewStringUTF(env, 

buf);

CallVoidMethodV(env, 

thiz, 

mid, 

&

s);

void 

Java_com_eden_sample_Sample_initTextGenerator(JNIEnv* 

env, 

thiz) 

}

Java_com_eden_sample_Sample_runTextGenerator(JNIEnv* 

buf[64];

counter 

UpdateTextContext 

context;

context.env 

context.thiz 

context.cls 

GetObjectClass(env, 

thiz);

1;

while(gRunnerRunning) 

sprintf(buf, 

sample 

counting:

%d\n"

counter);

update_text(&

context, 

(r 

!

0) 

break;

counter++;

sleep

(1);

/* 

sleep 

for 

one 

second 

*/ 

Java_com_eden_sample_Sample_stopTextGenerator(JNIEnv* 

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{

/*intendedtodisplaynomorethan`mMaxLineCount'

*linesandscroll,howeverthisisnot

*alwaysthecase,considerifmSisbroken

*intoseverallines

*/

while(mLines.size()>

mMaxLineCount)

mLines.remove(0);

StringBuildersb=newStringBuilder();

for(inti=0;

i<

mLines.size();

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();

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

//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、将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}如图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1