189 8069 5689

android目录结构,android根目录结构

android studio怎么展开目录结构

一、下载安装 下载后,打开并将Android Studio拖动到Applications中去,拷贝完毕即可,可以到应用程序下将图标拖动到Dock上。二、新建工程 安装完成后,选择默认选项点击OK即可:进入Android Studio,开始界面和Xcode有点类似,点击New project新建一个工程,新建过程和在Eclipse上差不多。新建工程完毕后就进入了Android Studio主界面。第一次进去可能什么也没有,点击箭头所示按钮目录结构,后可以看到Android Studio的目录结构,和Eclipse的工程还是有一点区别的:区别: 1.Android Studio的目录结构本来就代表一个workspace,一个workspace里面可以有Module,可以将一个Module理解成Eclipse中的一个Project; 2.目录中将java代码和资源文件(图片、布局文件等)全部归结为src,在src目录下有一个main的分组,同时划分出java和res两个Group,res和Eclipse下的结构一样,java下就是源码的包和类文件; 3.新建文件方式的不同,右键选择New或Command+N后出现新建菜单,类型有Java Class,也就是一般的java类,File就是普通文件,Package就是建包,值得注意的就是Android Component,它直接提供了Android中基本组件的创建。可以选择创建Android中不同类型的组件:三、窗口布局及主题介绍 另外,主界面底部有一个名为Android的选项卡,打开可以看到DDMS中的设备信息和Logcat输出:顶部工具栏中可以看到和Eclipse中功能一样的一个选项,这些相信大家都比较熟悉了:最后需要说明的是,大家看到我的主界面是暗色风格,和Google演示的是一样的风格,大家第一次使用打开的是默认风格(亮色),如果想要修改的话,进入Preferences(按Command+,)到IDE Settings下选择Colorsfont并设置Schema name为Darcula就可以设置成暗色风格,如果需要自己定义样式,比如字体大小颜色等,可以新建一个Schema来自己定义四、布局文件编写(实时预览) 最炫的功能要来了,实时编写并预览布局文件,此项功能着实大大提高开发效率,打开一个xml布局文件点击右侧Preview选项卡即可唤出预览界面,可以选择很多尺寸的手机进行预览:同时,还可以同时预览多种不同型号和尺寸的设备,编写代码的同时适配多种机型,这不就是当初梦寐以求的嘛!上面介绍了Android Studio的基本使用,包括安装、新建工程、工程结构以及主题设置。下面介绍一些其他技巧,以及与Eclipse之前的一些对比。需要重申一下,我所有的操作与版本是基于Mac系统,在Windows上的同学基本类似,下面就分主题开始吧: 一、从Eclipse导入工程到Android Studio 根据官方的介绍,Android Studio可以兼容Eclipse的现有工程,但需要做一些操作: 首先升级ADT到最新版本,目前为版本号为22(注意和ADT相关的组件最好一并升级,避免后期可能出现的错误) 选择需要从Eclipse导出的工程,右键选择Export并选择Android下的Generate Gradle Build Files 选择完毕后并不会导出到其他地方,而是在本地工程生成了一个build.gradle文件,在Eclipse工程中也可以看到,这个文件是Android Studio识别的 3.随后进入Android Studio并选择Import Project,可以看到刚刚在Eclipse中的项目图标变成了一个Android机器人图标,说明转换成功,这时候选择工程导入即可:至此,就完成了从Eclipse导入现有Android工程到Android Studio,现在可以开始对工程进行操作了! 二、Eclipse工程与Android Studio的区别 Eclipse工程可以导入Android Studio运行,而反过来在Android Studio建立的工程不能在Eclipse中运行; 二者的工程结构不一样,在Eclipse中一个Project就代表一个项目工程,而在Android Studio中就和Intellij一样,一个Project代表一个工作空间,相当于Eclipse中的workspace,而在Android Studio中一个Module就相当于Eclipse中的一个Project,这个概念需要弄明白,不要混了或觉得糊涂了。 在编辑操作上,在Eclipse中编辑修改后必须手动command+s保存文件,而在Android Studio中就和Intellij一样是自动保存的,这一点和第二点和Xcode也是类似的。 工程目录上的区别,在Eclipse中src部分一般是java文件,res部分是资源文件,包括布局文件和多媒体资源等。在Android Studio中包括java文件和资源文件全部放到了src目录下,src目录下包括一个main文件夹,再下面就是java文件夹和res文件夹,其实这里,java文件夹就相当于Eclipse中的src,res还是那个res,这里想起了本山老师的小品“src已经不是那个src了,res还是那个res” 三、真机运行以及常用快捷键 在Android Studio中点击界面下方的Android选项卡可以看到Device信息和Logcat,连上设备后打开Android选项卡会检测真机,成功后会显示在Device中,点击顶部的绿色小箭头就可以开始运行工程了。有一点需要注意的是,运行时可以选择模拟器也可以选择真机,由于在Android Studio中运行工程的时候有一个Device优先级选择,如果不设置的话可能会出现只运行在模拟器上的现象,我们可以自行设置一下:先点击Run菜单选择Run Configuration,并选择你想选择的目标设备,可以是模拟器和真机,也可以在运行选由用户选择: 快捷键大家可以对照官方文档进行熟悉,如下表,也可以自己修改配置选项进行自定义: 个人觉得Android Studio还是有一定的前景的,这里就需要Google不断进行完善和改进了,赶紧把大家从Eclipse中解救出来吧。另外,在此期间,大家其实可以尝试使用一下Intellij IDEA,这个默认也是集成Android开发环境的。Android Studio是基于前者改进而来,二者在使用上差不多,也是Eclipse的一个不错的替代者。

成都服务器托管,创新互联提供包括服务器租用、眉山联通机房、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、国际域名空间等业务的一体化完整服务。电话咨询:18980820575

Android工程的目录结构详细信息?

res:放置应用 程序 用到的资源 文件。其包含(Drawable,layout,values等目录)。当这个目录下的文件发生变化时,src目录下面的R.java就会自动发生变化。

assets:主要放置多媒体等数据 文件 。

res/drawable:放置应用到的图片资源。

res/layout:放置一些与UI相应的布局文件,都是xml文件。

res/values:放置字符串,颜色,数组等常量数据。

AndroidManifest.xml:相当于应用的配置文件。在此文件里必须声明应用的名称,应用所用到的Activity,Service ,Reveiver等。

Android Studio开发解读 - gradle编译项目的build目录结构

转自:

本文针对android studio工具下的ndk开发。

build目录就是项目模块构建过程和结果使用到的位置。

项目根目录下有一个build目录。

项目根目录下各模块子目录下各自有一个build目录。

build目录下一般由4个子目录组成:

generated由aapt工具根据资源数据自动生成的java类

intermediates中间过程

outputs输出结果

tmp编译日志

根目录下的build目录,这个build服务于整个项目,在本文中称其做项目build,以区分模块build。

项目build一般只有generated和intermediates两个子目录,用于生成这个项目的buildTools。

generated目录会生成一个mockable-android-${buildToolsVersion}.jar。

intermediates目录根据需要生成dex-cache,这个目录下的xml文件配置jar包在编译过程中如何缓冲使用。

模块build目录在make module ${MOD_NAME}后就会生成4个子目录。

我们来看intermediates目录,中间生成和编译过程使用到的目录。

这个目录下有这么几个比较关心的子目录:

binaries                  NDK,生成c++连接库

bundles                  模块链接到的自定义jar包和各abi版本的c++链接库都捆绑在这里

classes模块中生成的自定义java类

exploded-aar          由aar包解压出来的资源,jar包和so链接文件等。用于本模块的链接和集成。

jniLibs                   在build.grade中你指定的jniLibs目录整个拷贝。模块链接到的库文件会被捆到bundles目录。

objectFiles              NDK,生成c++中间对象(.o)文件。

transforms              根据你当前选择的productFlavor和其包含的abiFilter,从bundles和binaries取出链接库。

接着就是output目录:

aar如果模块是android library

jar                         如果模块是java library

apk                        如果是Activity应用程序

最后就是tmp目录:

compile$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)MainCpp               ndk编译日志

link$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)$(LIB_TYPE)                ndk链接日志

编译的子目录由三要素组合而成,分别是

BUILD_TYPE := debug|release

ProductFlavor := 你在gradle文件中创建的flavor

abiFilter :=

逆向深入objc,c++ windows下仿objc动画层UI引擎

安卓内部外部文件存储

总述

觉得十分有必要搞清楚内存,内部存储和外部存储的区别,还有我们在开发中真正将数据存在了手机的哪儿。

先提一个问题:手机设置的应用管理中,每个App下都有清除数据和清除缓存,清除的分别是哪里的数据?

一 内存,内部存储和外部存储

整个存储空间分为内部存储和外部存储两部分,内部存储中又包含RAM和ROM等部分。

内部存储,即InternalStorage,也常说内置存储卡,这是手机内置的存储空间,出厂时就被确定,是手机的一个硬件指标。类比电脑的内存。

外部存储,即ExternalStorage,也常说外置存储卡,手机出厂时并不存在,是由用户自由扩展的存储空间,常见的就是SD卡。类比电脑的外接移动硬盘。

RAM,即常说的运行时内存,是手机运行时存储数据和指令的地方,注意是运行时内存。类比电脑的内存条。

ROM,用来存放一些系统文件,应用配置和其他数据的地方,是内部存储中主要存储区域。类比于Windows电脑的C盘。

上图中运行内存即RAM,共2G,机身存储即内部存储,共8G。

打开手机的文件管理,再点击手机一项,可以看到下图:

上图中箭头所指的地方,可以进行内部存储与外部存储的切换,当前页为内部存储下的展示,这只是Android系统存储数据的一部分而已,大部分数据都对用户隐藏。至于红框部分下面继续讲。

二 详说存储

一般来说,App软件大都安装在内部存储的ROM区,当然现在也有办法安装在SD卡上,但这需要App自身支持及SD卡分区等一系列操作,下面讨论的App是安装在ROM区的。

以Genymotion模拟器设备为例来分析,型号是三星GalaxyS5。直接使用AndroidStudio的DDMS,打开File Explorer,我们可以看到下图:

这张图是手机根目录下的完整目录结构图,内外部存储均包含在内。不过有些文件内容需要root权限才能看到。

上面展示的内部存储图就是其中一部分子目录。

选其中几个重要的文件夹介绍。

2.1 /data包:主要存储手机应用的相关数据。

如上图的二级目录中,/data/app文件夹下存放三方应用的apk文件;/data/data文件夹下存放系统应用和三方应用的包私有数据,每个应用都有独属于自己的包。

选一个三方应用包——com.X.main,来分析三级目录——/data/data/com.X.main下都有什么数据:

由包名不难看出:cache包存放缓存数据,databases包存放使用SQLite存储的数据,files包存放普通数据(log数据,json型数据等),shared_prefs包存放使用SharedPreference存放的数据。这些包都是由系统创建的。

2.2 /mnt/sdcard/storage包:这三个包,与手机的部分内置存储卡数据和外置存储卡数据有关。

上面的完整目录结构图中有其子目录信息展示。

以内置存储卡来说,通常用sdcard0表示:Android4.1上,首先挂载到目录/storage/sdcard0上面,/sdcard和/mnt/sdcard都只是指向/storage/sdcard0的软链接;Android4.2上,首先挂载到目录/storage/emulated/0(0就表示内置存储)上面,为兼容之前版本,又挂载到/storage/emulated/legency上面,/storage/sdcard0、/sdcard和/mnt/sdcard都只是指向/storage/emulated/legency的软链接。(挂载相当于真正位置,软链接相当于指针)。

/mnt/sdcard是Android2.2及之上版本使用,/sdcard是Android2.1及之下版本使用。

在手机的文件管理中看到的内置存储卡文件,如上面文件管理页面的图,就是/storage/emulated /0包的子目录,Android包的路径就是:/storage/emulated/0/Android。

2.3 其他

/dev包:Linux系统的常规文件夹。

/system包:系统配置的文件夹,比如Android系统框架(framework)、底层类库(lib)、字体(font)等。

三 存储相关操作

在Android开发中,我们常打交道的存储空间有三部分。

一是根目录下路径为 /data/data/包名/XX 的文件。开发中SQLite数据、SharedPreference数据均保存在这里,虽说我们可以读写操作,但这部分空间由系统维护。

二是在外置存储卡上做存储。暂时不讲。

三是在内置存储卡中做存储。在/storage/emulated/0/Android/data包下或与/storage/emulated/0/Android包同级目录上,建立App包存储数据,这部分空间均由开发者维护。区别在于/storage/emulated/0/Android/data包下的数据为私有目录数据,会随App卸载被清除,与/storage/emulated/0/Android包同级的数据(如系统目录DCIM包,DOWNLOWN包和bluetooth包,还有下图中的baidu包)属于公有目录数据,不会随App卸载被清除,这就会造成数据的卸载残留。

Google官方建议开发者将App的数据存储在私有目录即/storage/emulated/0/Android/data包下,这样卸载App时数据会随之被系统清除,不会造成数据残留。

对存储空间进行操作,首先要获取存储空间的存储路径,对此Android提供了Environment类和Context类来获取路径。

就上面对存储空间的划分,第一部分空间对用户不可见,是在具体包名下的,和特定的App有关,所以对这些数据的访问需调用Context类中的方法;第三部分空间对用户可见,私有目录数据仍与特定App有关,需调用Context类中的方法,而公有目录数据与App无关,应调用Environment类中的方法。

总结如下图:

写了个小程序对Environment类和Context类相关方法测试,如下图:(冒号前为方法名,冒号后为输出结果)

四 回答最初提出的问题

手机设置的应用管理中,每个App下都有清除数据和清除缓存,清除的分别是哪里的数据?

还是用上面的Genymotion模拟器设备来分析,主要测试三部分数据:

内部数据:/data/data/包名/XXX

外部私有数据:/storage/emulated/0/Android/data/包名/XXX

外部公有数据:/storage/emulated/0/包名/XXX

测试结果图就不上了,直接上结论:

清除缓存:将外部私有数据下的cache包(/storage/emulated/0/Android/data/包名/cache)清除,将内部数据下的cache包下的内容(/data/data/包名/cache/XXX)清除 。

清楚数据:将外部私有数据包(/storage/emulated/0/Android/data/包名)清除,将内部数据下的所有内容(/data/data/包名/XXX)清除;

而两种操作对外部公有数据均无影响。

与Android应用程序相关的文件目录都有哪些

在搭建Android开发环境及简单地建立一个HelloWorld项目后,本篇将通过HelloWorld项目来介绍Android项目的目录结构。本文的主要主题如下:

1、HelloWorld项目的目录结构

1.1、src文件夹

1.2、gen文件夹

1.3、Android 2.1文件夹

1.4、assets

1.5、res文件夹

1.6、AndroidManifest.xml

1.7、default.properties

图1、HelloWorld项目目录结构

下面将分节介绍上面的各级目录结构。

1.1、src文件夹

顾名思义(src, source code)该文件夹是放项目的源代码的。打开HelloWorld.java文件会看到如下代码:

package helloworld.test; import android.app.Activity; import android.os.Bundle; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }

可以知道:我们新建一个简单的HelloWorld项目,系统为我们生成了一个HelloWorld.java文 件。他导入了两个类android.app.Activity和android.os.Bundle,HelloWorld类继承自Activity且重 写了onCreate方法。

以下说明针对没有学过Java或者Java基础薄弱的人

@Override

在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。

例如,public void onCreate(Bundle savedInstanceState){…….}这种写法是正确的,

如果你写成public void oncreate(Bundle savedInstanceState){…….}这样编译器回报如下错误——

The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,

以确保你正确重写onCreate方法。(因为oncreate应该为onCreate)

而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate。

android.app.Activity类:因为几乎所有的活动 (activities)都是与用户交互的,所以Activity类关注创建窗口,你可以用方法setContentView(View)将自己的UI放 到里面。然而活动通常以全屏的方式展示给用户,也可以以浮动窗口或嵌入在另外一个活动中。有两个方法是几乎所有的Activity子类都实现的:

onCreate(Bundle): 初始化你的活动(Activity),比如完成一些图形的绘制。最重要的是,在这个方法里你通常将用布局资源(layout resource)调用setContentView(int)方法定义你的UI,和用findViewById(int)在你的UI中检索你需要编程地 交互的小部件(widgets)。setContentView指定由哪个文件指定布局(main.xml),可以将这个界面显示出来,然后我们进行相关 操作,我们的操作会被包装成为一个意图,然后这个意图对应有相关的activity进行处理。

onPause():处理当离开你的活动时要做的事情。最重要的是,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。

更多的关于Activity类的详细信息此系列以后的文章将做介绍,如果你想了解更多请参阅相关文档。

android.os.Bundle 类:从字符串值映射各种可打包的(Parcelable)类型(Bundle单词就是捆绑的意思,所有这个类很好理解和记忆)。如该类提供了公有方法—— public boolean containKey(String key),如果给定的key包含在Bundle的映射中返回true,否则返回false。该类实现了Parceable和Cloneable接口,所以 它具有这两者的特性。

1.2、gen文件夹

该 文件夹下面有个R.java文件,R.java是在建立项目时自动生成的,这个文件是只读模式的,不能更改。R.java文件中定义了一个类——R,R类 中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R类定义该项目所有资源的索引。看我们的HelloWorld项目是不是如此,如下图:

图2、R.java对应res

通过R.java我们可以很快地查找我们需要的资源,另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。

1.3、Android 2.1文件夹

该 文件夹下包含android.jar文件,这是一个Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 库(如Views、Controls)和APIs。通过android.jar将自己的应用程序绑定到Android SDK和Android Emulator,这允许你使用所有Android的库和包,且使你的应用程序在适当的环境中调试。例如上面的HelloWorld.java源文件中 的:

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

这里两行代码就是从android.jar导入包。

1.4、assets

包含应用系统需要使用到的诸如mp3、视频类的文件。

1.5、res文件夹

资源目录,包含你项目中的资源文件并将编译进应用程序。向此目录添加资源时,会被R.java自动记录。新建一个项目,res目录下会有三个子目录:drawabel、layout、values。

drawabel-?dpi:包含一些你的应用程序可以用的图标文件(*.png、*.jpg)

layout:界面布局文件(main.xml)与WEB应用中的HTML类同,没修改过的main.xml文件如下(HelloWorld的就没有修改过):

?xml version="1.0" encoding="utf-8"? LinearLayout xmlns:android="" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" / /LinearLayout

values:软件上所需要显示的各种文字。可以存放多个*.xml文件,还可以存放不同类型的数据。比如arrays.xml、colors.xml、dimens.xml、styles.xml

1.6、AndroidManifest.xml

项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网 服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此 Activity。AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。

HelloWorld项目的AndroidManifest.xml如下所示:

?xml version="1.0" encoding="utf-8"? manifest xmlns:android="" package="helloworld.test" android:versionCode="1" android:versionName="1.0" application android:icon="@drawable/icon" android:label="@string/app_name" activity android:name=".HelloWorld" android:label="@string/app_name" intent-filter action android:name="android.intent.action.MAIN" / category android:name="android.intent.category.LAUNCHER" / /intent-filter /activity /application /manifest

关于AndroidManifest.xml现在就讲这么多,此系列后面的文章将单独详细介绍。

1.7、 default.properties

记录项目中所需要的环境信息,比如Android的版本等。

HelloWorld的default.properties文件代码如下所示,代码中的注释已经把default.properties解释得很清楚了:

# This file is automatically generated by Android Tools.

# Do not modify this file -- YOUR CHANGES WILL BE ERASED!

#

# This file must be checked in Version Control Systems.

#

# To customize properties used by the Ant build system use,

# "build.properties", and override values to adapt the script to your

# project structure.

# Indicates whether an apk should be generated for each density.

split.density=false

# Project target.

target=android-7

android app文件目录结构

原来,只要把文件写在这里的话,可以不用动态申请权限,只要在manifest里面声明权限就ok了;

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。

这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。

并且在API

6.0之后,根目录文件存储是需要用户授权的,就算你在AndroidManifest.xml中配置了存储权限,用户不授权也是写不进去了。

SD卡读写权限:

如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过

可以得到

这个目录里面,一般放一些长时间保存的数据

方法可以获取到 SDCard/ Android /data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据

通过

方法可以获取到

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。并且

这个方法获得的文件存储路径适用于6.0以后系统,只要AndroidManifest.xml配置读写权限了,就不需要用户再授权了。

正常开发中获取存储路径的方法是:

可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是 /sdcard/Android/data/application package/cache 这个路径,而后者获取到的是 /data/data/application package/cache 这个路径。

设置-应用-应用详情里面的”清除数据“与”清除缓存“选项分别对应的是data/data/application package/和data/data/application package/cache

external storage (外部存储):

Environment.getExternalStorageDirectory()SD根目录:/mnt/sdcard/ (6.0后写入需要用户授权)

context.getExternalFilesDir(dir)路径为:/mnt/sdcard/Android/data/ package name /files/…

context.getExternalCacheDir()路径为:/mnt/sdcard//Android/data/ package name /cache/…

internal storage(内部存储):

context.getFilesDir()路径是:/data/data/ package name /files/…

context.getCacheDir()路径是:/data/data/ package name /cach/…


网页名称:android目录结构,android根目录结构
本文地址:http://jkwzsj.com/article/hoddeg.html

其他资讯