09_android项目的目录结构
R.java是由IDE自动生成的,不允许修改.
Android Dependences 安卓的支持库
项目创建之后一般都会把安卓支持库的V4包导入进来.
项目打包的时候assets的内容并不会被编译。java代码最后会被编译生成.XML,然后再打包成dex。最后在APK包里面assets是不会改变的,不会被编译。
项目编译之后都会放到bin目录里面。编译之后的内容都会放到bin目录里面。bin,二进制binary,编译之后的二进制文件都会放到bin目录里面。
libs:放项目依赖的其他的库文件。android-support-v4.jar 项目依赖的是support-v4.jar.把support-v4.jar添加build path里面之后就到了Android Dependencies.
res:resource存放跟咱们项目相关的一系列的各种各样资源。这一系列资源就是在咱们开发的时候经常会用到的东西。drawable这里面放的就是图标/图片。项目用到的图片都可以往drawable目录里面放。drawable根据屏幕的像素密度.像素密度:单位的面积上究竟可以显示/放多少的个像素点。h是high,l是low,m是middle,xh比h还要高一个档次。xxh比xh像素密度还要高。目前ldpi和mdpi这两种设备基本上很少。现在最常见的手机的分辨率是1920*1080,不管是5寸的还是5.5寸的还是6寸的基本上都是属于xhdpi.xhdpi像素密度比较高。ldpi和mdpi基本上现在没有这样的设备了。放这么多drawable的文件夹是为了更好的去适配不同的屏幕。
但是并不是说比如说一个应用会使用到一百张图片。并不是说我要把图片做成不同的分辨率然后丢到不同的drawable目录里面。大概的情况的是会把大部分图片丢到同一个目录里面。目前市面上哪种手机比较多,究竟落到哪一种像素密度里的手机屏幕比较多,最后就把大部分图片都放到drawable目录下。剩下的drawable目录就是放图标。因为比较重要的图标比如说logo,针对不同的分辨率做出一系列的不同尺寸的图片放到不同的像素密度对应的文件夹里面。drawable是存放图片资源的。
layout:布局文件。涉及到界面,用xml画界面的时候,这个东西最终都要放到layout文件夹下面。
menu:安卓手机标准的三个按钮。中间是home键,还有一个是返回键,剩下的就是菜单键。menu菜单用的越来越少了,因为好多手机都在朝着苹果去学,就剩下一个按钮了。剩下一个圆圈,左右按钮被省略掉了。最终返回都是用手势去操作,比如像魅族的手机。虽然菜单菜单用的越来越少了,但是还是要知道menu菜单。你按一下菜单键弹出来什么东西是由menu目录下的xml文件决定的。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> </menu>
values:dimens放一些具体的大小的值。strings.xml放一些在应用里面显示的文本。styles.xml放的是样式。
values-sw600dp:放好几个文件夹。
values-sw720dp-land:根据屏幕的分辨率进行适配的。最终涉及到屏幕适配的时候再去介绍。
v11、v14是版本适配的。v11代表api level是11以上的。v14代表API level是14以上的。v11和v14放了两个样式。
<resources> <!-- Base application theme for API 11+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices. --> <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> <!-- API 11 theme customizations can go here. --> </style> </resources>
你的API版本是11以上的你的手机里面才能找到对应的主题。手机跑起来涉及到样式就会到v11里面去找。如果v11和v14配置的是不同的样式,最终你的应用可能在不同的版本手机上跑起来看起来是不一样的。
values:放到是字符串strings、大小dimens、主题styles。还可以放一些颜色的值。
AndroidManifest.xml清单文件。应用包含了哪些控件,然后一些最基本的信息都放在了清单文件里面。声明了名称空间xmlns:android="http://schemas.android.com/apk/res/android",说明这个东西也是用schema进行约束的。manifest指定一个属性叫做package,package是应用的包名:
package="com.itheima.helloworld"
区分一个应用和其他的应用很重要的一个东西是包名。包名究竟在哪里定义的?在src下面定义了一个包名,这个包名实际上可以跟package的名字不一样,最终用的包名是啥?取决于package声明的是什么名字.package声明的是helloworld,最终咱们这个应用包名的就是helloworld.
现在是调试的过程,并不是真实的把项目发布到市场上去。最终右键Run As Application跑项目的时候涉及对应用进行签名。这个签名用到的就是debug签名。就是这个工作空间里面它搞的这么一个签名文件。每一个工作空间这个debug签名都是一样的。包名跟之前相同了,整个工作空间用的是同一个debug签名。最终导致两个应用是同一个应用。你的版本号android:versionCode是一样的,最终它默认你跑的是同一个东西。
所以它不会跑你现在的应用而是跑之前的应用,跟你的包名和之前的应用的包名冲突了是一样的。
改src下的包名对AndroidManifest.xml清单文件的包名是没有任何影响的。所以包名不能重复,包名定义的位置是在清单文件里面的package属性。所以两个应用的包名冲突了要在清单文件的package属性去改对应的包名.
版本号:
android:versionCode="1"
版本的名字:
android:versionName="1.0"
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
清单文件记录了刚才指定的当前项目的最小版本android:minSdkVersion和运行的目标版本android:targetSdkVersion.
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.helloworld.MainActivity" 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>
android:icon是当前应用的图标.
android:label是当前应用的名字。
android:theme是当前应用的主题。
<activity是当前应用的组件。
android:name指定了MainActivity的全路径.
android:name="com.itheima.helloworld.MainActivity"
每一个组件都要在清单文件里面声明。
<activity android:name="com.itheima.helloworld.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>