-
Android之混淆
一、基本概念混淆,字面上来说就是把项目中的包名、类名、方法名和变量名等进行更改,用来迷惑别人。但是实际上混淆包含了代码压缩、优化、校验等过程,把混淆称作ProGuard更加合适。ProGuard就是Java对Class文件进行“混淆”的工具。 这个图就好比设计模式中的责任链模式。下面我们解释以下名词:1、shrink(压缩):ProGuard会递归地确定哪些类和类成员被使用,而其他的则被丢弃。2、optimize(优化):ProGuard会进一步分析和优化方法。比如一些无用的参数会被丢弃...…
-
Android之launchMode与android:TaskAffinity
最近在刷牛客网上面关于Android的基础题,涉及到android:launchMode属性的描述,里面有个选项是这么讲到:“android:taskAffinity与singleTask搭配使用可以使Activity运行在指定栈中”。这个东西是个什么鬼??虽然平时时不时就new activity,但是关于activity的启动模式仅限于字面上的理解,今天我就来搞一下这个launchMode以及taskAffinity。Activity的任务栈是我们很熟悉的了,它是一种后进先出的结构。位于...…
-
Android之APP启动速度优化
APP启动方式分为三类,分别为:冷启动、热启动以及温启动。冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。温启动:App进程存在,当时Activity可能因为内存不足被回收。这时候启动App不需要重新创建...…
-
Android——smallestWidth限定符适配方案学习
首先,我们了解一下几个简单的公式:px * density = dpDPI / 160 = density、px / (DPI / 160) = dppx : 传统计算机语言中描述的像素,在Android中代表绝对像素。(比如手机分辨率 320 * 480 表示宽有320像素,高有480像素)DPI : “屏幕密度”,每英寸所打印的点数,也就是每一英寸的屏幕所包含的像素数。density : 就单词本身意思而言为“密度”,但是在Android中,我们指的是通过代码”content.g...…
-
Kotlin 学习笔记(八)
一、定义注解Kotlin使用annotation class 关键字(好比使用emnu class 关键字定义枚举类),相当于定义一个注解接口,这个接口继承Kotlin.Anootation,定义注解非常简单,Kotlin不允许为注解定义注解体,注解后面不需要花括号。定义一个简单的注解:annotatiaon class AAA定义之后可以在程序的任何地方使用,使用语法类似于使用public、finally修饰符。通常把注解放在所有修饰符之前。//使用@ AAA修饰类定义@AAA clas...…
-
Android逆向之反编译APK和安装包漏洞解析
最近在学习如何对一个APK进行反编译,当然首要前提就是的得到应用的APK,这次我想要学习的是布卡漫画,那么我在酷安上面获取布卡漫画的APK: 成功获取到APK后,我们就开始正式反编译了。这里我们用到的工具是:APKTool:将Android应用程序反编译成Smali文件。Dex2Jar-2.0:将Android应用程序反编译为Java文件。JD_GUI_windows-1.4.0:读取Java源文件。Drozer-2.3.4:Android应用程序评估框架。第一步:直接解压APK文件(我...…
-
Kotlin 学习笔记(七)
Koltlin的异常处理机制可以让程序具有极好的错性,让程序更加健壮。当程序出现以意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。一、使用try…catch捕获异常try { //业务实现代码}catch(e: Exception){ //异常处理代码}finally{ //可选的finally块}与java的异常处理流程相同,可包含1个try块、0-N个catch块、0-1个finally块,但...…
-
Android面试总结
今天在简书上看见的一篇关于Android面试方面的总结,同样是吕孩纸,别人怎么这么优秀,结合自己之前的面试,也总结巩固一下。一、Android1、activityActivity的生命周期?onStart()和onResume()、onPause()和onStop()的区别?Activity A 启动另一个Activity B 会调用哪些方法?若Activity B是完全透明的呢?如果启动的是一个Dialog呢?谈谈onSaveInstanceState()方法?何时回调用?如何避免配置改...…
-
Kotlin 学习笔记(六)
二、重要属性和构造函数1、初始化类:主构造器和初始化器首先,我们来声明一个简单的类:class User(val name: String)通常情况下,类中所有的声明都会在闭合大括号的内部,而上面的例子中仅仅是一个小括号,在这里圆括号里面的代码叫做主构造函数,它有两个目的:指定构造函数参数,同时定义由这些参数初始化的属性。当我们编写的同时实现同样功能的最直接的代码:class User constructor(_name: String){ //带有一个参数的主构造器 val name...…
-
Kotlin 学习笔记(五)
一、类和接口1、定义接口,使用关键词interface,声明一个只带一个click()抽象方法的接口:interface a{ fun click()}实现这个接口:class Button: a{ override fun click() = println("I was clicked")}Kotlin在类名后面使用“:”代替Java中的extends和implements关键词,override修饰符用来标记覆盖来自父类或接口的方法和属性一个接口可以有一个默认实现方法,下面我们添...…
-
Android中使用Kotlin语言写Toast
在学习了一周的Kotlin基础之后,今天想要在Android Studio里面写一个弹出Toast信息的小案例。方法一:使用最普通的Toast方法,需要在弹的点击监听事件里面定义Toast方法:class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) se...…
-
Kotlin 学习笔记(四)
一、对集合、字符串和常规表达式有效的函数创建集合:setOf函数val set = setOf(1,3,5)创建列表:listOf函数val list = listOf(1,3,5)创建映射:mapOf函数val map = mapOf(1 to "one", 3 to "three", 5 to "five")注意:to不是特殊结构,是一个常规函数例(可以简单获得列表或者集合的最后一个数或者最大值):fun main(args:Array<String>){ val s...…
-
Kotlin 学习笔记(三)
结构控制一、智能类型转换(求和示例):interface Expr //定义一个接口,不声明任何方法class Num(val value: Int) : Expr //带一个属性、值且实现了Expr接口的简单值对象class Sum(val left: Expr, val right: Expr) : Expr //求和操作的参数可以是任意的Expr;Num对象...…
-
Kotlin 学习笔记(二)
声明函数、变量、类、枚举类型和属性1、 简单的无返回值的打印“Hello World!”程序:fun main(args:Array<String>){ println("Hello World!")}(1)、fun 是一个关键词,用来声明一个函数;(2)、参数类型写在参数名后面;(3)、函数可以声明在文件的顶层;(4)、数组只是一个类,Kotlin没有特殊语法来声明数组类型;(5)、末行不加分号;2、有返回值的函数:fun max(a:Int, b:Int):Int{ ...…
-
Kotlin学习笔记(一)
什么是Kotlin?Kotlin是JVM和Android的实用编程语言,结合OO和功能特性,专注于互操作性,安全性,清晰度和工具支持,作为通用语言,Kotlin可以在java工作的地方工作:服务器端应用程序,移动应用程序(Android),桌面应用程序。关键重点在于混合Java+Kotlin项目的互操作性和无缝支持,采用更容易,从而减少样板代码和更多的类型安全性。首先的是在Android Studio里面搭建Kotlin的环境:(一)创建全新的Kotlin项目: 在Android Stud...…
-
一步一步完成猜歌游戏(三)
我们的游戏通关界面,首先是布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pass_view" android:layout_width="match_parent" android:layout_height="match_parent" ...…
-
一步一步完成猜歌游戏(二)
昨天完成了基本的界面布局,接下来我们将进入正式的java代码部分。首先我们先定义动画的anim文件,设置盘片的旋转动画,拨杆的转动以及回转动画: 首先是盘片的旋转动画:<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:duration = "2400" ...…
-
一步一步完成猜歌游戏(一)
突发奇想想写一款猜歌游戏,由于本身没有经验,所以在这里一步一步跟着慕课网上学习,并将学习成果记录。7月份正式开始了实习生活,虽说是实习,但是就目前来看与在学校蹲图书馆区别不大,有大量时间自己学习,开心2333333。直接进入正题吧,首先我们要进行的就是布局的搭建,由于我们的界面里面大多都是层叠的效果,所以我们对于FrameLayout的使用较多。搭建布局是一个相对精细的活儿,小地方的微调是比较耗费时间的。第一步 —— 主布局,也就是我们的main_activity.xml界面,这里看似简单...…
-
调用系统相机、相册、剪裁图片并上传(常用于上传头像,兼容Android7.0)
由于在Android 7.0 采用了StrictMode API政策禁,其中有一条限制就是对目录访问的限制。这项变更意味着我们无法通过File API访问手机存储上的数据,也就是说,给其他应用传递 file:// URI 类型的Uri,可能会导致接受者无法访问该路径,并且会会触发 FileUriExposedException异常。StrictMode API政策禁中的应用间共享文件就是对上述限制的应对方法,它指明了我们在在应用间共享文件可以发送 content:// URI类型的Uri,...…
-
圆形头像设置
本次做的是一个简单的头像设置模块,主要步骤:1、设置intent调用系统相册2、进入相册选取图片3、获取图片后,调用裁剪程序对图片进行裁剪4、返回裁剪的图片并显示那么在此先附上丑陋界面图: 首先贴出我们的布局代码(这里我做出了一个极其简单的布局):<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk...…