安卓_安卓模拟器 - CSDN
安卓 订阅
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 [1] 展开全文
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42.8%,首度超越iOS。但运营收入不及iOS。 [1]
信息
更新时间
2019年9月4日 [2]
源码模式
自由及开放源代码软件
发行日期
2008年9月23日
软件许可
Apache License、 GPL等
创始人
安迪·鲁宾(Andy Rubin)
软件语言
C/C++(底层) Java,Kotlin等(应用层)
开发商
Google、开放手持设备联盟
发行商
Google - 谷歌(美国)
软件版本
Android 10(正式版) [2]
软件平台
Google
内核类型
宏内核(Linux内核)
测试版本
Android 11 Developer Preview 3(开发者预览版)
系统家族
类Unix,Linux
软件名称
Android(安卓)
Android系统简介
Android一词的本义指“机器人”,同时也是Google于2007年11月5日 Android logo相关图片(33张) 宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。(Android logo 相关图片相册图片来源:)
收起全文
  • 这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 ...
  • Android开发精典案例60个【源码】

    千次下载 热门讨论 2020-07-28 23:32:54
    60个Android开发精典案例,好东西 - 给大家分享60个Android开发的精典案例,包含任务监听、设备适配,游戏框架搭建,特效实现,多点触控,网络协议,游戏关卡设置等内容。特别是做游戏开发的朋友值得研究。喜欢就拿...
  • 安卓 四大组件

    万次阅读 2018-06-29 11:16:46
    Android开发的四大组件 Android四大组件分别为activity、service、content provider、broadcast receive 一、Activity Activity生命周期的方法是成对出现的 onCreate() & onDestory() onStart() ...

    Android开发的四大组件
    Android四大组件分别为activity、service、content provider、broadcast receive
    一、Activity
    这里写图片描述
    Activity生命周期的方法是成对出现的

    onCreate() & onDestory()
    onStart() & onStop()
    onResume() & onPause()

    每一个活动( Activity)都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。 但是当一个活动的状态发生改变的时候,开发者可以通过调用onXX() 的方法获取到相关的通知信息。 在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候来调用。
    一,onCreate:当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate方法有一个参数,该参数可以为空(null),也可以是之前调用onSaveInstanceState方法保存的状态信息。 二,在onStart:方法该触发的所属表示将活动被展现给用户四,在onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。 五,onStop:当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发onStop方法。所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开 者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,在onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。六,onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。七,onDestroy:当活动销毁的时候,触发该方法。和onStop方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法·。 的onSaveInstanceState:系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等活动栈

    每个Activity的状态是由它在Activity栈(是一个后进先出LIFO,包含所有正在运行Activity的队列)中的位置决定的。
    当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。
    这里写图片描述
    一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。
    Activity状态
    Activity有以下四种状态:
    活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。
    暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。
    当被暂停,一个活动仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下,机器人将会杀死一个暂停的活动来为活动的活动提供充足的资源。当一个活动变为完全隐藏,它将会变成停止。停止:。当一个活动不是可视的,它“停止”了这个活动将仍然在内存中保存它所有的状态和会员信息尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。当一个活动停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个活动退出或关闭了,它将变为待用状态。待用:。在一个活动被杀死后和被装在前,它是待用状态的待用胡亚蓉被移除活动栈,并且需要在显示和可用之前重新启动它的活性的四种加载模式在机器人的多活性开发中,活动之间的跳转可能需要有多种方式,有时是普通的生成一个新实例 有时希望跳转到原来某个活动实例,而不是生成大量的重复的活性。加载模式便是决定以哪种方式启动一个跳转到原来某个活动实例。在机器人里,有4种活性的启动模式,分别为:·standard:标准模式,一调用startActivity()方法就会产生一个新的实例。·singleTop:如果已经有一个实例位于Activity stack的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。·singleTask:会在一个新的任务中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。

    ·singleInstance:这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。
    这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。
    相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
    标志,这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。1、Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
    2、intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    3、startActivity(intent);
    复制代码
    Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。

    FLAG_ACTIVITY_NEW_TASK
    FLAG_ACTIVITY_CLEAR_TOP
    FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
    FLAG_ACTIVITY_SINGLE_TOP

    核心的特性有:

    taskAffinity
    launchMode
    clearTaskOnLaunch
    alwaysRetainTaskState
    finishOnTaskLaunch

    四种加载模式的区别 所属task的区别
    一般情况下,“standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,就相当于谁调用它,它就跟谁在同一个Task中。
    除非Intent包括参数FLAG_ACTIVITY_NEW_任务。如果提供了FLAG 活动新_ TASK参数,会启动到别的任务里。“singleTask”和” singleInstance”总是把要启动的活动作为一个任务的根元素,他们不会被启动到一个其他任务里。是否允许多个实例“standard”和“singleTop”可以被实例化多次,并且是可以存在于不同的任务中;这种实例化时一个任务可以包括一个activity的多个实例; “ singleTask“和”singleInstance“则限制只生成一个实例,并且是task的根元素。singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不创建新的实例。是否允许其它活动存在于本任务内“singleInstance”独占一个任务,其它活动不能存在那个任务里; 如果它启动了一个新的活动,不管新的活动的启动模式如何,新的活动都将会到别的任务里运行(如同加了FLAG 活动 NEW_TASK参数)。而另 三种模式,则可以和其它活动共存。是否每次都生成新实例

    “standard”对于每一个启动Intent都会生成一个activity的新实例;
    “singleTop”的activity如果在task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。
    “singleInstance”是其所在栈的唯一activity,它会每次都被重用。
    “singleTask” 如果在栈顶,则接受intent,否则,该intent会被丢弃,但是该task仍会回到前台。
    当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法,如果收到intent生成一个activity实例,那么用户可以通过back键回到上一个状态;如果是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。
    ———————————–
    二、Service
    service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。
    Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中
    通过来声明。可以通过contect.startservice和contect.bindserverice来启动。
    Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。

    启动service,根据onStartCommand的返回值不同,有两个附加的模式:
    1、START_STICKY 用于显示启动和停止service。
    2、START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要处理时才运行的模式。
    服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。
    1、 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
    如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。
    如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
    采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
    2、使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
    onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用的onDestroy()方法。拥有服务的进程具有较高的优先级1.如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被杀死。2.如果当前服务已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着服务一般不会被杀死。3。如果客户端已经连接到service(bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。4.如果service可以使用startForeground(int,Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时被杀。如果有其他的应用组件作为服务,活动等运行在相同的进程中,那么将会增加该进程的重要性。本地服务1.不需和活动交互的本地服务2.本地服务和活动交互\ ———————–

    三、Broadcast Receiver
    是一个全局的监听器,属于Android四大组件之一
    作用是监听 / 接收 应用 App 发出的广播消息,并 做出响应
    应用场景为

    1、Android不同组件间的通信
    2、多线程通信
    3、与Android系统在特定情况下的通信


    四、Content Provider详解

    ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。
    android中对数据操作包含有:
    file, sqlite3, Preferences,ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。
    android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。
    使用方式:
    一个应用实现ContentProvider来提供内容给别的应用来操作,
    一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。
    1.ContentProvider
    Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,当然前提是已获得适当的读取权限。

    2.ContentResolver
    当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。
    3.Uri
    Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
    第一部分是”content://”。可以看作是网址中的”http://”。
    第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作是网址中的主机名,比如”blog.csdn.net”。
    第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。

    作者:陈进杨

    原文链接:点击这里

    展开全文
  • 全课程由浅入深、系统全面地讲解了Android软件开发的方方面面。 讲师具有在北大青鸟,东软睿道等IT培训机构的10年以上培训经验。 带领你搭建Android开发环境,完成你的第一个Android程序。 完整地讲解了Android...
  • 安卓开发——登录界面

    万次阅读 多人点赞 2018-09-19 09:00:50
    安卓系统体系架构思维导图

    项目功能需求:
    1> 点击登录按钮,登录成功与否必须有对应的响应事件。
    2> 点击取消按钮,可以退出程序。
    3> 用户名文本框和密码框可以接收由键盘输入的数据,且分别有提示信息。(密码框显示输入的内容不显示)
    4> 要有背景图片

    效果图

    在这里插入图片描述
    一、安卓结构布局分析,外层布局一共有四层为垂直布局,第二三四层内嵌布局为水平布局。
    二、线性布局概述
    线性布局(LinearLayout)是一种比较常用且简单的布局方式。在这种布局中,所有的子元素都是按照垂直或水平的顺序排列在界面上。如果是垂直排列,每个子元素占一行,如果是水平排列,则每个子元素占一列。线性布局可以支持布局样式嵌套实现复杂的布局样式。

    layout文件夹下面的activity_main.xml为布局文件
    LinearLayout标签的常用属性有:
    (1)layout_width:布局宽度(match_parent(适应屏幕宽度)、wrap_content(包裹宽度))
    (2)layout_height:布局高度(match_parent(适应屏幕高度)、wrap_content(包裹高度))
    (3)orietation:方向(vertical(垂直),horizontal(水平))
    (4)gravity:对齐方式(left, right, center……)
    (5)background:背景(颜色、图片)
    三、导入背景图片

    TextView为文本标签,其常用属性有:
    (1)text(文本)【建议文本内容在values下的string.xml中自行定义,例:android:text="@string/login" ;其中login是string.xml文件中的name属性】

    (2)textSize(字体大小)【字体大小单位一般用sp,例:android:textSize=“25sp”】
    (3)textColor(字体颜色)【例:android:textColor="#ff00ff"】
    EditText为可编辑文本框,其常用属性有:
    (1)hint(提示信息)【例:android:hint="@string/et_username"】
    (2)singleLine(单行显示)【属性:(true、false)例:android:singleLine=“true”】
    (3)inputType(输入类型)【属性:(textPassword、datetime、text)例:android:inputType=“textPassword”】
    Button为按钮标签
    提示:为了方便添加事件,每个标签可以增加 ID 属性,格式为:android:id="@+id/bt_log"
    三、按照布局分析将各个标签进行排版布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@mipmap/b2"
        android:gravity="center"
        android:orientation="vertical"
        tools:context="com.example.admin.register.MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/login"
            android:textSize="25sp"
            android:textColor="#ff00ff"
             />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal">
    
            <TextView
                android:id="@+id/tv_username"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tv_username"
                android:textSize="20sp"
                android:textColor="#000000"/>
    
            <EditText
                android:id="@+id/et_username"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:hint="@string/et_username"
                android:singleLine="true"
                />
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal">
    
            <TextView
                android:id="@+id/tv_password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tv_password"
                android:textSize="20sp"
                android:textColor="#000000"/>
    
            <EditText
                android:id="@+id/et_password"
                android:layout_width="160dp"
                android:layout_height="wrap_content"
                android:hint="@string/et_password"
                android:inputType="textPassword"
                />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_horizontal">
    
            <Button
                android:id="@+id/bt_log"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/bt_log"/>
    
            <Button
                android:id="@+id/bt_bos"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/bt_bos"/>
    
        </LinearLayout>
    
    </LinearLayout>
    
    

    四、打开values文件下面的string.xml文件,在文件中定义layout文件夹下面的activity_main.xml中所需文本。

    <resources>
        <string name="app_name">Register</string>
        <string name="login">用户登录</string>
        <string name="tv_username">用户:</string>
        <string name="tv_password">密码:</string>
        <string name="bt_log">登录</string>
        <string name="bt_bos">取消</string>
        <string name="et_username">输入用户名</string>
        <string name="et_password">输入密码</string>
    </resources>
    
    

    五、打开JAVA文件夹下MainActivity文件添加事件响应。

    为用户名文本框、密码框、登录按钮、取消按钮定义变量。

    通过资源标识获得控件实例,因为类型不同所以要进行强制转换。

    给登录按钮注册监听器,实现监听器接口,编写事件(注:使用匿名内部类)

    Toast是Android系统提供的一种提醒方式,不会占用任何的屏幕空间,所以可以将一些简短的信息通过toast的方式通知给用户,这些信息过一段时间会自动消失
    第一个参数:MainActivity.this,当前的上下文环境
    第二个参数:要显示的字符串,就是你想在屏幕上显示的内容
    第三个参数:显示的时间长短,就是这个字符串在屏幕上显示的时长。Toast默认的有两个LENGTH_LONG(长)和LENGTH_SHORT(短)。
    show(); 显示

    给取消按钮注册监听器,实现监听器接口,编写事件

    finish(); 终止

    package com.example.admin.register;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        private EditText et_username;
        private EditText et_password;
        private Button bt_log;
        private Button bt_bos;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //利用布局资源文件设置用户界面
            setContentView(R.layout.activity_main);
    
            //通过资源标识获得控件实例
            et_username = (EditText) findViewById(R.id.et_username);
            et_password = (EditText) findViewById(R.id.et_password);
            bt_log = (Button) findViewById(R.id.bt_log);
            bt_bos = (Button) findViewById(R.id.bt_bos);
    
            //给登录按钮注册监听器,实现监听器接口,编写事件
            bt_log.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //获取用户输入的数据
                    String strUsername = et_username.getText().toString();
                    String strPassword = et_password.getText().toString();
    
                    //判断用户名和密码是否正确(为可以进行测试,将用户名和密码都定义为admin)
                    if(strUsername.equals("admin") && strPassword.equals("admin")){
                        Toast.makeText(MainActivity.this,"用户名和密码正确!",Toast.LENGTH_SHORT).show();
                    }else {
                        Toast.makeText(MainActivity.this,"用户名或密码错误!",Toast.LENGTH_SHORT).show();
                    }
    
                }
            });
            //给取消按钮注册监听器,实现监听器接口,编写事件
            bt_bos.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        }
    }
    
    

    以上就是安卓开发登录界面的的过程

    展开全文
  • 原生:Uiautomatorviewer 安卓sdk目录下:android-sdk安装目录:\android-sdk\sdk\tools webView:chrome://inspect (需要Fanqiang) [img]...
    安卓定位元素:
    原生:Uiautomatorviewer 安卓sdk目录下:android-sdk安装目录:\android-sdk\sdk\tools
    webView:chrome://inspect (需要Fanqiang)


    [img]http://dl2.iteye.com/upload/attachment/0130/2990/14cbe41e-2667-3560-8331-952ed9f65d29.png[/img]


    [img]http://dl2.iteye.com/upload/attachment/0130/2992/fdb5325a-9866-300d-953c-e95d037b2f4b.png[/img]


    IOS定位元素:
    1.Appium自带的Inspector工具
    2.Macaca的app-inspector工具(定位webView),具体地址:https://macacajs.github.io/app-inspector/cn/
    setp1.获取设备ID
    xcrun simctl list
    setp2:从命令行启动
    app-inspector -u YOUR-DEVICE-ID
    3.Xcode自带的accessibility-inspector工具,
    具体地址:http://blog.csdn.net/icetime17/article/details/42211915
    4.Appium团队提供的appium-ios-inspector,
    具体地址:https://github.com/mykola-mokhnach/Appium-iOS-Inspector
    5.通过flex插件,具体地址:https://github.com/Flipboard/FLEX
    =====================
    https://blog.csdn.net/jeff_2016/article/details/53408086
    https://macacajs.github.io/app-inspector/cn/

    ====================
    appium如何获取到APP的启动activity:
    运行命令:adb shell dumpsys activity | findstr "mFocusedActivity"
    展开全文
  • IOS自动化定位方式

    千次阅读 2017-09-07 20:22:27
    元素属性的介绍 type:元素类型,与className作用一致,如:XCUIElementTypeStaticText value: 一般不用 name:元素的文本内容,可用作 AccessibilityId定位方式,如:测试420班级群 label:绝大多数情况下,与 ...

    元素属性的介绍

    type:元素类型,与className作用一致,如:XCUIElementTypeStaticText
    value: 一般不用
    name:元素的文本内容,可用作 AccessibilityId定位方式,如:测试420班级群
    label:绝大多数情况下,与 name 作用一致
    enabled:元素是否可点击,一般值为true或者false
    visible:元素是够可见,一般值为true或者false


    1.findElementByIosNsPredicate

    这个定位方式需要用java-client -5.0.版本,4.x的版本没有这个定位方式

    driver.findElementByIosNsPredicate("value =='11'").sendKeys("AXPC11@ett.com");  

    driver.findElementByIosNsPredicate("name == 'login_default_icon'").click();  

    driver.findElementByIosNsPredicate("value =='请输入登录密码'").sendKeys("1111");  

    driver.findElementByIosNsPredicate("name == 'login_default_icon'").click();  

    driver.findElement(By.id("登录")).click();

    仅支持 iOS 10或以上,可支持元素的单个属性和多个属性定位,推荐使用。
    一种属性:MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeButton'")
    两种属性:MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeButton' AND label == '更多信息'")
    具体 iOSNsPredicate语法结构可查看官方文档,或查看的这个帖子:iOS 定位方式 iOSNsPredicateString 详解

    2.

    Appium 的定位方式种类

    我说的定位方式都是基于我自己亲测过,没使用或比较少用的就在这里不列举了,如有错误的地方,请多多包涵!常用的定位方式(仅限 Android 和 iOS 两种系统)有 className、id、xpath、AccessibilityId、AndroidUIAutomator、iOSNsPredicateString、iOSClassChain、IosUIAutomation等

    className

    使用元素的className属性定位,支持:Android 和 iOS,推荐使用。
    MobileBy.className("XCUIElementTypeButton")

    id

    使用元素的Resource Id属性定位,支持:Android,仅支持 Android 4.3或以上,推荐使用。反正我没有在 iOS 用过,大家有正确使用过的例子,可以分享一下。
    MobileBy.id("package.name:id/android")

    xpath

    支持:Android 和 iOS。但由于 iOS 10开始使用的 XCUITest 框架原声不支持,定位速度很慢,所以官方现在不推荐大家使用,也有其他替代的定位方式可使用。
    1.使用绝对路径定位,如截图所显示的 xpath 路径
    MobileBy.xpath("className/className/className/className")
    2.使用相对路径定位
    MobileBy.xpath("//className")
    3.通过元素的索引定位
    MobileBy.xpath("//className[index]")
    4.通过元素的属性定位
    一种属性:MobileBy.xpath("//className[@label='更多信息']")
    两种属性:MobileBy.xpath("//className[@label='更多信息'][@isVisible='1']")
    部分属性(最强大):MobileBy.xpath("//className[contains(@label,'更多')]")

    AccessibilityId

    替代以前的name定位方式,推荐使用。
    在 Android 上,主要使用元素的content-desc属性,如该属性为空,不能使用此定位方式。
    在 iOS 上,主要使用元素的labelname(两个属性的值都一样)属性进行定位,如该属性为空,如该属性为空,也是不能使用该属性。
    MobileBy.AccessibilityId("更多信息")

    AndroidUIAutomator

    仅支持 Android 4.2或以上,可支持元素的单个属性和多个属性定位,推荐使用。
    一种属性:MobileBy.AndroidUIAutomator("new UiSelector().text(\"发送\")")
    两种属性:MobileBy.AndroidUIAutomator("new UiSelector().text(\"发送\").clickable(true)")
    元素的所有属性都可用做定位,功能非常强大,且速度很快。

    iOSNsPredicateString

    仅支持 iOS 10或以上,可支持元素的单个属性和多个属性定位,推荐使用。
    一种属性:MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeButton'")
    两种属性:MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeButton' AND label == '更多信息'")
    具体 iOSNsPredicate语法结构可查看官方文档,或查看的这个帖子:iOS 定位方式 iOSNsPredicateString 详解

    iOSClassChain

    仅支持 iOS 10或以上,这是 github 的 Mykola Mokhnach 大神开发,仅限在 WebDriverAgent 框架使用,用于替代 xpath 的,但使用一阵子后,感觉灵活性没有 xpath 和 iOSNsPredicate 好,应该还不完善吧。具体使用方法,请见:https://github.com/appium/appium-xcuitest-driver/pull/391 。
    MobileBy.iOSClassChain('XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeNavigationBar[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[2]')

    IosUIAutomation

    仅支持 iOS 9.3或以下,是 iOS 旧框架 UIAutomation 的定位方式,现在基本上很少使用,这个定位类型同样可使用 iOS 谓词进行定位,详细可参考:iOSNsPredicate

    总结:
    以上这个多定位方式,很少说全部用完。根据我的经验,推荐使用:Android:AndroidUIAutomator > className = id = AccessibilityId > xpath。iOS:iOSNsPredicateString > className = AccessibilityId





    展开全文
  • 公司部门调整PC部门和无线部门合并,原本负责主站PC端自动化的同事需要马上上手安卓,IOS自动化。对于初次接触移动端的测试者来说,跨度还是有点大的。加之人员有些变动,不得不搞个工具降低学习成本,马上产出。...
  • Python+appium 实现 Android 自动化

    千次阅读 2018-08-07 14:23:29
    一:测试环境搭建: 1. appium简介 ...官网介绍:Appium is an open source test automation framework for use with native, hybrid and mobile web apps. 
It drives iOS, Android, and Windows apps using...
  • 适用对象:ios android 使用元素的resource-id属性定位 (2) findElementByXPath(最后选择,因为效率低,受位置影响,但一般都能定位到元素) 适用对象:ios android (3)findElementByTagName(不常用,...
  • Adnroid 使用安卓自带的人脸识别API

    千次阅读 2016-11-17 01:27:32
    缺点是精度不高,识别信息很少,只有眼睛的识别 ...import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphi
  • 一个人写的操作系统 - Sparrow OS

    千次阅读 2013-12-21 16:19:23
    原文: 一个人写的操作系统 - Sparrow OS 链接:http://blog.csdn.net/michael2012zhao/article/details/17421383 分类: Sparrow操作系统 2013-12-19 19:25 1734人阅读 评论(16) 收藏 ...一个
  • iOS 之苹果运行机制总结

    万次阅读 2018-04-09 14:15:42
    解释一下iOS内存机制,为什么iOS的RAM一直都是最少的但iOS却又是最最流畅的。大神请直接忽略此帖,仅希望小白们看过后不会再因为担心iPad内存不足而到处纠结1G RAM 2G RAM了那档子事了...这些帖子楼主看得眼睛都疼了...
  • Swing窗口去掉标题栏

    千次阅读 2014-02-21 16:35:24
    public class Main {  public static void main() {  Frame frame = new Frame();  frame.setUndecorated(true); ... // Get the current decorated state ... boolean undecorated = frame....
  • 看来很多网上的关于Unity和安卓交互的博客,发现很多都是用Eclipse的的jar包 ,不幸的是我的电脑的Eclipse挂了,也好,正好学习下安卓官方的开发工具Android Studio,不瞎比比,开始! 首先看下效果图 (只实现界面...
  • unity开发android游戏(一)搭建Unity安卓开发环境

    万次阅读 多人点赞 2018-03-31 18:57:33
    1,下载安装Java的JDK:...2,下载安装Android Studio:Google已经逐步转向Android studio了,我也比较推荐用这种来开发。ps. 2014年刚写这篇文章的时候,用的...
  • IntelliJ IDEA配置JDK和Android安卓)SDK

    万次阅读 2018-07-14 10:11:52
     打开IDEA配置项 二、在这个地方配置Java的Jdk 三、配置Android的SDK 需要先去这里下载安卓的sdk 下载安卓sdk 四、解压到本地目录下 五、点击+号,选择安卓sdk的配置 六、选择然后Open 七、Open SDK ...
  • 公司做一个项目需要用到的功能就是安卓桌面插件,由于是第一次做安卓桌面插件,去找相关的资料,有去google官网看相关的API文档。官方文档的连接 http://www.android-doc.com/guide/topics/appwidgets/index.html...
  • 随着智能手机的流行,现在很多大大小小的开发商都需要在手机上具备客户端,这里是一片强大的吸金磁场,那么很多想学习android的朋友,都会有个疑问,那就是:安卓android)应该怎么学,需要哪些基础知识?...
  • 由于国内某种原因封网,UE4官网上用CodeWorksforAndroid下载安卓打包工具的方法已经不能使用了,开了VPN也链接不上。这使得用UE4打包安卓游戏变得非常麻烦,博主捣鼓了好几天才找到打包的方法,深感在天朝学习UE4的...
1 2 3 4 5 ... 20
收藏数 2,393,351
精华内容 957,340
关键字:

安卓