GVKun编程网logo

Android开发入门环境快速搭建实战教程(android 开发环境搭建步骤)

14

这篇文章主要围绕Android开发入门环境快速搭建实战教程和android开发环境搭建步骤展开,旨在为您提供一份详细的参考资料。我们将全面介绍Android开发入门环境快速搭建实战教程的优缺点,解答a

这篇文章主要围绕Android开发入门环境快速搭建实战教程android 开发环境搭建步骤展开,旨在为您提供一份详细的参考资料。我们将全面介绍Android开发入门环境快速搭建实战教程的优缺点,解答android 开发环境搭建步骤的相关问题,同时也会为您带来Android Library上传到JCenter仓库实践,android开发入门和实战、Android NDK 开发入门环境配置与小例子、Android OpenCV(四十一),androidapp开发入门与项目实战、Android 开发入门教程 --Android 应用程序结构分析的实用方法。

本文目录一览:

Android开发入门环境快速搭建实战教程(android 开发环境搭建步骤)

Android开发入门环境快速搭建实战教程(android 开发环境搭建步骤)

前言

很多朋友都想开始自己的Android开发之旅,但是遇到困难重重。从最开始接触Android开发,从搭建开发环境就花了我大部分时间。所以,作为Android开发第一步,开发环境的搭建,显得基础而重要,下面介绍一种快速搭建Android开发环境的方法,以帮助更多朋友快速上手。话不多说了,来一起看看详细的介绍吧。

方法如下

在开始之前,我们首先需要了解,当前开发android使用的主流开发平台为eclipse,因此本文讨论的是基于eclipse来做的。

具体需要的各个文件(软件)如下:

Eclipse:Eclipse是Java 的集成开发环境(IDE),当然Eclipse也可以作为其他开发语言的集成开发环境,如C,C++,PHP,和Ruby等。Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

JDK:(Java Development Kit) 是 Java语言的软件开发工具包;JDK是Java的核心,包含了Java的运行环境(Java Runtime Environment),一堆Java工具和给开发者开发应用程序时调用的java类库。

简单区分:一个是开发平台,一个是java开发软件包

Android SDK:(Software Development Kit): 一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,他为开发者提供了库文件以及其他开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包(简单区分:SDK是android的软件包而jdk是java的软件包)

ADT:(Android Development Tools): 目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。adt只是一个eclipse的插件,里面可以设置sdk路径

下面列出各个版本之间的对应关系

Android版本

SDK

ADT

1.1

系统自带

0.8.0

1.5

R3/R6或更高

0.9.1

1.6

R3/R4/R6或更高

0.9.3

2.0

R3或更高

0.9.4

2.2

R6/R12或更高

0.9.6

2.3

R8或更高

8.0.1

3.0

R10/R12或更高

9.0.0

3.1

R11/R12或更高

11.0.0

3.2

R12或更高

12.0.0

4.0

R14或更高

14.0.0

4.1

R20或更高

20.0.0

4.2

R20或更高

20.0.0

4.2.2

R21或更高

21.0.0

...

R21或更高

R21或更高

对这些产品熟悉后,再进行具体的安装工作:

1、安装JDK

从Oracle官网(http://www.Oracle.com/technetwork/Java/javase/downloads/index.html)下载JDk后,双击进行安装,会在相应目录下出现两个文件夹,一个代表jdk一个代表jre。安装完成后就是设置环境变量;

JAVA_HOME:先设置这个系统变量名称,变量值为JDK在你电脑上的安装路径:D:\Program Files\Java\jdk1.8.0_65。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。

PATH:PATH属性一般计算机中本身就已经存在了,可直接编辑,在原来变量后追加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin。

CLAsspATH:设置系统变量名为:CLAsspATH  变量值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;注意变量值字符串前面有一个"."表示当前目录,设置CLAsspATH 的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。注:用eclipse开发的时候可以不设置classpath,因为eclipse已有相关的配置。

2、安装eclipse

完成了jdk的安装配置后,就要进行开发平台eclipse的安装,这种软件的安装网上教程很多,在此不再赘述,下载可到eclipse官网(http://www.eclipse.org/downloads/)注:至此已经完成了开发普通JAVA应用程序的环境配置

3、安装ADT插件

    (1)启动eclipse,在菜单栏上选择Help->Install New Software

    (2)单击右上角的Add按钮

    (3)在"Add Repository"对话框中,单击"Archive"

    (4)选择下载的adt-22.0.0.zip文件并单击"确认"。

    (5)在Name(名称)处输入"ADT ",单击“Finish”

    (6)在软件对话框中,选中"Developer Tools"复选框,然后点击"Next"

    (7)在下一个窗口中,您会看到一个要下载的工具列表。单击“Next”

    (8)阅读并接受许可协议,然后单击“Finish”

    (9)安装完成后,重新启动Eclipse

4、使用SDK

由于google现在在国内基本上已经被墙了,所以想要在线下载更新Android SDK基本上是件很困难的事,因此可以选择使用别人已经下载好的SDK进行配置就好(前提你安装了ADT插件):

    (1)启动Eclipse,选择windows>preferences>android

    (2)将下载的Android SDK的zip文件解压缩,可以看到有SDK Manager.exe等文件。

    (3)在选项卡中选择"browse",选择上面解压的目录,点击确定

    (4)由于本文是使用别人下载好的SDK因此可能在做完上面的步骤后,无法出现启动SDK manager的快捷按钮,需要手动开启;选择windows->Customize Perspective,在弹出窗口中打开Action set Availability选项卡,选中Android SDK and AVD Manager复选框即可。

5、创建虚拟Android设备

    (1)启动AVD Manager(Android virtual Devices)

    (2)点击New创建新的虚拟设备,可以根据自己的需要进行一些性能的设置。

    (3)选择创建的虚拟Android设备,点击Start启动当前虚拟Android设备实际效果如下

最后推荐一个Android开发网站:http://tools.android-studio.org/index.PHP/sdk

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。

Android Library上传到JCenter仓库实践,android开发入门和实战

Android Library上传到JCenter仓库实践,android开发入门和实战

这里示例创建一个myutils的包,如下图所示:

创建package1

创建package2

ok,这个时候你创建好了package,后面就可以准备我们开发好的Library,然后上传到maven仓库,继续耐心看下面的步骤。

创建一个Android Library

===================

新建一个android project,然后new 一个module,选择android library,项目结构如下:

项目结构 | center

这里我只是为了演示,创建了一个简单的类:

创建MyUtils类

应用bintray插件

===========

如果想通过bintrayUpload命令上传library就必须引用相应的插件,配置如下:

dependencies {

classpath ‘com.android.tools.build:gradle:2.0.0’

classpath ‘com.github.dcendents:android-maven-gradle-plugin:latest.release’

classpath ‘com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6’

}

然后在我们的Library工程的build.gradle引用插件,如下所示:

apply plugin: ‘com.android.library’

apply plugin: ‘com.github.dcendents.android-maven’

apply plugin: ‘com.jfrog.bintray’

其中com.android.library是android的插件,表示它是一个android library。

应用成功后,你会看到插件生成的task,如下图所示:

bintrayUpload task

通过这个task,我们可以将我们的library上传到maven仓库当中,现在还不行,我们还得继续完成我们的配置。

build.gradle配置

==============

我们需要在library工程的build.gradle配置我们的相应的信息,下面是示例代码:

apply plugin: ‘com.android.library’

apply plugin: ‘com.github.dcendents.android-maven’

apply plugin: ‘com.jfrog.bintray’

// 这个version是区分library版本的,因此当我们需要更新library时记得修改这个version

version = “1.0.0”

android {

compileSdkVersion 19

buildToolsversion “23.0.3”

resourcePrefix “devilwwj_”

defaultConfig {

minSdkVersion 9

targetSdkVersion 21

versionCode 1

versionName version

}

lintOptions {

abortOnError false

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’

}

}

}

dependencies {

compile filetree(dir: ‘libs’, include: [’*.jar’])

testCompile ‘junit:junit:4.12’

}

def siteUrl = ‘https://github.com/devilWwj/Android-Tech’ // 项目的主页

def gitUrl = ‘https://github.com/devilWwj/Android-Tech.git’ // Git仓库的url

group = “com.devilwwj.library” // Maven Group ID for the artifact,一般填你唯一的包名

install {

repositories.mavenInstaller {

// This generates POM.xml with proper parameters

pom {

project {

packaging ‘aar’

// Add your description here

description ‘my utils for test’

name ‘Android Commonly used utils’ //项目描述

url siteUrl

// Set your license

licenses {

license {

name ‘The Apache Software License, Version 2.0’

url ‘http://www.apache.org/licenses/LICENSE-2.0.txt’

}

}

developers {

developer { // 开发者信息

id ‘YOUR_ID’

name ‘YOUR NAME’

email ‘YOUR EMAIL’

}

}

scm {

connection gitUrl

developerConnection gitUrl

url siteUrl

}

}

}

}

}

task sourcesJar(type: Jar) {

from android.sourceSets.main.java.srcDirs

classifier = ‘sources’

}

task javadoc(type: Javadoc) {

options.encoding = ‘UTF-8’

source = ‘src/main/java’

}

task javadocJar(type: Jar, dependsOn: javadoc) {

classifier = ‘javadoc’

from javadoc.destinationDir

}

artifacts {

archives javadocJar

archives sourcesJar

}

Properties properties = new Properties()

// 加载本地配置

properties.load(project.rootProject.file(‘local.properties’).newDataInputStream())

bintray {

user = properties.getProperty(“bintray.user”)

key = properties.getProperty(“bintray.apikey”)

configurations = [‘archives’]

pkg {

repo = “maven” //发布到Bintray的那个仓库里,默认账户有四个库,我们这里上传到maven库

name = “myutils” //发布到Bintray上的项目名字

websiteUrl = siteUrl

vcsUrl = gitUrl

licenses = [“Apache-2.0”]

publish = true

}

}

你还需要在local.properties中定义两行代码:

总结

【Android 详细知识点思维脑图(技能树)】

image

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

详细整理在GitHub:Android架构视频+BAT面试专题PDF+学习笔记​

识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-qOGAFS7x-1646135424050)]

详细整理在GitHub:Android架构视频+BAT面试专题PDF+学习笔记​

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

Android NDK 开发入门环境配置与小例子

Android NDK 开发入门环境配置与小例子

NDK:Native Development Kit原生开发工具

NDK能干什么:NDK使得在android中,java可以调用C函数库。

为什么要用NDK:我们都知道,java是半解释型语言,很容易被反汇编后拿到源代码文件,在开发一些重要协议时,我们为了安全起见,使用C语言来编写这些重要的部分,来增大系统的安全性。还有,在一些接近硬件环境下,相信大家都清楚C与java的优劣。顺带提一下:NDK并不能显著提升应用效率。why?我们都觉得C语言比起java来说效率要高出很多,一方面,随着jdk的不断更新,java的效率也随之提高;另一方面,即便使用C语言编码提高了应用效率,但是在java与C相互调用时平白又增大了开销。

对于这些问题,这里就不多说了,希望详细了解的,请各位自行搜索。

NDK开发,第一步,当然是搭建环境

首先,去http://developer.android.com/tools/sdk/ndk/index.html下载你对应平台的开发工具

以上内容来自

ndk有什么用想必要用的人都知道, 但是像其他工具一样。ndk的开发需要搭建环境,搭建环境这个东西,找不到路子就很麻烦,找到了路子就很容易。以前想学习android上opencv开发,但是当时一直找不到好路子搭建ndk,然后就不了了之了。

今天又来了兴趣搭建ndk,在历经的一段波折之后,终于如愿以偿了。

现在就和大家分享一下我的经历。

1.首先下载了NDK之后,直接解压到指定的目录就可一了,例如我的ndk主目录是 E:\android-ndk-r9d

本来老版本是需要安装cygwin的,但是新版本的可以不用装cygwin(我的是 ndk-r9d),直接用ndk的ndk-build.cmd(cygwin安装比较麻烦,等待时间也很久,有兴趣的同学可以自行百度,http://www.cygwin.com/)

2.然后就是将ndk的主目录添加到eclipse中,如下图

window->preferences->android->ndk

至此,eclipse就可以使用ndk了,如果是想使用命令行模式下使用ndk,可以将ndk目录添加到环境变量中

例如我的是 NDK_HOME = E:\android-ndk-r9d  然后在Path最后面添加%NDK_HOME%(注意与前面的变量用分好隔开)

打开cmd,输入ndk-build 出现下面字样说明成功

C:\Users\Tomorrow>ndk-build

Android NDK: Could not find application project directory !

Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.

E:\android-ndk-r9d\build/core/build-local.mk:148: *** Android NDK: Aborting Stop.

然后就是我们的小例子时间

创建android工程TestJni

一切默认,创建完成之后,右键工程,选中Andriod Tools -> Add Native Support..(最下面)

接下来会让你给你的本地库起一个名字 我的是 test-jni,点击确定,ok

这个操作会自动地帮你的工程添加ndk所需的文件夹目录,并且生成对应的.mk .cpp文件(看以前的教程总是要手动添加,蛋疼不已。。)如下图,是不是很方便呢~~哈哈

接下来就是我们的java代码了

package com.xmt.testjni;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TestJni extends Activity {
	static{
		System.loadLibrary("test-jni");
	}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView t = new TextView(this);
        t.setText(stringFromJNI());
        setContentView(t);
    }
    public native String stringFromJNI();
}

代码很简单,主要就是这个

static{
	System.loadLibrary("test-jni");
}

public native String stringFromJNI();

链接库名字一定要对应,要不然找不到

ok,java这边写完了,再看 jni目录下的文件

首先是Android.mk,这个例子很简单,也没有这么文件直接默认

LOCAL_PATH := $(call my-dir)//当前路径

include $(CLEAR_VARS)

LOCAL_MODULE    := test-jni   //要生成的.so库名
LOCAL_SRC_FILES := test-jni.cpp  //你的.cpp文件名字

include $(BUILD_SHARED_LIBRARY)

接下来是cpp文件 (开始的时候只有#include<jni.h>)

#include <jni.h>
extern "C"
{
	jstring Java_com_xmt_testjni_TestJni_stringFromJNI(JNIEnv *env ,
		jobject thiz){
		return env->NewStringUTF("Hello from test-jni !");
	}
}

上面的代码就是返回一个字符串,但是有几点需要注意(我也是找了很久才知道。。。)

首先,一般会提示你找不带 jni.h (我的是警告),说明你的工程还没添加include目录,如果你看着不爽,想去掉他,就右键工程->属性->c/c++ Genenral->paths and symbols 选中里面的includes标签页,选择c/c++ 然后点击add  

输入 ${NDK_HOME}:/platforms/android-14/arch-arm/usr/include(${NDK_HOME}是你的ndk主目录

  然后点击确定,之后在清理一下项目,然后构建一下项目,警告就没了~:)

第二点就是那个

extern "C"{//你的方法}

不能少(我看ndk samples下面那个hello-jni的cpp就没有,我模仿它写,就一直报

java.lang.UnsatisfiedLinkError:Native method not found:com.xmt.testjni.TestJni.stringFromJNI......错误,这个错误我找了好久才知道问题所在T^T)

第三就方法的名字

Java_com_xmt_testjni_TestJni_stringFromJNI//必须是 Java_packagename_classname_methodname格式

最后就是那个

env->NewStringUTF("Hello from test-jni !");
//ndk samples下面那个hello-jni里面是(*env),.c文件可以那样写,.cpp文件那样会报错

然后就大功告成~

运行你的项目,就会出现类似下面的画面

ok,配置和例子都到这里(如有什么不对的地方请给我留言~觉得好的话就点个赞吧~还是第一次写呢)

Android OpenCV(四十一),androidapp开发入门与项目实战

Android OpenCV(四十一),androidapp开发入门与项目实战

FLOODFILL_FIXED_RANGE:如果设置为这个标识符,就会考虑当前像素与种子之间的差,否则就考虑当前像素与其邻域像素的差。

FLOODFILL_MASK_ONLY,如果设置为这个标识符,函数不会去填充改变原始图像,而是去填充掩膜图像。也就是忽略第三个参数newVal

// C++: enum FloodFillFlags
public static final int
FLOODFILL_FIXED_RANGE = 1 << 16,
FLOODFILL_MASK_ONLY = 1 << 17;

所以, flag 可以用 按位或,即‘|’ 连接起来。例如想用 4 邻域填充,并填充固定像素范围,填充掩码而不是填充原图,以及设置填充值为 250,那么输入的参数为

4 or (250 shl 8) or Imgproc.FLOODFILL_FIXED_RANGE or Imgproc.FLOODFILL_MASK_ONLY

操作

/**

  • 图像分割–漫水填充法
  • author: yidong
  • 2020/11/7
    */
    class FloodFillActivity : AppCompatActivity() {
    private val mBinding by lazy { ActivityFloodFillBinding.inflate(layoutInflater) }
    private lateinit var mMenuDialog: BottomSheetDialog
    private lateinit var mMenuDialogBinding: LayoutFloodFillMenuBinding

private var mConnectionType = 4
private var mFloodFillFlag = 0
private var mScalarNumber = 250 shl 8

private lateinit var mRgb: Mat
private var loDiff = 0.0
set(value) {
field = value
doFloodFill()
}
private var upDiff = 0.0
set(value) {
field = value
doFloodFill()
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)
val bgr = Utils.loadResource(this, R.drawable.wedding)
mRgb = Mat()
Imgproc.cvtColor(bgr, mRgb, Imgproc.COLOR_BGR2RGB)
mBinding.ivLena.showMat(mRgb)
mBinding.sbLow.setonSeekBarchangelistener(object : SeekBar.OnSeekBarchangelistener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
mBinding.tvLoDiff.text = p1.toString()
loDiff = p1.todouble()
}

override fun onStartTrackingTouch(p0: SeekBar?) {
}

override fun onStopTrackingTouch(p0: SeekBar?) {
}

})
mBinding.sbUp.setonSeekBarchangelistener(object : SeekBar.OnSeekBarchangelistener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
mBinding.tvUpDiff.text = p1.toString()
upDiff = p1.todouble()
}

override fun onStartTrackingTouch(p0: SeekBar?) {
}

override fun onStopTrackingTouch(p0: SeekBar?) {
}

})
mBinding.btFlag.setonClickListener {
showMenuDialog()
}
doFloodFill()
}

private fun doFloodFill() {
val tmp = mRgb.clone()
val maskers = Mat(mRgb.rows() + 2, mRgb.cols() + 2, CV_8UC1, Scalar.all(0.0))
Imgproc.floodFill(
tmp,
maskers,
Point(7.0, 7.0),
Scalar(65.0, 105.0, 225.0),
Rect(),
Scalar.all(loDiff),
Scalar.all(upDiff),
mConnectionType or mFloodFillFlag or mScalarNumber
)
if (mFloodFillFlag and Imgproc.FLOODFILL_MASK_ONLY == Imgproc.FLOODFILL_MASK_ONLY) {
mBinding.ivResult.showMat(maskers)
} else {
mBinding.ivResult.showMat(tmp)
}

tmp.release()
maskers.release()
}

private fun showMenuDialog() {
if (!this::mMenuDialog.isInitialized) {
mMenuDialog = BottomSheetDialog(this)
mMenuDialogBinding = LayoutFloodFillMenuBinding.inflate(layoutInflater)
mMenuDialog.setContentView(mMenuDialogBinding.root)
mMenuDialog.setondismissListener {
mConnectionType =
if (mMenuDialogBinding.rgFirst.checkedRadioButtonId == R.id.rb_8) {
8
} else {
4
}
mFloodFillFlag = if (mMenuDialogBinding.cbFixed.isChecked) {
mFloodFillFlag or Imgproc.FLOODFILL_FIXED_RANGE
} else {
mFloodFillFlag and Imgproc.FLOODFILL_FIXED_RANGE.inv()
}
mFloodFillFlag = if (mMenuDialogBinding.cbMaskOnly.isChecked) {
mFloodFillFlag or Imgproc.FLOODFILL_MASK_ONLY
} else {
mFloodFillFlag and Imgproc.FLOODFILL_MASK_ONLY.inv()
}
try {
mScalarNumber = mMenuDialogBinding.etScalar.text.toString().toInt(10) shl 8
} catch (e: NumberFormatException) {
e.printstacktrace()
}
doFloodFill()
}
}
mMenuDialog.show()
}

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

image

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分,更为了不影响阅读,这份文档已经打包在GitHub,有需要的朋友可以直接点此处前往免费下载。

image

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

%E9%AB%98%E8%96%AA%EF%BC%81.md)。**

[外链图片转存中…(img-cj6liyaS-1644026124673)]

[外链图片转存中…(img-72EfiHLI-1644026124674)]

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

Android 开发入门教程 --Android 应用程序结构分析

Android 开发入门教程 --Android 应用程序结构分析

一、新建 HelloWorld 项目:

1、打开 Eclipse,点击 “File”->"New"->"Project"-Android Application Project"":

在弹出的 “New Android Application” 窗体中输入相应的应用名称、项目名称、包名称,并选择相应的 SDK 版本和应用主题:

选择项目保存位置,一路 “next” 完成项目创建:

创建后的项目:

在创建后的项目名称上右键单击选择 “Run As”->“Android Application” 运行刚创建的项目:

运行结果:

二、应用程序目录结构简析:

1、应用程序目录结构:

2、各部分说明:

Activity 文件:双击目录中的 “MainActivity.java”,可以看到 MainActivity 的代码:

复制代码
 1 package android.basic.helloandroid;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.view.Menu;
 6 
 7 public class MainActivity extends Activity {
 8 
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13     }
14 
15     @Override
16     public boolean onCreateOptionsMenu(Menu menu) {
17         // Inflate the menu; this adds items to the action bar if it is present.
18         getMenuInflater().inflate(R.menu.activity_main, menu);
19         return true;
20     }
21 
22 }
复制代码

从代码中可以看到 MainActivity 继承于 Activity 类,Activity 是 Android 中的视图部分,负责处理界面显示。在 MainActivity 里面重写了父类的 onCreate 方法和 onCreateOptionsMenu 方法,在重写的 onCreate 方法里方法 setContentView (R.layout.activity_main) 给 MainActivity 设置了要显示的视图 R.layout.activity_main,视图由 R 类寻找并加载(感觉很像 mvc,Activity 相当于 Controller 而要显示的 layout 就相当于具体的页面)。

R 文件:在 MainActivity 的 setContentView (R.layout.activity_main) 方法中我们用 R.layout.activity_main 指定了要显示的视图,在应用程序目录结构的截图中可以看到 R 文件位于 gen 目录下面,双击显示代码:

复制代码
 1 /* AUTO-GENERATED FILE.  DO NOT MODIFY.
 2  *
 3  * This class was automatically generated by the
 4  * aapt tool from the resource data it found.  It
 5  * should not be modified by hand.
 6  */
 7 
 8 package android.basic.helloandroid;
 9 
10 public final class R {
11     public static final class attr {
12     }
13     public static final class drawable {
14         public static final int ic_launcher=0x7f020000;
15     }
16     public static final class id {
17         public static final int menu_settings=0x7f070000;
18     }
19     public static final class layout {
20         public static final int activity_main=0x7f030000;
21     }
22     public static final class menu {
23         public static final int activity_main=0x7f060000;
24     }
25     public static final class string {
26         public static final int app_name=0x7f040000;
27         public static final int hello_world=0x7f040001;
28         public static final int menu_settings=0x7f040002;
29     }
30     public static final class style {
31         /** 
32         Base application theme, dependent on API level. This theme is replaced
33         by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
34     
35 
36             Theme customizations available in newer API levels can go in
37             res/values-vXX/styles.xml, while customizations related to
38             backward-compatibility can go here.
39         
40 
41         Base application theme for API 11+. This theme completely replaces
42         AppBaseTheme from res/values/styles.xml on API 11+ devices.
43     
44  API 11 theme customizations can go here. 
45 
46         Base application theme for API 14+. This theme completely replaces
47         AppBaseTheme from BOTH res/values/styles.xml and
48         res/values-v11/styles.xml on API 14+ devices.
49     
50  API 14 theme customizations can go here. 
51          */
52         public static final int AppBaseTheme=0x7f050000;
53         /**  Application theme. 
54  All customizations that are NOT specific to a particular API-level can go here. 
55          */
56         public static final int AppTheme=0x7f050001;
57     }
58 }
复制代码

从代码中可以看到 R 文件里面有很多类,每个类里面又有很多变量,这些类和变量在我们添加、删除控件或资源文件(图片、声音等)由开发工具自动帮我们维护的,由它来调用应用程序的各种资源,在代码第一句的注释中也说明了 “AUTO-GENERATED FILE.  DO NOT MODIFY”。

layout 文件:res/layout/activity_main.xml – 布局文件,双击 activity_main.xml 会进入可视化编辑界面,在这里你可以根据需要选择相应的控件:

也可以点击红框部分进入文本编辑界面直接写对应控件的代码(从截图代码文件可以看到该 layout 由一个相对布局和一个文本框组成):

AndroidManifest 文件:在应用程序目录截图中倒数第四个可以看到一个 AndroidManifest.xml 文件,它是应用程序的配置文件包含在每个安卓应用程序中,它向系统描述了本程序所包括的组件、所实现的功能、所能处理的数据、要请求的资源等,可以近似看做网站中的 Web.conig 文件,同样它也可以由可视化编辑器或文本编辑器编辑:

Android.jar 文件:Android.jar 内部常用包作用概述,如下图所示:

可以看到 Android.jar 里面包含了很多包,常见包的作用如下:

android.app----------- 提供高层的程序模型、提供基本的运行环境
android.content------- 包含各种的对设备上的数据进行访问和发布的类
android.database------ 通过内容提供者浏览和操作数据库
android.graphics------- 底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.
android.location------- 定位和相关服务的类
android.media--------- 提供一些类管理多种音频、视频的媒体接口
android.net------------ 提供帮助网络访问的类,超过通常的 java.net.* 接口
android.os------------- 提供了系统服务、消息传输、IPC 机制
android.opengl-------- 提供 OpenGL 的工具
android.provider------- 提供类访问 Android 的内容提供者
android.telephony----- 提供与拨打电话相关的 API 交互
android.view----------- 提供基础的用户界面接口框架
android.util------------ 涉及工具性的方法,例如时间日期的操作
android.webkit--------- 默认浏览器操作接口
android.widget--------- 包含各种 UI 元素(大部分是可见的)在应用程序的屏幕中使用

关于Android开发入门环境快速搭建实战教程android 开发环境搭建步骤的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android Library上传到JCenter仓库实践,android开发入门和实战、Android NDK 开发入门环境配置与小例子、Android OpenCV(四十一),androidapp开发入门与项目实战、Android 开发入门教程 --Android 应用程序结构分析等相关内容,可以在本站寻找。

本文标签: