- 博客(44)
- 资源 (2)
- 收藏
- 关注
原创 组件化项目部署
组件化项目的意义各个子模块不互相依赖,但是可以互相交换,任意组合,高度解耦。提高团队效率,分模块打包、测试,统一版本管理Phone Module 和 Android Library 区别、切换Phone Module新建出可独立运行的模块,可以看成是app,配置为:apply plugin:'com.android.application'有applic...
2019-09-11 21:48:25
423
原创 Android组件化-Gradle 语法以及配置
Gradle构建工程的出现让工程有无限可能Gradle核心是基于Groovy脚本语言,Groovy脚本语言基于Java且扩展了Java。Grale需要依赖JDK和Groovy库。和ant、maven构建有区别,Gradle是一种编程思想。第一行代码 :打印字符串printlIn("hello gradle")println "hello gradle"通过build —...
2019-09-08 21:13:05
542
原创 app bundle 配置 conditional delivery
Conditional delivery允许您设置某些设备配置要求,以便在应用程序安装期间自动下载动态功能模块。例如,您可以配置一个动态特性模块,其中包含增强现实(AR)功能,该功能仅在支持AR的设备的app安装中可用。该交付机制目前支持基于以下设备配置,在app安装时控制模块的下载:设备硬件和软件功能,包括OpenGL ES版本 用户的国家 API级别 如果设备...
2019-08-27 17:27:59
878
1
原创 app bundle 配置 on demand delivery
动态特性模块允许您将某些特性和资源从应用程序的基本模块中分离出来,并将它们包含在app bundle中。例如,通过动态交付,用户可以在安装了应用程序的基本APK之后按需下载和安装这些组件。 例如,考虑一个包含捕获和发送图片消息功能的文本消息app,但是只有一小部分用户发送图片消息。将图片消息作为可下载的动态特性模块包含进来可能是有意义的。这样,最初的应用程序下载对于所有用户来说都...
2019-08-27 17:27:25
662
原创 app bundle 配置 at-install delivery
动态特性模块允许您将某些特性和资源从应用程序的基本模块中分离出来,并将它们包含在应用程序包中。通过动态交付,您可以定制交付选项来控制运行Android 5.0 (API级别21)或更高版本的设备何时以及如何下载应用程序的功能。请记住,这种类型的模块化需要更多的工作,可能还需要重构应用程序的现有代码,因此请仔细考虑哪些应用程序特性将从按需提供给用户中获益最大。如果您希望随着时间的推移逐步模块...
2019-08-27 17:26:49
357
原创 app bundle 配置Base module
大多数应用程序项目不需要太多的努力来支持动态交付。这是因为包含应用程序基本APK的代码和资源的模块是标准的应用程序模块,在Android Studio中创建新应用程序项目时,默认情况下会得到这个模块。也就是说,将下面的app插件应用于其构建的模块。gradle文件提供应用程序基本功能的代码和资源。// The standard application plugin creates your ...
2019-08-27 17:26:07
689
原创 android app bundle Split APKs
android app bundleSplit APKsBaseApk:该APK包含所有其他拆分APK都可以访问的代码和资源,并为您应用程序提供基本功能。当用户请求下载您的应用程序时,首先下载并安装该APK。这是因为只有BaseAPK的manifest 包含应用程序的services、content providers、premissions、platform version 和对系统特性的...
2019-08-27 17:25:03
3653
原创 MVVM与DataBinding
MVVM是和MVC 和 MVP同样是一种架构设计思想,DataBinding是一种工具, DataBinding既可以用于MVC也可以用于MVPMVVM 更节省的设计么事实现数据的双向绑定。M V VMView 层就是一个Layout文件,ViewModel是 View层和Model层中间的桥梁。DataBinding架构会根据View Layout中的布局,自...
2019-07-14 21:30:48
669
原创 MVP示例
1.定义契约接口2.定义Presenter Model View基类, 在Model,View, Presenter 层都是通过基类声明引用 ,避免引入大量的实例对象BaseViewBasePresenterLogin相关模块继承M V P基类ViewPersenter...
2019-07-14 20:47:39
146
原创 MVP思想精髓—解耦view与model
MVPPresenter是一个中介,完全隔离了View和Model, Activity 相当于 View, View可以完全不关心Model,View层和Presenter可以通过外观模式进行解耦例子定义接口1. 明确P层与 View Model的需求Presenter, 实现契约接口1.接收View层的指令,完成某个需求2.将完成...
2019-07-13 18:29:10
432
原创 MVC架构在Android中的应用
MVC架构与经典的三层模式Controller是作为一个媒介,处于Model和View之间, Model和View之间有紧密的联系,耦合性偏强。在Android 中 Acitity相当于 Controller, 做的事情非常多,又要做view层的职责,又要做Model层的职责, 违反了 单一原则, 因此演变成MVP的演变。经典的三层模型,在Java后台是比较经典的三层...
2019-07-10 22:11:47
295
原创 AOP面向切面架构设计
AOP面向切面结构设计通过预编译的方式和运行时动态代理,实现程序功能。OOP的延续和升级。AOP可以将各个业务逻辑进行分离,降低业务逻辑耦合,实现可重用。面向切面的思想是把需要抽取的相同业务功能,做成一个切面,场景的callback就是基于这种思想。AOP的本质是在纵向的业务流程中,把相同业务的子流程,抽取成横向的面。动态代理切面需求数据库在增删改的过程,做数...
2019-07-07 23:02:08
585
原创 UML建模
正向工程与逆向工程在UML中的应用 PowerDesigner逆向: java文件 转换为 OOM 类图模型正向:类图模型 转换为 java文件自动生成Java文件注释设置:关系(依赖、泛化、关联、实现)的画法:依赖关系:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。泛化...
2019-07-07 21:44:47
147
原创 CMakeList 文件
使用AS创建一个C/C++ support的项目,会默认在app/src/main 目录下生产cpp目录,里面包含CMakeLists.txt 和 native-lib.cpp.下边为CMakeLists.txt去掉英文注释格式化后的内容cmake_minimum_required(Version 3.4.1)add_library( native-lib...
2019-06-23 14:37:35
3476
原创 Cmake语法详解
一、什么是CMake在Android Studio 2.2及以上, 构建原生库的默认工具是CMake。CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安装编译过程。能够输出各种各样的makefile或者project文件。CMake并不直接构建最终的软件,而是产生其他工具的脚步(如makefile),然后再依据这个工具的构建方式使用。CMake是一个比make更高级的...
2019-06-19 23:15:11
7502
原创 Shell语法
什么是shell?命令的集合。执行繁琐的复杂的重复操作,。SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。SHELL作为语言来说,它既是终端上的用户与UNIX操作系统会话的语言,又可作为程序设计的语言,所以Shell是用户与系统之间的接口,而且是一种比较高级、易被用户理解和使用的程序设计语言,它为用户提供了使用方便、功能强、又容易扩充的程序设计环境。a...
2019-06-16 22:53:52
878
1
原创 NDK-Android.mk 基础
Android.mk 是一个向Android NDK构建系统描述NDK项目的GNUmakefile片段。主要是用来编译生成以下几种:APK程序:一般的Android应用程序,系统级别的直接push即可JAVA库:JAVA类库,编译打包生成JAR文件。C\C++应用程序:可执行的C\C++应用程序。C\C++静态库:编译生成C\C++静态库,并打包成 .a 文件。C\C++共享库...
2019-06-09 22:08:07
227
原创 NDK—Makefile 文件
Makefilemakefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要重新编译,如何进行链接等操作。makefile 就是“自动化编译”, 告诉make命令如何编译和链接。make 命令会在当前目录寻找 makefile文件makefile包含以下五个内容:显示规则隐晦规则变量定义:类似于宏文件指示: 引入其他makefile, ...
2019-06-06 21:56:46
1212
原创 NDK—静态库和动态库原理以及编译流程
一、.编译流程: 高级语言 -> 二进制代码可执行程序四大过程:1.预处理:完成宏替换、文件引入、以及去除空行、注释等,为下一步的编译做准备。也就是对各种预处理命令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等。、经过预处理后,文件会变大很多。# test.c 文件内存#include <stdio.h>int main() {...
2019-05-26 18:46:16
675
原创 C++基础—命名空间、引用
1.通过命名空间,区分名字相关的不同的类或方法#include <iostream>using namespace std;// 第一个命名空间namespace first_space {void func() { count<<"insid first space"<<endl}}// 第二个命名空间nam...
2019-05-26 13:59:17
311
原创 C++基础—容器
1.序列式容器:原数的排列顺序和原数本身没有关系,又添加顺序决定vector 、 list、 dequeue、queue、stack、priority queue#include <Vecotr>using namespace std;int main() { vector<int> vec_1; // 声明一个元素空间 ...
2019-05-26 13:47:05
112
原创 C++基础—类型转换 IO 异常处理
1.类型转换C++提供了4种类型转换操作符应对不同场合的应用 const_cast :去const属性(const相当于Java中的final) static_cast : 静态类型转换,如 int 转 char dymamic_cast : 动态类型转换, 如 子类和父类之间的多态类型转换 reinterpret_cast : 仅重写解释类型, 没有...
2019-05-25 22:35:50
239
原创 C++基础—类模板、函数模板
// 泛型基础 模板编程// 函数模板 == java的泛型方法 , 在不确定类型的时候使用泛型// void T a(T t){}temlate <typename T> // 定义泛型Ta(T i, T j) { return i > j ? i : j;}// 类模板 ==java的泛型类template <class T, cl...
2019-05-25 22:16:01
85
原创 C++基础—基础多态,虚函数
C++支持多继承, 通过 : 类名,默认是私有的(只继承private),可以指定 Public (继承所有)class Child : public Parent,Parent1 {public: void test()}class Parent {public: void test() { } // 纯虚函数, 函数未实现,需要子类实...
2019-05-25 22:06:08
75
原创 C++基础—单例模式、操作符重载
// student .hclass Student{ private : static Sutent * instance; Student();public: static Student* getInstance();}// student.cpp#include "Student.h"Student *Stuent::in...
2019-05-25 21:50:49
281
原创 C++基础—类的构造,友元方法、友元类
头文件 student.h#ifndef Student_H#define Sudent_Hclass Sudent {// 友元函数friend void test(Student *);// 友元类 通过友源类访问私有变量friend class Teacher; int i;public: // 相同的作用域的方法放在一起 Stud...
2019-05-24 22:16:14
227
原创 C/C++基础—SO动态库与编译
1.库在windows平台和linux平台下都存在着库,andorid中也存在库库是指一个容器文件,里面装的是函数和类,由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同)因此二者库的二进制文件是不兼容的。2.库存在的意义库是别人写好的现有的,成熟的,可以复用的代码现实中每个程序都依赖很多基础的底层库,不可能每个人的代码都是从零开始的,因此库的存在...
2019-05-22 22:04:28
4014
原创 C/C++基础—共用体
1.共用体共用体是一个特殊的数据类型,允许在相同的内存位置存储不同数据类型。可以定义一个带有多个成员的公用体,但是任何时候只能有个成员带有值。共用体提供了一种使用相同内存位置的有效方式union Data{ int a; float f;char str[20]} data;共用体占用的内存应足够存储共用体最大的成员。例如上面的事例中,Da...
2019-05-22 21:44:07
176
原创 c/c++基础知识-结构体
1.结构体类似于Javaben,C语言中可以将一些其他变量,封装成结构体,结构体和共用体表示的含义是一样的。声明struct Student // struct 相当于class Student 相当于类名{ char name[50]; int age;} student,a; .//可以不定义,便是结构体变量,也就是Student类型的变量//使用...
2019-05-21 23:11:20
129
原创 C/C++语音基础-数组和指针
1.数组、指针数据的集合,内存中是一个连续的内存区指针 指向数组的首地址通过移动指针,可以指向数组的各个元素指针 + 1,是根据当前指针类型 加 类型的大少,进行移动2.指针数组数组的每一个元素都是一个指针(指针指向不同的变量)int arr[] = { 100,200,300 }; int *p[3];//指针数组 for ...
2019-05-21 22:51:23
120
原创 C/C++基础—内存
1.内存定义硬件角度:内存是计算机必不可少的一个组成部分,是与CPU沟通的桥梁,计算机中所有的程序都是运行在内存中的。逻辑角度:内存是一块具备随机访问能力,支持读写操作,用了存放程序及程序运行中产生的数据的区域。2.内存单位描述内存的大小位 bit 是计算机中最小的数据单位,每一个单位的状态只能是0或1字节 1Byte = 8bit 是内存基本的计量单位KB 1K...
2019-05-21 08:50:20
238
原创 C/C++基础-函数
1.函数函数是一组一起执行一个任务的语句。每个C程序都至少有一个函数,即主函数main(),所有简单的程序都可以改其他额外的函数。函数的声明:return_type function_name(parameter list) { body of the function}C语音由上到下加载,函数被执行前,需要通过头文件(相当于接口,解决耦合问题)声明函数C语音以函数...
2019-05-20 22:33:16
262
原创 Path的测量PathMeasure
PathMeasure:路径测量,用来测量Path的工具类,常用API包括 Path长度的测量、Path跳转、Path片段的获取等 canvas.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2, mLinePaint); canvas.drawLine(getWidth() / 2, 0, ge...
2019-05-19 20:41:08
384
原创 Path以及贝塞尔曲线
1.Path路径,可用于绘制直线、曲线构成的集合图形,还可以御用根据路径绘制文字常用Api包括 移动、连线、闭合等////// mPaint.setStyle(Paint.Style.FILL); //一阶贝塞尔曲线,表示的是一条直线 mPath.moveTo(100, 70); //移动// mPath.lineT...
2019-05-19 20:23:34
763
原创 Canvas的使用
1.画布变化操作,对Canvas移动后,坐标系发生变化// //1,平移操作// canvas.drawRect(0,0, 400, 400, mPaint);// canvas.translate(50, 50);// mPaint.setColor(Color.GRAY);// canvas.drawRect(0...
2019-05-19 20:13:25
169
原创 Paint 滤镜效果
LightingColorFliter /** * R' = R * mul.R / 0xff + add.R * G' = G * mul.G / 0xff + add.G * B' = B * mul.B / 0xff + add.B */ //红色去除掉// Ligh...
2019-05-19 19:59:34
163
原创 图层混合
//1.ComposeShader //2.画笔Paint.setXfermode() //3.PorterDuffColorFilter //禁止硬件加速 setLayerType(View.LAYER_TYPE_SOFTWARE, null); setBackgroundColor(Color.GRA...
2019-05-19 19:32:26
152
原创 Paint画笔高级应用
1.Paint常用方法// mPaint.setColor(Color.RED);// 设置颜色// mPaint.setARGB(255, 255, 255, 0); // 设置 Paint对象颜色,范围为0~255// mPaint.setAlpha(200); // 设置alpha不透明度,范围为0~255// mPaint....
2019-05-19 19:04:26
177
原创 事件分发机制
一、事件类型当用户触摸屏幕时,将产生的触摸行为(Touch事件)MotionEvent.ACTION_DOWN 手指刚接触屏幕MotionEvent.ACTION_UP手指从屏幕离开MotionEvent.ACTION_MOVE手指在屏幕上滑动MotionEvent.ACTION_CANCEL非人为因素取消二、事件序列一次手指触摸屏幕的行为触发一系列的点击事件...
2019-05-15 00:16:21
260
原创 屏幕适配—像素密度
一、像素密度像素密度指手机屏幕一点尺寸区域内像素的个数,在Android中,使用没英寸像素密度(dpi)表示手机屏幕的像素密度,dpi的换算方式为:步骤1:计算得到手机屏幕的斜角像素长度:步骤2:使用屏幕斜角像素长度去除上手机屏幕尺寸得到dpi在Android当中一般讲手机屏幕按每英寸像素密度的值分为:0~120dpi~160dpi~240dpi~320dpi~480...
2019-05-10 23:38:29
985
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人