2019年Android开发者常见面试题二

上一篇主要介绍的是Java相关的面试题,其实已经重复的说过,在Android面试中,Java相关的面试大概要占到20%,甚至是大于20%,所以不得不显得尤为重要,毕竟目前的开发中,Java语言开发毕竟还是占到绝大部分的。 这篇继续Java相关的面试题分享: 问题 8:抽象类的意义答案【答案不唯一,可自己衡量】:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下: 1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。 比如本科和研究生可以抽象成学生,他们有相同的属性和方法。这样当你对其中某个类进行修改时会受到父类的限制,这样就会提醒开发人员有些东西不能进行随意修改,这样可以对比较重要的东西进行统一的限制,也算是一种保护,对维护会有很大的帮助。 2.当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。 比如学校又新产生了专科生这类学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。 所以,Java中抽象类对于代码的维护和重用有很好的帮助,也是Java面向对象的一个重要体现。   问题 9:抽象类与接口的应用场景答案【答案不唯一,可自己衡量】:应用都是基于规则的应用,也就是基于语法的应用,我们可以根据语法上的异同点来总结抽象类和接口的应用场景 相同点没有什么可说的,我们从不同点下手。 1、第一个重要的不同点抽象类中不一定都是抽象的方法,也可以有具体实现的方法,这样就可以把大家公用的方法提升到抽象类中,然后具体的方法可以留给子类自己实现(此处经典的应用,模板方法设计模式)。所以抽象类可以更好的实现代码的复用 2、另一个重要的不同就是类可以实现多个接口。接口和抽象类的概念不一样。这个可以理解为接口是对动作的抽象,抽象类是对根源的抽象(即对本质的抽象与其他类的本质不同)。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。 所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。 另一个重要的概念就是多态,多态通过分离做什么和怎么做,从另一个角度将接口和实现分离出来。多态不但能够改善代码的组织结果和可读性,还能创建可扩展的程序----即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。由于接口更关注于动作的实现,多态主要是分离“做什么”和“怎么做”,所以接口的另一个重要的应用就是多态的实现(当然抽象类也可以实现多态,但是接口更加合适)。 抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。   10:抽象类是否可以没有方法和属性答案【答案不唯一,可自己衡量】:答案是肯定的,可以。 抽象类中可以没有抽象方法,但有抽象方法的一定是抽象类。所以,java中 抽象类里面可以没有抽象方法。注意即使是没有抽象方法和属性的抽象类,也不能被实例化。   问题 11:接口的意义答案【答案不唯一,可自己衡量】:1、定义接口的重要性:在Java编程,abstract class 和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才使得Java成为面向对象的编程语言。 2、定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。 3、有利于对代码进行维护:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现现有的类已经不能够满足需要,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。 4、保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。   问题 12:泛型中extends和super的区别答案【答案不唯一,可自己衡量】:<? extends T>限定参数类型的上界:参数类型必须是T或T的子类型 <? super T> 限定参数类型的下界:参数类型必须是T或T的超类型 总结为: <? extends T> 只能用于方法返回,告诉编译器此返参的类型的最小继承边界为T,T和T的父类都能接收,但是入参类型无法确定,只能接受null的传入 <? super T>只能用于限定方法入参,告诉编译器入参只能是T或其子类型,而返参只能用Object类接收 ? 既不能用于入参也不能用于返参   问题 13:父类的静态方法能否被子类重写答案【答案不唯一,可自己衡量】:首先答案是不能! 这个问题有两个关键字,一个是静态方法,一个是重写。 我们来先说说重写,可能很多初学的朋友分不清重写和重载的区别。 重写:子类继承父类后,定义了一个和父类中的一模一样方法,这个一模一样是值方法名和参数的定义一模一样。这时候子类要实现这个方法,就称为对父类方法的重写。 重载:子类继承父类后,定义了一个和父类中相同名字的方法,但是参数不一样(必须),实现也不同(可选),这就是重载。 静态方法:java中,static修饰符修饰的方法就是静态方法。所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。 在java中,所有的东西都是对象,对象的抽象就是类,对于一个类而言,如果要使用他的成员(类中的属性,方法等),一般情况下,必须先实例化对象后,通过对象的引用才能访问这些成员。 但是,如果要使用的成员使用了static修饰,就可以不通过实例化获得该成员。 就比如,现在有个桌子,我想吃苹果,一般情况下,我需要先拿个盘子(对象的实例化)去装苹果才能吃到苹果,现在有个苹果直接放在桌子上(用static修饰过的静态方法),这样我就可以直接从桌子上拿到苹果。可能大家会有疑问,既然静态方法(能不通过实例化就使用成员)这么方便,为什么不都使用静态方法。 大家回到static这个修饰符的功能定义:所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。 java的回收机制会定时的回收已经使用过的对象的内存来释放内存给应用程序。如果全部都是静态变量和静态方法,内存都被占用了,java程序哪里还有运行的空间呢?就好比,你回家就看到桌子上摆满了苹果,那你买的梨子就没地方放了。 现在回到题目中来,父类的静态方法能不能被重写。答案是不能。 因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说。   问题 14:进程和线程的区别答案【答案不唯一,可自己衡量】:1. 定义进程是一个术语,用来描述一组资源和程序运行所需的内存分配。对于每一个被加载到内存的exe,在它的生命周期中操作系统会为之创建一个单独隔离的进程。一个进程的失败不会影响其他的进程。每个进程是由私有的虚拟地址空间、代码、数据和其他各种系统资源组成的。 ...

June 27, 2019 · 1 min · jiezi

Android图片加载优化

Android图片加载优化在Android开发中图片加载往往是导致OOM(Out of Memory)的主要原因,所以图片的压缩不得不作为Android开发中比用的一项技能点,以下将以简单的方式进行优化。 图片的大小如何被定义?其实图片大小的计算是很简单的,只需要用图片的width乘以图片的height然后再乘以每一个像素所占用的字节数,这个字节数需要根据图片解码模式来获得,Android中提供了6种方案,不过常用的只有三个,在下方已经列出。 A:透明度(Alpha) R:红色(Red) G:绿(Green) B:蓝(Blue) Bitmap.Config.ARGB_8888:由4个8位组成,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位(4字节) Bitmap.Config.ARGB_4444:由4个4位组成,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 (2字节) Bitmap.Config.RGB_565:没有透明度,R=5,G=6,B=5,,那么一个像素点占5+6+5=16位(2字节) 基础知识补脑:8bit(位)=1byte(字节)1024byte=1KB1024kb=1MB1024mb=1GB 举例:1、480x800的图片,在色彩模式为ARGB_8888的情况下 480*800*4/1024/1024=1.46484375MB2、480x800的图片,在色彩模式为ARGB_4444的情况下 480*800*2/1024/1024=0.732421875MB通过以上的测试,发现导致过大的原因主要集中在两点上,一点是图片的宽和高零一点则是解码方式,通过等比例缩放图片以及切换解码方式可以有效的降低图片的内存占用。不过在以下的优化方案中还有一种优化就是内存复用技术。 优化方案缩放图片+质量压缩var bitmapOptions = BitmapFactory.Options()bitmapOptions.inJustDecodeBounds = true//设置仅加载图片的宽高信息不将图片加载的内存中BitmapFactory.decodeResource(resources, R.drawable.testimg, bitmapOptions)//获取图片的宽高bitmapOptions.inSampleSize = 4//设置缩放比例(1、缩放图片)bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565//设置解码模式(2、质量压缩)bitmapOptions.inJustDecodeBounds = false//消除仅加载图片的宽高var bitmap = BitmapFactory.decodeResource(resources, R.drawable.testimg, bitmapOptions)//加载图片到内存(注意添加Option对象)this.imgMain.setImageBitmap(bitmap)//使用BitmapinSampleSize的作用就是可以把图片的宽高缩小inSampleSize倍,如下代码设置为4那么就是宽高的四分之一,所占内存缩小inSampleSize的平方。单纯的缩放4倍并不充分,只能说治标不治本,好比一个高清50MB的图片,你缩放4倍还是凉凉,所以说还是根据尺寸来计算需要缩放的倍数。 bitmapOptions.inSampleSize =Math.ceil(bitmapOptions.outWidth.toDouble() / targetWidth.toDouble()).toInt()//设置缩放比例(1、缩放图片)PS:以上的缩放并非精确的缩放 内存复用何为内存复用,通俗来说就是我已经创建了一个Bitmap对象了,那么我接着还想用一个bitmap对象,那么就可以复用上一个Bitmap对象,不过这样做有两个缺点,第一就是会将之前的图片覆盖掉,第二就是后边加载的图片必须小于或者等于之前的图片大小,否则就不行。 var bitmapOptions1 = BitmapFactory.Options()bitmapOptions1.inBitmap = bitmap//绑定一个已经加载的Bitmap对象var bitmap1 = BitmapFactory.decodeResource(resources, R.drawable.timg, bitmapOptions1)//加载新的Bitmap对象this.imgMain1.setImageBitmap(bitmap1)//使用Bitmap其他方案推荐使用WEBP格式代替PNG和JPEG图片格式。 写在最后以上所说的只是简单的图片压缩优化,并非特定专业的优化方式,不过应对一般的项目需求应该还是可以满足的。

June 3, 2019 · 1 min · jiezi

TabLayout与ViewPager结合时不显示Tab标题

当我们将TabLayout与ViewPager结合时,会出现Tab标题不显示的问题. mTabLayout.setupWithViewPager(viewPager);从源码里找答案.先看下方法调用流程大致流程如图,这里只给出populateFromPagerAdapter()方法源码.void populateFromPagerAdapter() { removeAllTabs(); if (mPagerAdapter != null) { //返回ViewPager设置的PagerAdapter.getCount() final int adapterCount = mPagerAdapter.getCount(); for (int i = 0; i < adapterCount; i++) { //重新添加,并通过PagerAdapter.getPageTitle()为tab设置标题 addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false); } // Make sure we reflect the currently set ViewPager item if (mViewPager != null && adapterCount > 0) { final int curItem = mViewPager.getCurrentItem(); if (curItem != getSelectedTabPosition() && curItem < getTabCount()) { selectTab(getTabAt(curItem)); } } } }这个方法的第一步 removeAllTabs();./** * Remove all tabs from the action bar and deselect the current tab. */ public void removeAllTabs() { // Remove all the views for (int i = mTabStrip.getChildCount() - 1; i >= 0; i–) { removeTabViewAt(i); } for (final Iterator<Tab> i = mTabs.iterator(); i.hasNext();) { final Tab tab = i.next(); i.remove(); tab.reset(); sTabPool.release(tab); } mSelectedTab = null; }移除了TabLayout添加的tab.下一步final int adapterCount = mPagerAdapter.getCount();则是返回你设置给ViewPager的PagerAdapter的getCount()返回值.然后在for循环中 addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), 添加新的tab,并将PagerAdapter.getPageTitle()返回值设置为tab的标题.因此,当ViewPager与TabLayout结合使用时,不必给TabLayout添加tab,也就是不用调用TabLayout.addTab(). ...

March 29, 2019 · 1 min · jiezi

Android Studio 安装后必做的配置

在上一文:Android Studio 超详细安装教程 中,我们已经成功的安装了 Android Studio 开发工具,并进行了第一次启动前的初步设置。然而这点设置是远远不够的,为了让我们的开发工具能够使用得更加得心应手,还需要更多的设置。一、系统环境及下载资源1.1 安装环境电脑系统 : Windows 10JDK 版本 : 1.8Android Studio : 3.2.11.2 下载资源官方下载地址(需翻墙)国内Android Studio下载地址(不需翻墙)官方下载地址是需要翻墙才可以进入并且下载的,国内下载地址虽然可以不用翻墙,但是国内的往往不是最新版本的Android Studio ,如果需要体验最新版本的 Android Studio 还请前往官方下载地址进行下载安装。二、设置2.1 自动导包在日常编程中,我们可以使用 Alt + Enter 进行导包,使用 Ctrl + Alt + O 来清除无用包,但是这些事情其实都是可以自动完成的。File -> Settings 打开设置选择 Editor -> General -> Auto Import勾选 Add unambiguous imports on the fly勾选 Optimize imports on the fly(on current project)点击 Apply 进行应用2.2 字体大小Android Studio 的界面 UI 中的字体大小和代码中的字体大小都是 12 。对于我们来说可能有点小了,看着不是很舒服。所以我们需要对字体大小进行设置。修改代码字体大小:File -> Settings 打开设置选择 Editor -> Font修改 Size 后的值,如: 14点击 Apply 进行应用修改软件界面 UI 中的字体大小:File -> Settings 打开设置选择 Appearance & Behavior -> Appearance勾选 Override default fonts by (not recommended):修改 Size 后的值,如: 14点击 Apply 进行应用2.3 命名前缀在 Android 开发中我们常常遵循一些代码开发规范,在Android 源码中我们可以看到通常成员变量都是以‘m’开头。其实在 Android Studio 中可以在自动生成字段名称的时候加上自定义的前缀。比如:非共有,非静态的成员变量以’m’开始静态成员变量以’s’开始File -> Settings 打开设置选择 Editor -> Code Style -> Java选择 Code Generation 标签给Field 添加一个’m’前缀,给Static filed 添加一个’s’前缀点击 Apply 进行应用2.4 Log 颜色Darcula 主题中 Logcat 的默认配色只有红白两种颜色,非常不便于我们区分 Log 的类型。所以我们可以通过修改不同级别的 Log 的颜色来加以区分。File -> Settings 打开设置选择 Editor -> Code Scheme -> Android Logcat选择一个级别名称,如:Assert取消勾选 Inherit values from在 Foreground 后面选择对应的颜色(可以按照下面的颜色表进行设置,也可自行设置)依次设置其他级别的 Log 的颜色点击 Apply 进行应用点击 Foreground 后面的颜色,进行颜色选择。选择好颜色之后,点击 Choose 即可。其他级别的颜色设置同上。Log 颜色表:Log 级别颜色Assert#AA66CCDebug#33B5E5Error#FF4444Info#99CC00Verbose#FFFFFFWarning#FFBB33修改前的 Log 的颜色:修改后的 Log 的颜色:2.5 设置代码警示线在 Android Studio 安装完成之后,打开文件进行代码编辑时,你会发现编辑区域中间有一条从上到下的白线。这条白线其实是 代码警示线 ,用来提醒你代码长度最好不要超过这条线。如果你是强迫症,想要去掉这条白线,该怎么做呢?File -> Settings 打开设置选择 Editor -> General -> Appearance取消勾选 Show hard wrap guide (configured in Code Style options)点击 Apply 进行应用如上图所示,在代码编辑区域有一条从上到下的白线,其关联设置选项为 Show hard wrap guide (configured in Code Style options) 。如需去除白线,取消此选项勾选并应用即可,如上图所示。当然官方建议不去除此白线,用以提醒自己一行代码的长度不要过长。2.6 设置快捷键在几年前,Android 应用大多还是使用 Eclipse 进行开发,后来出了 Android Studio ,以其良好的界面,优异的特性迅速取代了 Eclipse ,目前 Android Studio 基本已经完全取代了 Eclipse 。但是还是有一些小伙伴可能是从 Eclipse 转到 Android Studio ,更熟悉 Eclipse 的快捷键,而对 Android Studio 的快捷键非常陌生,甚至别扭,所以 Android Studio 贴心的提供了多个版本的快捷键方案给用户做选择,让你更好的融入 Android Studio 的开发。File -> Settings 打开设置选择 Keymap在下拉框中选择 Eclipse 或其他你更熟悉的快捷键方案点击 Apply 进行应用虽然可以选择其他快捷键方案,但是建议使用 Android Studio 默认的快捷键方案,这才是最适合它的。同时在这里你也可以对任一快捷键做修改,设置为你更习惯的快捷键,对此不再赘述。2.7 动态模板 - Live TemplatesLive Templates 是动态模板、活动模板或代码模板,它的作用是:代码快速补全提高写代码的速度系统中有很多自带的模板,我们可以使用这些模板来快速生成所需要的代码。比如:如上图所示,输入 sout 就会出现提示,对应生成的代码就是 System.out.println("") 。我们在打 Log 时经常需要定义 TAG 私有静态常量用以标记位置,使用 logt 则可以快速生成 private static final String TAG = “ClassName” 。在 Android Studio 中还有很多很多好用的动态模板,在此就不一一介绍了,感兴趣的小伙伴可以自行去查看。在系统提供了众多的动态模板后,有一些我们常用的代码也可以将其定义为动态模板,提高我们的工作效率。其中 Handler 是 Android 中非常常用的组件,但是使用不当则会造成内存泄漏,下面就以创建一个通过弱引用的方式解决 Handler 的内存泄漏问题并将其自定义为动态模板,方便我们的日常使用。File -> Settings 打开设置选择 Editor -> Live Templates点击右侧 + 按钮,选择 2. Template Group… 创建一个新的模板组假设新的模板组取名为:Custom,输入名称完成创建选中新建的 Custom 模板组,点击右侧的 + 按钮,选择 1. Live Template 创建一个新的动态模板输入此动态模板的各项参数。点击 Apply 进行应用并测试是否生效点击右侧 + 按钮,选择 2. Template Group… 创建一个新的模板组,名为:Custom.选中新建的 Custom 模板组,点击右侧的 + 按钮,选择 1. Live Template 创建一个新的动态模板设置动态模板的缩写 Abbreviation ,描述 Description, 以及模板内的代码内容 Template test,此处按照如下配置即可。Abbreviation:handlerDescription: Self-defined Handler without Memory Leakage.Template test: 见下方代码private static class MyHandler extends Handler { private WeakReference<$ClassName$> mActivityWeakReference; MyHandler($ClassName$ activity) { mActivityWeakReference = new WeakReference<>(activity); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); $ClassName$ activity = mActivityWeakReference.get(); if (activity != null) { switch (msg.what) { default: break; } } }}如上图所示点击下方的 Define 并勾选 Java,以设置此代码的语言。如上图所示,在代码块中,有 $ClassName$ 参数,此参数对应的是 Handler 所在的 Activity 的类名。为了适配所有的类,所以可以使用绑定参数的方式在自动生成代码时,将 $ClassName$ 参数替换成其所在类的类名。点击 Edit variables 按钮,在弹出框中,点击 Expression ,在下拉列表中找到并选择 className() 即可。点击 OK 完成配置。参数含义:NameExpressionDefault valueSkip if defined名称表达式默认值是否略过定义ClassNameclassName() 配置完动态模板后,我们来新建一个 TestActivity 测试一下。如上图所示,只要输入 handler 就会出现动态模板,选择之后就会自动生成下方的代码,再也不用一次又一次的重复敲代码了。其他章节Android Studio 超详细安装教程Android Studio 中那些最好用的插件阅读原文 ...

January 29, 2019 · 2 min · jiezi

Android Studio 中那些最好用的插件

在日常的 Android 开发中,为了可以减少工作量和更好的使用 Android Studio,插件是必不可少的工具。我们可以使用插件来为我们节约开发时间,用插件帮助我们生成代码,用插件来协助我们更好的开发。下面将列举部分我个人使用过并且觉得很不错的一些插件,如果你有其他好的推荐,欢迎在评论中分享。插件的安装在 Android Studio 中安装插件非常简单,步骤如下:File -> Settings 打开设置选择 Plugins搜索框中输入你要安装的插件,如果还未安装,会提示你在仓库中搜索,点击Search in repositorirs在左侧选中你要安装的插件,在右侧点击 Install 安装按照以上步骤安装其他插件所有插件安装完成之后,重启 Android Studio 即可搜索插件,如果插件已安装,将会显示,如果未安装,点击 Search in repositorirs,在仓库中搜索插件。搜索在插件之后,点击安装即可。GsonFormatGsonFormat 插件是用来将 JSON 字符串快速转化为 JavaBean 实体类的一个插件,免去了我们自己手写的过程。在 Android Studio 中需要先创建一个 JavaBean 的实体类,然后在类中按下快捷键 Alt + S 打开 GsonFormat 弹出框,将 JSON 字符串复制进去即可。Android ButterKnife ZeleznyAndroid ButterKnife Zelezny 是开源工具 ButterKnife 的相关插件。ButterKnife 将字段和方法与 view 进行绑定,通过注解的方式生成样板代码,使用 @BindView 字段代替 findViewById。而 Android ButterKnife Zelezny 插件则可以帮助我们从选定的布局XML中直接生成 ButterKnife 的注入。鼠标在布局文件上右键,选择 Generate -> Generate ButterKnife Injections 即可生成。Android Parcelable code generatorJavaBean 序列化代码生成插件,可以快速实现 Parcelable 接口,实现序列化。只需在 JavaBean 实体类中右键,选择 Generate -> Parcelable 即可生成。ADB WiFi ConnectAndroid 开发,真机调试必不可少,但是总是通过连线进行调试会很不方便,所以我们可以使用无线的方式进行调试,会方便很多,只要保证手机和电脑在同一个局域网中即可。使用下面的命令即可远程连接到手机进行调试:# 连接到 IP 为 192.168.1.101 的手机$ adb connect 192.168.1.101connected to 192.168.1.107:5555 # 出现此提示说明连接成功,默认端口为 5555# 断开连接$ adb disconnect 192.168.1.101disconnected 192.168.1.107 # 出现此提示说明断开连接成功# 更多用法在此不再赘述ADB WiFi Connect 插件的功能在于当你使用 USB 线将手机接到电脑上之后,可以通过界面进行无线连接并备份、管理等操作,更直观,也更易于操作。插件安装好之后,需要重启 Android Studio,重启之后在工具栏最后面有上图所示图标,点击图标即可打开插件。连接过的设备,可保存在 Saved devices 中,如果IP不变的话,下次可直接连接。Markdown NavigatorMarkDown 文档编辑插件,开发中可以用来编辑 README 或是其他开发文档都很好用。Translation一个功能非常强大的翻译插件,支持的IDE也很多,具体请查看 Translation 的 GitHub 仓库安装完成后,重启 Android Studio,选中英文,右键 -> Translate 即可翻译。功能较多,不好一一说明,更多用法及功能请见 Translation 的 GitHub 仓库,文档为中文,阅读无障碍。Android Material Design Icon GeneratorAndroid Material Design Icon Generator 是一个自动生成 Material Design 风格的图标的插件,相对于插件 Android Drawable Importer 来说,个人更喜欢这个插件,个人觉得这个插件更好用一点。在任意地方 右键 -> New -> Material Design icon 打开面板即可,在面板中对图标进行选择及设置。GenymotionGenymotion 是一款速度较快的 Android 模拟器,以前单独安装使用过,效果很不错,现在已经可以直接在 Android Studio 的插件中进行了。插件资源站可在下面的插件资源站搜索更多插件,查看插件资源等信息。JetBrains 插件总站JetBrains 总站下 Android Studio 插件其他章节Android Studio 超详细安装教程Android Studio 安装后必做的配置阅读原文 ...

January 29, 2019 · 1 min · jiezi

Android Studio 超详细安装教程

作为 Android 开发者,Android Studio 是我们必不可少的开发工具之一,甚至是最重要的开发工具。那么了解 Android Studio 并熟悉其各种配置是居家旅行并不可少的技能之一了。本文将详细介绍 Android Studio 的下载安装,以及一些必要的设置。一、安装环境及下载资源1.1 安装环境电脑系统 : Windows 10JDK 版本 : 1.8Android Studio : 3.2.1注:安装环境一般来说不影响 Android Studio 的安装。1.2 下载资源官方下载地址(需翻墙)国内Android Studio下载地址(不需翻墙)官方下载地址是需要翻墙才可以进入并且下载的,国内下载地址虽然可以不用翻墙,但是国内的往往不是最新版本的Android Studio ,如果需要体验最新版本的 Android Studio 还请前往官方下载地址进行下载安装。二、安装 Android Studio2.1 安装 Android Studio下载完了 Android Studio 的安装包之后,双击打开进行安装。点击 Next 进行下一步。勾选 Android Virtual Device 选项,然后点击 Next 进行下一步。选择 Android Studio 安装的本地路径,个人建议不要安装在C盘。前面的安装设置完成之后,直接点击 Install 进行安装即可,然后就是等待安装完成了。安装完后之后点击 Finish 将会启动 Android Studio,此时将会进行一些第一次启动前的初步设置。2.2 初步设置第一次启动 Android Studio 将会进行一些初步的设置。现在的 Android Studio 安装包仅包含其本身,并不包含 Android SDK, 所以在第一次启动时告诉你无法访问 Android SDK 加载项列表,此时点击 Cancel 退出即可,后面会下载 SDK 的。点击 Next 进行下一步。这里是选择 Android Studio 的设置类型,Standard 为标准模式,想省事的可以选择这个选项,会跳过后续的一些设置步骤。这里我们习惯性选择 Custom 自定义模式。这里是选择软件的界面主题,一种偏暗的 Darcula,和一种偏亮的 Intellij,按照自己的习惯选择就好,个人比较喜欢 Darcula 主题。这里是进行 SDK 组件设置,因为我已经安装了 Android SDK 和 Android Virtual Device 所以这里已经不需要再进行安装了。如果你没有安装的话,在左侧选项中勾选你需要安装的项目,建议全部勾选。同时在下面的 Android SDK Location 中设置 Android SDK 的本地路径。设置完毕后点击 Next 进行安装。这里是对你之前的选择,进行确认的,如果需要修改设置的话,点击 Previous 返回上一条进行修改。如果确认如此设置的话,点击 Finish 进行设置,等待完成即可。因为我已经提前安装完了 Android SDK 所以这里显示 “Nothing to do!”, 如果你并没有安装过 Android SDK的话,此时将会下载 Android SDK 相应的资源。下载完成后点击 Finish 完成。到此已经完成了 Android Studio 的下载安装及初步设置。我们可以愉快的使用 Android Studio 进行 Android 开发了。后续章节安装完 Android Studio ,必不可少的要做一些设置,添加一些好用的插件,让我们的开发工具更加好用,更加得心应手,详情请见以下后续章节。Android Studio 安装后必做的配置Android Studio 中那些最好用的插件阅读原文 ...

January 29, 2019 · 1 min · jiezi