Android 各版本SDK的区别
- 格式:wps
- 大小:47.50 KB
- 文档页数:7
Android SDK介绍1.Android SDK简介即Android Software Development Kit.它提供了在Windows/Linux/Mac平台上开发Android应用的开发组件,包含了在Android平台上开发移动应用程序的各种工具集。
2.Android SDK tools1.Android模拟器(Android Emulator(emulator.exe))运行在计算机上的虚拟移动模拟器,可以使用模拟器来在一个实际的Android运行环境下设计,调试和测试应用程序。
2.集成开发环境插件(Android Development Tools Plugin for the Eclipse IDE 即ADT)可以直接从Eclipse访问其他Android开发工具.通过它可以进行包括截屏,管理端口转发(port-forwarding),设置断点,观察线程和进程信息.(a)它提供了一个新的项目向导(New Project Wizard),用于快速生成和建立起新Android应用程序所需的最基本的文件.(b) 它使得构建Android应用程序的过程变得自动化以及简单化.(c) 它提供了一个android代码编辑器,用于为Android 的manifest和资源文件编写有效的XML.3..调试监视服务(Dalvik Debug Monitor Service(ddms.bat)4.它集成在Dalvik(Android平台虚拟机)中,用于管理运行在模拟器或设备上的进程,并协助进行调试.可以用它来去除进程,选择一个特定程序来调试,生成跟踪数据,查看堆和线程数据,对模拟器或设备进行屏幕快照等.5..Android调试桥(Android Debug Bridge(adb.exe))6.它用于向模拟器或手机设备安装应用程序的apk文件和从命令行访问模拟器或手机设备.也可以用于将标准的调试器连接到运行在android模拟器或手机设备上的应用代码.7..Android资源打包工具(Andoird Asset Packing Tool(aapt.exe))8.可以通过aapt工具来创建apk文件,这些文件包含了android应用程序的二进制文件和资源文件.9..Android接口描述语言(Android Interface Description Language(aidl.exe))10.它用来生成进程间接口代码,在服务中便可用到.11..SQLite3数据库(sqlit3(sqlite3.exe))12.Android应用程序可以创建和使用SQLite数据文件,开发者和使用者也可以方便的访问这些数据文件.13..跟踪显示工具(Traceview(traceview.exe))14.它可以生成跟踪日志数据的图形分析视图,这些跟踪日志数据由android因公程序产生.15..创建SD卡工具(mksdcard(mksdcard.exe))16.它帮助创建磁盘镜像,这个磁盘镜像可以在模拟器上模拟外部存储卡.17..DX工具(dx(dx.exe))18.它将class字节码重写为android字节码(存储到dex文件中).19..生成Ant构建文件(activityCreator(activitycreator.bat))20.它是一个脚本.用来生成Ant构建文件,Ant构建文件用来编译android应用程序.若是在安装了ADT插件的Eclipse环境下开发则不需要这个脚本.21..Android虚拟设备(Android Virtual Devices AVD)22.每个android虚拟设备(AVD)模拟了单一的虚拟设备来运行android平台,这个平台至少要包括自己的内核,系统图像和数据分区.开发者可以创建并保存多种虚拟模拟器配置,每种配置环境有其自己的平台版本,硬件配置以及SD卡和用户数据,还可以有不同的显示外观等个性化设置,运行时只需要制定需要使用哪个.即可实现多平台下的模拟测试.3.Adnroid 核心包1.android.app:实现Android的应用程序模型。
A p p 制作专业:班级:学号:姓名:指导老师:Android开发平台搭建一、需要安装的软件1、JDK1.62、Android SDK Android提供的SDK有Windows和Linux(其区别主要是SDK中工具不同),在Android开发者的网站上可以直接下载各个版本的SDK。
Android的SDK命名规则为:android-sdk-{主机系统}_{体系结构}_{版本} 例如,Android提供SDK的几个文件包如下所示:android-sdk-windows-1.5_r2.zipandroid-sdk-linux_x86-1.5_r2.zipandroid-sdk-windows-1.6_r1.zipandroid-sdk-linux_x86-1.6_r1.zip3、ADT (Android Development Tools)4、Eclipse二、具体安装1、JDK1.6安装(1)常规安装(2)配置环境变量:JAVA_HOME、PATHJAVA_HOME C:\Java\jdk1618\ PATH %JAVA_HOME%\bin;%JAVA_HOME%\lib\tools.jar;(3)检测:javac HelloWorld.java; java HelloWorld;或 java -version2、Android SDK安装(1)新建文件夹 D:\android (2)将android-sdk.rar解压至D:\android\android-sdk (3)配置环境变量:ANDROID_HOME、PATH ANDROID_HOME D:\ android \ android-sdk \ PATH %ANDROID_HOME%\tools; %ANDROID_HOME%\platform-tools.ja r;(4)检测:cmd界面输入: android –h3、ADT安装(1)ADT.zip文件放置到D:\android目录下4、Eclipse安装(1)eclipse-java-helios-SR2-win32.zip解压至 D:\android\ (2)启动eclipse,设置workspace:(3)eclipse加载ADT: 进入eclipse菜单中的“Help”-> “Install New Software”不选择在线更新选择接受权限许可协议-> “Preferences”5、AVD(Android Virtual Devices)创建AVD是Android应用程序运行的终端(手机、平板等)模拟器将默认的J2EE工程视图模式关闭,打开JAVA工程视图模式Manager”6、HelloWorld工程(1)新建工程:进入eclipse菜单中的“File”->“New”->“Project…”(2)右键“HelloWorld”工程->“Run As”->“1Android Application”主要的程序文件为:.example.helloworld.MainActivity.java yout.Activity_main.xml res.values.strings.xml圆形菜单实现过程如下:使用相对布局,设置加号按钮,实现弹出菜单<RelativeLayoutxmlns:android="/apk/res /android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/xiaohui01"><com.example.circle.MenuViewandroid:id="@+id/menu"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:background="#fef0f0"></com.example.circle.MenuView><Buttonandroid:id="@+id/btn"android:layout_width="60dp"android:layout_height="60dp"android:background="@drawable/circle_bg"android:text="+"android:gravity="center"android:layout_alignParentBottom="true"android:textSize="50sp"android:textColor="@android:color/white"android:layout_centerHorizontal="true"android:layout_marginBottom="-20dp"/></RelativeLayout>以下是运行图:我将背景设置为我校校徽新定义一个视图类,实现弹出7个菜单功能,并分别计算它们的坐标位置,实现布局匀称分布,我将弹出菜单加上个人信息,以下为源码:package com.example.circle;import java.util.ArrayList;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;importandroid.view.animation.Animation.AnimationListene r;importandroid.view.animation.OvershootInterpolator; import android.view.animation.TranslateAnimation; import android.widget.TextView;public class MenuView extends ViewGroup {private static final int PADDING_L_R = 10;private static final int PADDING_T_B = 10;private static int DURATION = 500;private final int SMALL_RADIUS;private boolean isAnimating;private int currentIndex;private int startX,startY;private boolean isShown;private TextView childOne;private TextView childTwo;private TextView childThree;private TextView childFour;private TextView childFive;private TextView childSix;private TextView childSeven;private ArrayList<TextView> views = new ArrayList<TextView>();public MenuView(Context context) { super(context);SMALL_RADIUS = (int)context.getResources().getDimension(R.dimen.radiu s);init(context);}public MenuView(Context context, AttributeSet attrs) {super(context, attrs);SMALL_RADIUS = (int)context.getResources().getDimension(R.dimen.radiu s);init(context);}public MenuView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);SMALL_RADIUS = (int)context.getResources().getDimension(R.dimen.radiu s);init(context);}private void init(Context context) {childOne = new TextView(context);childTwo = new TextView(context);childThree = new TextView(context);childFour = new TextView(context);childFive = new TextView(context);childSix = new TextView(context);childSeven = new TextView(context);childOne.setBackgroundResource(R.drawable.circ le_bg);childTwo.setBackgroundResource(R.drawable.circ le_bg);childThree.setBackgroundResource(R.drawable.ci rcle_bg);childFour.setBackgroundResource(R.drawable.cir cle_bg);childFive.setBackgroundResource(R.drawable.cir cle_bg);childSix.setBackgroundResource(R.drawable.circ le_bg);childSeven.setBackgroundResource(R.drawable.ci rcle_bg);childOne.setText("信");childTwo.setText("安");childThree.setText("三");childFour.setText("班");childFive.setText("曹");childSix.setText("想");childSeven.setText("!");childOne.setGravity(Gravity.CENTER);childTwo.setGravity(Gravity.CENTER); childThree.setGravity(Gravity.CENTER); childFour.setGravity(Gravity.CENTER); childFive.setGravity(Gravity.CENTER); childSix.setGravity(Gravity.CENTER); childSeven.setGravity(Gravity.CENTER);addView(childOne);addView(childTwo);addView(childThree);addView(childFour);addView(childFive);addView(childSix);addView(childSeven);views.add(childOne);views.add(childTwo);views.add(childThree);views.add(childFour);views.add(childFive);views.add(childSix);views.add(childSeven);childOne.setVisibility(View.INVISIBLE);childTwo.setVisibility(View.INVISIBLE);childThree.setVisibility(View.INVISIBLE);childFour.setVisibility(View.INVISIBLE);childFive.setVisibility(View.INVISIBLE);childSix.setVisibility(View.INVISIBLE);childSeven.setVisibility(View.INVISIBLE); }public void out(){if(isAnimating)return;isAnimating = true;int length = views.size();for (int i = 0; i < length; i++) {final View v = views.get(i);TranslateAnimation animation = new TranslateAnimation(startX - v.getLeft(), 0, startY - v.getTop(), 0);animation.setInterpolator(new OvershootInterpolator(1.5f));animation.setDuration(DURATION);v.startAnimation(animation);animation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {currentIndex++;v.setVisibility(View.VISIBLE);if(currentIndex == views.size()){isAnimating = false;currentIndex = 0;isShown = true;}}});}}public void in(){if(isAnimating){return;}isAnimating = true;int length = views.size();for (int i = 0; i < length; i++) {final View v = views.get(i);TranslateAnimation animation = new TranslateAnimation( 0,startX - v.getLeft() - v.getWidth()/2, 0,startY - v.getTop() +v.getHeight()/2);animation.setInterpolator(new OvershootInterpolator(1.2f));if (i >= length/2 ) {animation.setDuration(DURATION-100);} else {animation.setDuration(DURATION);}v.startAnimation(animation);animation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {currentIndex++;v.setVisibility(View.INVISIBLE);if(currentIndex == views.size()){isAnimating = false;currentIndex = 0;isShown = false;}}});}}public boolean isAnimating(){return isAnimating;}public boolean isShown(){return isShown;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int childCount = getChildCount();if (childCount == 0)return;for (int i = 0; i < childCount; i++) {View child = getChildAt(i);if (child != null) {child.measure(MeasureSpec.makeMeasureSpec(SMALL_RADIUS,MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec( SMALL_RADIUS,MeasureSpec.EXACTLY));}}int screenWidth =getResources().getDisplayMetrics().widthPixels;//计算控件的高度hint r = getChildAt(0).getMeasuredWidth();int R = screenWidth/2-r;int h = R + r*2 + PADDING_T_B*2;setMeasuredDimension(screenWidth, h);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {int childCount = getChildCount();if (childCount == 0||getChildAt(0)==null) return;int width = getMeasuredWidth() - PADDING_L_R*2;int height = getMeasuredHeight() -PADDING_T_B*2;View childView = getChildAt(0);//大半圆半径int radiusBig =(width-childView.getMeasuredWidth())/2;//小圆半径int radiusSmall =childView.getMeasuredWidth()/2;for (int i = 0; i < childCount; i++) {View child = getChildAt(i);if (child == null)break;if(i==0){int child_x = radiusSmall + PADDING_L_R;int child_y = height - radiusSmall;layout(child, child_x, child_y, radiusSmall);}else if(i==1){int child_x = (int) (width/2 -radiusBig*Math.cos(Math.PI/6)) + PADDING_L_R;int child_y = (int)(height-radiusSmall-radiusBig*Math.sin(Math.PI/6) );layout(child, child_x, child_y, radiusSmall);}else if(i==2){int child_x = (int) (width/2 -radiusBig*Math.cos(Math.PI/3)) + PADDING_L_R;int child_y = (int)(height-radiusSmall-radiusBig*Math.sin(Math.PI/3) );layout(child, child_x, child_y, radiusSmall);}else if(i==3){int child_x = width/2 + PADDING_L_R;int child_y = height - radiusSmall - radiusBig;layout(child, child_x, child_y, radiusSmall);}else if(i==4){int child_x = (int)(width/2+radiusBig*Math.cos(Math.PI/3)) + PADDING_L_R;int child_y = (int) (height - radiusSmall - radiusBig*Math.sin(Math.PI/3));layout(child, child_x, child_y, radiusSmall);}else if(i==5){int child_x = (int)(width/2+radiusBig*Math.cos(Math.PI/6)) + PADDING_L_R;int child_y = (int) (height - radiusSmall - radiusBig*Math.sin(Math.PI/6));layout(child, child_x, child_y, radiusSmall);}else if(i==6){int child_x = width - radiusSmall + PADDING_L_R;int child_y = height - radiusSmall;layout(child, child_x, child_y, radiusSmall);}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);startX = getWidth()/2;startY = getHeight() - childOne.getWidth()/2 - PADDING_T_B;}private void layout(View view, int child_x, int child_y,int radiusSmall) {int child_l = getChildOffset_l(child_x,child_y, radiusSmall);int child_t = getChildOffset_t(child_x,child_y, radiusSmall);int child_r = getChildOffset_r(child_x,child_y, radiusSmall);int child_b = getChildOffset_b(child_x,child_y, radiusSmall);yout(child_l, child_t, child_r,child_b);}private int getChildOffset_l(int child_x,int child_y,int radius){return child_x - radius;}private int getChildOffset_t(int child_x,int child_y,int radius){return child_y - radius;}private int getChildOffset_r(int child_x,int child_y,int radius){return child_x + radius;}private int getChildOffset_b(int child_x,int child_y,int radius){return child_y + radius;}}主活动MainActivity.java中定义Button和menuView,并对Button实行实例化,设置监听和点击响应:package com.example.circle;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener{private Button btn;private MenuView menuView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);initViews();initData();setListeners();}private void initViews(){btn = (Button) findViewById(R.id.btn);menuView = (MenuView) findViewById(R.id.menu);}private void initData(){}private void setListeners(){btn.setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn:if (menuView.isShown())menuView.in();elsemenuView.out();break;default:break;}}}。
详解Androidv1、v2、v3签名(⼩结)Android签名机制什么是Android签名了解 HTTPS 通信的同学都知道,在消息通信时,必须⾄少解决两个问题:⼀是确保消息来源的真实性,⼆是确保消息不会被第三⽅篡改。
同理,在安装 apk 时,同样也需要确保 apk 来源的真实性,以及 apk 没有被第三⽅篡改。
为了解决这⼀问题,Android官⽅要求开发者对 apk 进⾏签名,⽽签名就是对apk进⾏加密的过程。
要了解如何实现签名,需要了解两个基本概念:消息摘要、数字签名和数字证书。
消息摘要消息摘要(Message Digest),⼜称数字摘要(Digital Digest)或数字指纹(Finger Print)。
简单来说,消息摘要就是在消息数据上,执⾏⼀个单向的 Hash 函数,⽣成⼀个固定长度的Hash值,这个Hash值即是消息摘要。
上⾯提到的的加密 Hash 函数就是消息摘要算法。
它有以下特征:⽆论输⼊的消息有多长,计算出来的消息摘要的长度总是固定的。
例如:应⽤ MD5 算法摘要的消息有128个⽐特位,⽤ SHA-1 算法摘要的消息最终有 160 ⽐特位的输出,SHA-1 的变体可以产⽣ 192 ⽐特位和 256 ⽐特位的消息摘要。
⼀般认为,摘要的最终输出越长,该摘要算法就越安全。
消息摘要看起来是「随机的」。
这些⽐特看上去是胡乱的杂凑在⼀起的。
可以⽤⼤量的输⼊来检验其输出是否相同,⼀般,不同的输⼊会有不同的输出,⽽且输出的摘要消息可以通过随机性检验。
但是,⼀个摘要并不是真正随机的,因为⽤相同的算法对相同的消息求两次摘要,其结果必然相同;⽽若是真正随机的,则⽆论如何都是⽆法重现的。
因此消息摘要是「伪随机的」。
消息摘要函数是单向函数,即只能进⾏正向的信息摘要,⽽⽆法从摘要中恢复出任何的消息,甚⾄根本就找不到任何与原信息相关的信息。
当然,可以采⽤强⼒攻击的⽅法,即尝试每⼀个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。
Android SDK开发包国内下载地址不知道是因为最近kaihui还是怎么的,打开android sdk官方网站特别的慢,想下载最新版本的platform几乎变成不可能完成的任务,不知道为什么Google不像Apache那样在各国设立镜像站。
为了预防今后再出现这样的情况,这次干脆把android开发所需要的各种包总结一下,顺便提供本地下载链接,省得以后找起来麻烦。
通过分析SDK Manager里要用到的repository文件,我下载了目前google提供的各类安卓开发包并上传到了网盘。
由于网盘有CDN支持,即使不用迅雷,下载速度依然很快。
如果你从官网下载很慢,不妨试试这些国内链接。
更新2015/3/11:完善了sysimg部分,增加了Level 21的x86平台sysimg链接。
更新2015/1/5:增加了android 5.0的sample下载。
更新2014/12/19:增加了Support包下载,更新了doc资源版本和下载链接;更新了Andr oid Studio版本到1.0.1,更新了SDK Tools到r24。
更新2014/12/2:更新了SDK Tools的版本,从22.6到23.0.2;增加了Android Studio下载。
更新2014/10/23:增加了部分Android-L资源下载。
更新2014/10/23:感谢CodeDream分享的另一个国内下载网址,内容比较全(没有adt-b undle)速度较快,推荐。
更新2014/8/15:更新了level14-17的samples包;增加了level18-20的samples包;增加了level20版本的源码包;增加了level18-20的platform包。
更新2014/8/7:增加了level18和level19的源码包,并更新了其他版本源码包的链接。
更新2014/7/1: 百度和微云的大部分链接都失效了,重新更新了adt-bundle和sdk的下载链接,部分文件版本有升级。
Android 1.0第一版商用操作系统Android1.1更新了部分API,新增一些功能,修正了一些错误,同时增加com.google.android.maps包Android 1.5智能虚拟键盘使用widgets实现桌面个性化在线文件夹(Live Folder)快速浏览在线数据视频录制和分享图片上传更快的标准兼容浏览器V oice search 语音搜索立体声蓝牙和免提电话Android 1.6完全重新设计的Android Market,可以显示更多的屏幕截图手势支持,可以让开发者生成针对某个应用程序的手势库支持CDMA网络:中国电信的用户可以期待EVDO的Android手机了TXT-2-Speech,支持了更多语言的发音,包括英语、法语、德语、意大利语等快速搜索框,可直接搜索括联系人,音乐,浏览历史,书签等手机内容全新的拍照界面:新版相机程序启动速度快了39%,拍照间的延迟减少了28%应用程序耗电查看:这下好了,哪个软件耗多少电,现在一见了然了新增面向视觉或听觉困难人群的易用性插件Linux内核升级到2.6.29其他:支持更多的屏幕分辨率,如WVGA,QVGA等Android 2.0由于文件结构的改动优化,使得整个操作流畅性得到了很大的提升自带的Chrome Lite浏览器现在加入了对双击屏幕进行缩放的支持加强了网络社交功能,比如Facebook好友整合至联系人功能强化了语音识别的搜索控制。
整个系统多处都支持语音控制,并拥有独立的控制面板谷歌地图服务更新,加入了全新的导航系统,甚至比转业的导航软件更为先进加入了原生微软Exchange邮件服务支持提供了多个不同帐户,统一的邮件收件箱只需双击就能上传图片至YouTube优化了驾车时的体验,新的“Car Home”应用程序为各功能提供了易于操作的快捷链接,还能方便地使用语音控制功能,便于用户驾车时使用Android 2.1可以同时绑定多个Google账号无线控件里有了VPN设置增加了连接到PC设置增强了语言和声音的转换功能,并加入了文字到语音转换全新的拨号界面,按键更大,更易于操作更多桌面Widget新的Google地图可以使用谷歌地图导航功能新的浏览器版本,加强了稳定性和网页渲染能力全局搜索功能加强全新的Market程序,搜索更快布局更合理Android 2.2全面支持Flash10.1应用程序自动升级,让升级更加人性化支持应用程序安装在外置内存上Linux内核将升级为最新的2.6.32版本,系统更加稳定对系统性能进一步优化,让手机有更多的运行内存增加了轨迹球LED指示灯变色这个新功能增加了对3D性能的优化,3D性能更加强大FM功能也将在新系统中得到全面支持Android 2.3用户界面更美观提升游戏体验提升多媒体能力增加官方进程管理改善电源管理NFC近场通信全局下载管理全新虚拟键盘原生支持前置前置摄像头SIP网络电话Android3.0-3.1:安卓3.0系统主要用于安卓的平板产品,画面动感,可操控性更强,代表有摩托罗拉的平板产品XOOM,3.1也已经发布,也主要用于平板产品。
compileSdkVersion编译SDK版本是用于编译应用程序的Android操作系统的版本。
这意味着你的应用需要在Android操作系统的特定版本或更高版本的设备上运行。
例如,如果你指定了Android 10的编译SDK版本(API级别29),你的应用程序将能够在Android 10或更高的设备上运行,但可能无法在低于安卓10的操作系统版本设备上运行。
为你的应用选择正确的编译SDK版本很重要,因为它会影响应用与不同设备的兼容性,以及作为开发者可以使用的功能。
使用最新的可用版本通常是个好主意,因为它允许您利用最新的功能和改进。
然而,你可能需要考虑目标用户和应用所需的Android操作系统最低版本等因素。
要在Android应用程序中指定编译SDK版本,可以将其包含在构建中。
你的应用模块的Gradle文件。
在defaultConfig块中,您可以将compileSdkVersion属性设置为所需的版本。
例如:1.android {2. compileSdkVersion 293. ...4.}在defaultConfig块中指定minSdkVersion和targetSdkVersion也是一个好主意。
minSdkVersion是你的应用程序运行所需的安卓操作系统的最低版本,而targetSdkVersion 是你的应用程序的目标安卓操作系统的版本。
这允许你指定你的应用程序兼容的设备范围,并有助于确保你的应用程序在这些设备上顺利运行。
例如:1.android {2. compileSdkVersion 293. minSdkVersion 214. targetSdkVersion 295. ...6.}在这个例子中,应用程序是针对Android 10 (API级别29)编译的,它被设计为运行在Android 5.0 Lollipop (API级别21)或更高的设备上。
它还针对Android 10或更高版本的设备进行了优化。
Android中buildToolVersion与CompileSdkVersion的区别SDK中主要的⽬录:【build-tools】⾥⾯是不同版本(例如21.1.1)的build⼯具,这些⼯具包括了aapt打包⼯具、dx.bat、aidl.exe等等【platform】是存放不同API-level版本SDK⽬录的地⽅【platform-tools】是⼀些android平台相关的⼯具,adb、fastboot等【tools】是指的安卓开发相关的⼯具,例如android.bat、ddms.bat(Dalvik debug Monitor Service)、draw9patch.bat等等1、CompileSdkVersion是你SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。
2、buildeToolVersion是你构建⼯具的版本,其中包括了打包⼯具aapt、dx等等。
这个⼯具的⽬录位于..your_sdk_path/build-tools/XX.XX.XX3、在ecplise的project.properties中可以设置sdk.buildtools=17.0.0。
也可以不设置,不设置的话就是指定最新版本。
⽽在android studio中是必须在build.gradle中设置。
例如compileSdkVersion 22buildToolsVersion "22.0.1"4、你可以⽤⾼版本的build-tool去构建⼀个低版本的sdk⼯程,例如build-tool的版本为20,去构建⼀个sdk版本为18的例如:compileSdkVersion 18总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。
如果你想了解更多相关内容请查看下⾯相关链接。
ubuntu系统安装安卓模拟器(Android SDK)的方法2013-01-15 22:57 人气:301ubuntu或者别的linux系统安装安卓模拟器(Android SDK)的方法跟Windows差不多,今天安卓部落就教大家怎么样在ubuntu环境下安装安卓模拟器。
首先下载Android SDKAndroid SDK官方下载地址:/sdk/index.html进入网站后点击底下的DOWNLOAD FOR OTHER PLATFORMS注意这里有两个版本,上面一个包含了eclipse和Android SDK,底下一个就只是安卓模拟器Android SDK的安装包,一般来说如果你不打算开发安卓软件的话,就下载下面一个吧,记得分清除32-bit和64-bit的版本。
将下载好的adt-bundle-linux-x86_64.zip复制到虚拟机的主目录里面,也可以直接在ubuntu环境下载。
解压缩文件解压缩成功后,进入adt-bundle-linux-x86_64/sdk/tools目录右键打开终端然后输入命令./android启动Android SDK Manager勾中Tools和Android 4.2(API 17),还可以安装以前的Android 4.1.2或者2.3版本,一般我们选择最新版本就好了,因为选择的版本越多下载时间就越长。
选中后,点击右下角的Install 5 packages...这时就开始在线下载文件了,时间会比较长,中途如果弹出错误窗口也不用管,等待下载完成。
跟windows环境安装安卓模拟器不一样,linux环境下需要用命令来建立模拟器。
首先在终端中输入./mksdcard 512M mysd01上面的512M是指虚拟机的SD卡大小,mysd01是指卡的名称,大小和名称可以更改为别的。
./android create avd -n myphone01 -t 2创建虚拟手机设备,这里的myphone01是指虚拟机名称,也可以更改。
史上最全Androidbuild.gradle配置详解(⼩结)Android Studio是采⽤gradle来构建项⽬的,gradle是基于groovy语⾔的,如果只是⽤它构建普通Android项⽬的话,是可以不去学groovy的。
当我们创建⼀个Android项⽬时会包含两个Android build.gradle配置详解⽂件,如下图:⼀、Project的build.gradle⽂件:对应的build.gradle代码如下:// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {//这⾥是gradle脚本执⾏所需依赖,分别是对应的maven库和插件repositories {google()//从Android Studio3.0后新增了google()配置,可以引⽤google上的开源项⽬jcenter()//是⼀个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引⽤ jcenter上的开源项⽬}dependencies {classpath 'com.android.tools.build:gradle:3.0.0'////此处是android的插件gradle,gradle是⼀个强⼤的项⽬构建⼯具// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}}allprojects {//这⾥是项⽬本⾝需要的依赖,⽐如项⽬所需的maven库repositories {google()jcenter()}}// 运⾏gradle clean时,执⾏此处定义的task任务。
AndroidSDKPDKNDK详解昨天⼀个同事问我 PDK,NDK,SDK都是做什么的,什么意思。
之前听到过这⼏个词,感觉⾃⼰能够理解,但是发现要⽐较清晰的给她解释才发现⾃⼰的理解可能还不是很到位,带着疑问查了查资料,结合⾃⼰的理解写下来。
其实这个三个词应该是在软件开发领域通⽤的,它们的全称分别为SDK(Software Development Kit),PDK(Platform DevelopmentKit),NDK(Native Development Kit),我们可以从它们的⽤途以及针对的⼈群来理解⼀下。
1.SDK 软件开发套件⼀般平台都会发布⾃⼰的SDK,SDK包含该平台为应⽤程序开发⼈员提供的开发⼯具,主要是所有公开API的集合,应⽤程序开发⼈员可以借助SDK中的API快速的进⾏应⽤的开发。
Android SDK针对所有应⽤开发⼈员开放,下载ADT查看sdk⽬录如下:sdk├──add-ons├──build-tools├──extras├── platforms├──platform-tools└──toolsSDK⽂件⽬录解释:1) add-ons 这⾥保存⼀些附加库,例如GoogleMaps2) build-tools 这⾥放的是Android的⼀些重要的编译⼯具,⽐如aapt、aidl、逆向调试⼯具dexdump和编译脚本dx等3) extras 存放的是⼏次⼤的升级添加的新功能相关的static library,如android-v4,android-v7,android-v134) platforms 存放的是平台真正的SDK,其中会根据APILevel来区分SDK的版本,命名规则android-APILevel,如android 4.4 SDK的⽂件夹名称为android-20,其⽂件⽬录如下:├──android.jar├── build.prop├──data├── framework.aidl├── sdk.properties├──skins├── source.properties├── templates└── uiautomator.jar该⽬录下主要⽂件android.jar为该版本framework的主要⽂件,包括class,图⽚等;data⽬录下为系统的资源⽂件,包括字符串资源,fonts 字体库⽂件,activity broadcast的action记录,intent的category,widget的列表等内容;skins⽬录为Android模拟器的⽪肤资源;templates⽬录下为创建Android⼯程默认模板,包括AndroidManifest.xml,⽂件,launch图标等;5) platform-tools 此⽬录主要放置的是平台⼯具,如adb, fastboot, sqlite3等6) tootls 这个⽬录中有⽐较重要的调试⼯具,如ddms(包括⼀些截图),Android模拟器的主程序emulator,traceview性能优化⼯具, UI控件扫描⼯具uiautomatorviewer,UI层级显⽰⼯具hierarchyviewer,代码混淆⼯具proguard,ant编译脚本,代码缺陷扫描⼯具lint等,这个⽬录下也有个templates⽬录,简单看了下不太明⽩是⼲什么⽤的,有兴趣的可以了解⼀下。
Android 各个版本SDK的区别---转载Android 1.5 API变更概要:UI framework· Framework for easier background/UI thread interaction·新SlidingDrawer 组件·新HorizontalScrollview 组件AppWidget framework·一些关于创建桌面AppWidget 的API.·提供根据自定义的内容创建LiveFolders的APIMedia framework·原声录音和回放APIs·交互式的MIDI 回放引擎·开发者使用的视频录像API (3GP format).·视频相片分享Intents·媒体搜索IntentInput Method framework·输入法服务framework·文本预测引擎·提供具有下载能力的IME给使用者Application-defined hardware requirements应用可定义硬件需求,应用程序可以定义说明此程序需要什么硬件需求.比如是否需要物理键盘或者轨迹球.Speech recognition framework·支持语音识别库.Miscellaneous API additions· LocationManager -应用可以接收到位置改变的信息.· WebView - 触摸start/end/move/cancel DOM 事件的支持·重建Sensor Manager APIs· GLSurfaceView - 创建OpenGL 应用更加方便的framework .·软件升级安装成功的Broadcast Intent - 更加平和优秀的软件升级体验Android 1.6 API变更概要:UI framework·新的类android.view.animation 控制动画行为:o AnticipateInterpolatoro AnticipateOvershootInterpolatoro BounceInterpolatoro OvershootInterpolator·新的XML 属性android onClick ,从一个layout文件描述一个view的View.OnClickListener.·对不同分辨率的屏幕的新的支持. 对于Bitmap和Canvas会执行有针对性的缩放行为.该框架会根据屏幕分辨率和其他内容自动缩放bitmap等.要在你的应用中使用Android 1.6包含的API的话你必须要设置"4"属性在manifest的元素中Search framework·应用程序现在可以公开的有关内容,作为建议放入快速搜索框,新的设备范围内的搜索功能,是可从主屏幕搜索。
为了支持这一点,搜索框架增加了新的属性,可搜索的元数据文件。
有关完整的信息,请参阅SearchManager文档。
Accessibility framework·New android.accessibility package that includes classes for capturing accessibility events and forwarding them to an AccessibilityService handler.·New AccessibilityService package that lets your application track user events and provide visual, audible, or haptic feedback to the user.Gesture Input·新的gesture API :创建,识别,读取,保存手势.Text-to-speech·新的android.speech.tts 包提供了TTS文本朗读功能,从一个文本生成一个声音文件的回放.Graphics·android.graphics 中的类,现在支持为不同的屏幕尺寸进行缩放.Telephony·新的SmsManager 发送和接受短信.Utilities·新的DisplayMetrics 字段决定当前设备屏幕的密度.Android Manifest elementso 新的元素o 新的标签o glEsVersion: 指定最小openGL ES的版本·元素的新的属性:o 目标SDK版本: 应用程序能够指定目标版本. 它能够运行在旧版本(低至minSdkVersion), 他是按照应用程序的指定版本开发的. Specifying this version allows the platform to disablecompatibility code that is not required or enable newer features that are not available to older applications.o maxSdkVersion: 指定设计这个程序运行的最高版本重要: 当使用这些属性前请认真阅读文档.New Permissions· CHANGE_WIFI_MULTICAST_STATE: 允许应用进入Wi-Fi 多点传送模式.· GLOBAL_SEARCH: 允许全局搜索系统,以便精确确定content provider.·INSTALL_LOCATION_PROVIDER: 允许应用在Location Manager.安装一个location provider.· READ_HISTORY_BOOKMARKS: 允许应用读取(并不能写) 用户的浏览记录和书签· WRITE_HISTORY_BOOKMARKS: 允许应用写入(并不能读) 用户的浏览记录和书签·WRITE_EXTERNAL_STORAGE: 允许程序写入外部存储器.应用程序使用API级别3下将默认授予此权限(这对用户可见的); 应用程序使用API level4 或者更高的,必须要明确的宣告此权限.Android 2.0 API变更概要:Bluetooth·开启关闭蓝牙·设备和服务发现·使用RFCOMM连接一个可插拔的设备收发数据·公布RFCOMM 服务和监听接收RFCOMM 连接Sync adapters·新的APIs, 同步桥接器连接任何backendAccount Manager·集中的帐户管理器API ,安全的储存和使用可信的tokens/passwordsContacts·新的通信APIs 允许获取多个账户的数据.·新的快速通信framework APIs 允许开发者在他们的应用中创建通信标记, 一键点击标记打开一个新的窗口展示一个如何联系当前人的列表.WebView·不赞成使用的类: UrlInterceptHandler, Plugin, PluginData, PluginList, UrlInterceptRegistry.Camera·颜色模式, 场景模式闪光模式, 焦点模式, 白平衡旋转和其他设置的新的特征.·当缩放级别改变的时候,会回调新的缩放回调接口.Media· MediaScanner现在为所有图片生成缩微图when they are inserted into MediaStore.·新的缩微图API : 检索需要的图片和视频的缩微图.Other Framework·android.R.style 中新的系统主题,能够更加简单的显示当前acitivities的系统壁纸或者保持之前的activity在后台.新的壁纸管理器API 取代并且增加了wallpaper APIs ,我们可以允许我们的应用要求设置系统壁纸.·新的Service APIs帮助应用准确的处理Service 生命周期,在指定的低内存状态下service将会被关闭.o Service.setForeground() 不推荐使用,并且现在这个方法并没有实际执行. .他被一个新的API所取代, startForeground(), that helps (and requires) associating an ongoing notification with the foreground state.· MotionEvent 如果设备允许的话,MotionEvent 会返回多点触摸信息.最多可同时获取3点·KeyEvent 现在有了新的按键发送APIs,去帮助实现action-on-up 和长按键行为, 一个新的机制取消按键(虚拟按键).· youtParams 现在有了新的常量允许窗口能够在被锁或者其他的状况中唤醒屏幕,这个允许程序能够让例如闹钟等的应用实现唤醒设备.·New Intent APIs 广播设备的对接状态,当这个设备放在桌面或者停车场,允许程序启动特殊的activity.Key events executed on key-upAndroid 2.0能够使用虚拟按键HOME, MENU, BACK和SEARCH,而非物理按键,为了让用户在他们的设备中获得最好的用户体验,android平台现在把这些按键执行加入到了key-up,做了key-down/key-up 配对,而非只有key-down.,这有助于防止意外按钮事件,并让使用者按下按钮区域,然后拖动而不生成一个事件出来。
这种改变只会影响你的应用程序一点,如果它是拦截按钮事件,最好用key-down,而不是key-up.。
特例,如果您的应用程序拦截BACK 键,你应该确保你的应用妥善处理按键事件。
Android 2.0.1 API变更概要:·新的快速联系人标记风格(quickContactBadgeStyle)* 属性,让应用的QuickContactBadge 组件接收必要的风格.·当在manifest里面宣布了filter,取消了支持ACTION_CONFIGURATION_CHANGED 广播,如果想要去接收这个广播, 这个应用必须注册registerReceiver(BroadcastReceiver, IntentFilter).性能上的改变:Bluetooth改变了ACTION_REQUEST_ENABLE 和ACTION_REQUEST_DISCOVERABLE的返回值·ACTION_REQUEST_ENABLE 如果蓝牙是成功开启的,现在返回RESULT_OK .如果使用者拒绝开启蓝牙的请求,则会返回RESULT_CANCELED .·ACTION_REQUEST_DISCOVERABLE 如果使用者拒绝启动蓝牙或者蓝牙的可发现功能,则返回RESULT_CANCELED .通讯The ACTION_INSERT Intent returns RESULT_CANCELED in cases where the contact was not persisted (例如剪切保存到一个空的操作里面).修复错误:资源现在framework可以正选择应用资源的根据API等级划分的文件夹(drawable-v4是API level4版本用的资源).现在的版本这个功能不能正常工作的问题已经修复.ContactsThe ACTION_INSERT Intent now returns the appropriate kind of URI when the request is made using the (now deprecated) Contacts APIs.Other Framework fixes· getCallingPackage() 现在正确的报告包名, 而不是进程名.Android 2.1 API变更概要:Live Wallpapers 动态桌面以下增加的API可以提供你开发动态的桌面:·新android.service.wallpaper 包.·新WallpaperInfo 类.·升级的WallpaperManager.附加说明, 如果你的应用相提供Live Wallpapers的功能, 你必须记得增加一个元素到你的应用manifest里面. 宣布这个属性android:name="android.software.live_wallpaper". 举例:电话·新的SignalStrength 类提供当前网络信号的一些信息这些信息可以从onSignalStrengthsChanged(SignalStrength) 回调.·新的onDataConnectionStateChanged(int, int) 回调.Views·新的View 方法isOpaque() 和onDrawScrollBars(Canvas).·新的RemoteViews 方法addView(int, RemoteViews) 和removeAllViews(int).·新的ViewGroup 方法isChildrenDrawingOrderEnabled() 和setChildrenDrawingOrderEnabled(boolean).WebKit·新的WebStorage 方法操作网页数据缓存.·新的GeolocationPermissions 方法获取Geolocation permissions 的出处, 把他们设置到WebView上.·新的WebSettings 方法管理软件缓存, 网页缓存和屏幕的缩放.·新的WebChromeClient 方法处理视频, 历史记录, 自定义view, 软件缓存限制还有其他Android 2.2 API变更概要:对MicrosoftExchange更好的支持。