【攻占Android (2)】Android各版本、app开发流程、apk构建过程
【攻克Android (2)】Android各版本、app开发流程、apk构建过程
本文围绕以下八个部分展开:
一、Android系统各版本及与API号对应关系
二、Android系统各版本Logo
三、Eclipse和Android Studio中工作区、项目及引用的对应关系
四、Android Studio中项目(module)的新建和删除
五、Android四种应用组件简介
六、Android App开发流程
七、Android apk的构建过程
八、Android Studio项目目录及代码介绍
一、Android系统各版本及与API号对应关系
二、Android系统各版本Logo
三、Eclipse和Android Studio中工作区、项目及引用的对应关系
四、Android Studio中项目(module)的新建和删除
1.新建项目
2.删除项目
五、Android四种应用组件简介
六、Android App开发流程
1.配置开发环境(Android Studio)
2.开发App
3.调试
建议使用真机进行调试。调试之前:
(1)在计算机上,给真机安装USB驱动;
(2)开启“开发者选项”(点击7次“内部版本号”);
附:点击7次“Android版本”,会进入“彩蛋”。
(3)开启“USB调试”。
4.发布
附:通过命令行把apk安装到真机/模拟器
这种方式不安全(很容易中病毒等)。建议到官方Android App市场去下载安装。
七、Android apk的构建过程
详细的构建过程如下:
具体构建过程如下:
(1)aapt生成R.java
(2)aidl生成相应的java文件
(3)javac编译源文件生成class文件
(4)dx转换class为classes.dex
(5)aapt生成资源包文件resources.arsc
(6)apkbuilder打包资源和dex生成未签名的apk
(7)jarsigner签名apk生成签名apk
(8)zipalign优化签名后的apk
其中用到的构建工具介绍如下:
八、Android Studio项目目录及代码介绍
1.Android Studio项目目录
附:res文件夹里面的,都会编译成十六进制数放入R.java文件中,这样在调用的时候,就会快一些。
2.项目基础代码介绍
(1)AndroidManifest.xml
(2)MainActivity.java
本文围绕以下八个部分展开:
一、Android系统各版本及与API号对应关系
二、Android系统各版本Logo
三、Eclipse和Android Studio中工作区、项目及引用的对应关系
四、Android Studio中项目(module)的新建和删除
五、Android四种应用组件简介
六、Android App开发流程
七、Android apk的构建过程
八、Android Studio项目目录及代码介绍
一、Android系统各版本及与API号对应关系
二、Android系统各版本Logo
三、Eclipse和Android Studio中工作区、项目及引用的对应关系
四、Android Studio中项目(module)的新建和删除
1.新建项目
2.删除项目
五、Android四种应用组件简介
六、Android App开发流程
1.配置开发环境(Android Studio)
2.开发App
3.调试
建议使用真机进行调试。调试之前:
(1)在计算机上,给真机安装USB驱动;
(2)开启“开发者选项”(点击7次“内部版本号”);
附:点击7次“Android版本”,会进入“彩蛋”。
(3)开启“USB调试”。
4.发布
附:通过命令行把apk安装到真机/模拟器
这种方式不安全(很容易中病毒等)。建议到官方Android App市场去下载安装。
七、Android apk的构建过程
详细的构建过程如下:
具体构建过程如下:
(1)aapt生成R.java
(2)aidl生成相应的java文件
(3)javac编译源文件生成class文件
(4)dx转换class为classes.dex
(5)aapt生成资源包文件resources.arsc
(6)apkbuilder打包资源和dex生成未签名的apk
(7)jarsigner签名apk生成签名apk
(8)zipalign优化签名后的apk
其中用到的构建工具介绍如下:
八、Android Studio项目目录及代码介绍
1.Android Studio项目目录
附:res文件夹里面的,都会编译成十六进制数放入R.java文件中,这样在调用的时候,就会快一些。
2.项目基础代码介绍
(1)AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xiangdong.i18nscreen" > <!--xmlns: xml name space 命名空间 表示里面所有的命名,都必须符合Android的命名规范 --> <!--应用程序 allowBackup 允许备份数据 icon App图标 label App名字 theme 主题风格(类似于Web程序的css) --> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!--活动(界面) MainActivity 主活动(主界面),类似于index.jsp(首页) android:name=".MainActivity" 如果换成其他Activity,则启动的时候,主界面就成为了其他Activity。 label 标题栏上的文本 --> <activity android:name=".MainActivity" android:label="@string/app_name" > <!--意图过滤器 (必须有)--> <intent-filter> <!--动作:启动主界面的入口 (相当于java中的main方法)--> <action android:name="android.intent.action.MAIN" /> <!--类别:启动主界面。 launcher(启动)--> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
(2)MainActivity.java
package com.xiangdong.i18nscreen; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; /** * 主活动 (主界面) 类似于首页 */ public class MainActivity extends ActionBarActivity { /** * 第一次启动活动时,创建界面 * @param savedInstanceState 保存实例状态 */ @Override protected void onCreate(Bundle savedInstanceState) { // 显式调用父类的创建方法(保留activity状态) super.onCreate(savedInstanceState); // 加载布局文件 setContentView(R.layout.activity_main); } /** * 创建可选菜单 * @param menu * @return */ @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // 填充菜单,加入菜单选项 getMenuInflater().inflate(R.menu.menu_main, menu); // 返回true:菜单可见 return true; } /** * 选中菜单选项的事件 * @param item * @return */ @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }