- 博客(46)
- 收藏
- 关注
原创 Android library发布多渠道AAR
一、 在项目多渠道开发时,除了对不同的渠道除了做统计外,还可以对不同的渠道加载不同的代码及资源,具体的部署可以参考 Android studio gradle中分渠道加载res、libraries及Class ;在模块化拆分后,若恰好在模块内部的代码及资源也要根据不同的渠道发布不同的aar包到nexus仓库,该怎么配置呢?二、思路:一般单独拆分出的library基本都是将代码及资源打包成aar包...
2018-12-02 18:09:39
940
原创 ClassPlaceholder插件:动态修改jar包class文件
背景:在开发,一些在jar包或底层库封装的一些常量参数有时需要根据环境的切换而改变,如在jar中的使用的baseUrl,一般都是通过向外暴露一个set()方法,由外部注入。但若在底层库在多个模块引用,又不能避免其他模块对参数的修改时,特别是在大项目若一些管理混乱的项目中,就会出现多个地方set不同的值,不能保证参数set()入口的唯一性。这时便可以考虑不向外暴露set()方法。并将原参数定义为...
2018-09-06 23:42:10
896
原创 自定义一个gradle插件动态修改jar包Class文件
动态修改jar包中的class文件,预埋占位符字符串,在编译代码时动态植入要修改的值。记录一下整个过程及踩过的坑。Github 地址:ClassPlaceholder创建一个Android项目,再创建一个Android library,删掉里面所有代码。添加groovy支持。如:apply plugin: 'groovy'sourceCompatibility = 1.8...
2018-09-06 23:36:23
2432
原创 Android开发中Kotlin之于Java那些不一样的功能
感觉Kotlin对java不仅是一点点的改变,而是一种完全不同的体检。习惯kotlin的简洁后,就知道java到底e有多啰嗦了。今天简单对比一下在Android开发中kotlin在语言本身上就有哪些好用的功能。可观察属性Delegates.observable。在Oc中早已有的功能,非常方便在状态值切换时使用,再也不怕状态值改变时没有调用到关联的函数。语法:var max: Int by...
2018-09-05 21:24:47
363
原创 为什么不能在ArrayList的For-Each循环中删除元素
大家都知道,不能在ArrayList的For-Each循环中删除元素。在Java的入门教程中都会写上这条。可是为什么不能呢?若非要在for循环遍历中删除元素会发现什么呢?本着一颗好奇的心,一起来研究研究。先说现象: List<String> list = new ArrayList<String>(); list.add("1"); list.add("
2017-03-13 22:04:38
788
原创 对List对象列表属性值的快速搜索
对于数据的搜索已有很多成熟的方案,比如Apace Lucene框架,结合ikanalyer等分词器能实现很复杂和高效的搜索,或直接使用sql语言对数据库关键字进行搜索等。但这些搜索都很重,对于已经加载完成的数据列表并不适用。比如有这样一个需求:已经加载了一个班的学生在一个List列表中,要根据学生和姓名和住址做一个模糊搜索。因为数据已经加载到List中,存在于内存中,若再从数据库或网络上去使用关键字
2017-03-12 19:29:14
3970
7
原创 IOS开发学习笔记之数据存储
++ 数据存储++ ios中常用的持久化数据的方法: 1、属性列表:Xcode的Property List;再序列化到文件中,使用NSString、NSArray或NSDirectory等的writeToFile方法;主要用于解决硬编码问题; 2、对象归档: 3、SQLite3: 4、Core Data:是一种ORM技术;本质上是通过sqlite或二进制文件、内存形式来存储; [另外还包
2017-03-06 21:32:34
306
原创 IntelliJ IDEA导出war包及Tomcat部署
IntelliJ IDEA导出war包:1)单击最左下角的选项按钮;2)在右侧弹出的maven projects选项展开Lifecycle/package,双击或点击上面的执行按钮,即可; 3)默认会把打好的war包放在在target目录下。【注意】 默认情况下在IDEA maven项目中src源代码下的xml等资源文件,并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。(如把m
2017-03-05 13:05:50
11407
1
原创 SpringMVC开发常见注解
springMVC开发中使用了许多注解,不仅方便开发,也使代码更加简洁。常用的注解有:@RequestMapping参数: —> value:指定请求的实际地址,指定的地址可以是URI Template 模式 —> method:指定请求的method类型, GET、POST、PUT、DELETE等 —> consumes:定处理请求的提交内容类型(Content-Type),例如applic
2017-03-05 12:57:53
329
原创 IOS基础之宏定义
宏定义#define: 定义和使用同C/ :表示换行 # :字符串操作符,用于将参数序列化成一个字符串; ## :连接符,用于将相邻的两个标记(Token)连接为一个。使用是分隔(根据空格或其他操作分隔符[+,-,*,/,”,”等]),再强制连接(去掉和前面的字符串间的空格,再连接起来)。 @# :字符化操作符,只能用于有参数传入的宏定义中,必须置于宏定义体参数名前,作用是将传入的单字符参数
2017-03-02 23:06:34
405
原创 IOS开发学习笔记之调试
调试 符号断点:可指定某个方法;直接添加方法名,则相当于设置断点在方法的第一行; Oc有过三种编译器:GCC(很老,弃用)、LLVM、Apple LLVM(主要使用); LLDB调试工具:在设置断点后,在输入面板中使用lldb的命令进行调试及计算;常用命令: p :输出基本类型 po :输出Oc对象 expo :动态修改参数的值,并调试 call : 调用其他方法,如:call [se
2017-03-02 22:52:01
282
原创 Android studio gradle中分渠道加载res、libraries及Class
前段时间遇到这样的需求,在App里使用了地图功能,对应海外版使用Android内置google的地图服务。而对于国内版(大家都知道的),我们使用了高德地图。而在导入高德地图的时候需要加入对应的sdk及.so文件,这样最后打包的大小会增加2M左右。但海外版并不需要这部分资源,故需要根据不同的渠道加载不同的jar、res、及不同的类,有助于保持代码的干净,控制包的大小。不多说了,直接上步骤!1)首先要获
2017-02-28 22:20:54
1130
原创 Android单元测试
在Android开发过程中,一般模式大抵为编写好程序,然后运行在Android虚拟机或真机上(考虑到电脑配置太低,虚拟机太慢等情况,用虚拟机运行程序很少见);若要调试程序,一般采用打Log日志、打断点Debug等方式,定位到某处可能存在bug,再修改代码,反复运行。而每加载一次app都需要编译整个项目,速度很慢;有时可能仅仅是修改了某个页面的很小的判断就需要重新编译一次,在真机上一路点击到刚修改的页
2017-02-28 22:08:02
299
原创 JavaWeb处理流程与基本jar包
处理流程: —>client发起请求 —>前端控制器(DispatcherServlet)接收 —>调用处理器映射器(HandlerMapping)根据xml或注解查找对应的处理器(Handler) —>处理器适配器(HandlerAdapter)执行找到的Handler —>处理器(Handler)执行完成后向处理器适配器(HandlerAdapter)返回ModelAndView —
2017-02-26 18:32:45
264
原创 JavaWeb之JSP
概念: 1)JSP(Java Server Page)是Java服务器端动态页面技术。是sun公司制订的一种服务器端的动态页面生成技术规范。2)为什么要使用JSP:因为直接使用Servlet,虽然也可以生成动态页面。但是,编写繁琐(需要使用out.println来输出),并且维护困难(如果页面发生了改变,需要修改Java代码),所以sun指定了JSP规范。3)与Servlet的关系:JSP其实是一
2017-02-26 18:23:46
224
原创 JavaWeb之Servlet
Servlet: Sun公司制订的一种用来扩展Web服务器功能的组件规范。当浏览器将请求发送给Web服务器(比如:apcahe的web server),Web服务器会向Servlet容器发送请求,Servlet容器负责解析请求数据包。 —> 组件:是符合一定规范,并且实现部分功能的可以单独部署的软件模块。组建必须要部署到容器里面才能运行。 —> 容器:也是符合一定规范,并且提供组件的运行环
2017-02-26 18:12:46
262
原创 Web基础之jQuery对Ajax的支持
jQuery对Ajax的支持1)load()方法: ①作用:将服务器返回的数据直接插入到符合要求的节点之上,并向服务器发送异步请求,相当于:obj.innerHTML=服务器返回的数据。 ②用法:$obj.load(url,[data]); —> url:请求地址,服务器上的某个组件的地址。 —> data:请求参数,有两种形式: A.请求字符串形式:”nam
2017-02-26 17:55:26
213
原创 Web基础之jQuery(二)
事件 * 绑定事件: 1)方式一:bind( type,function(){} )$('#d1').bind('click',function(){//正式写法,常用于解决浏览器兼容性 $(this).html('hello java'); });2)方式二(绑定的简写形式):click( function(){} );$('#d1').click(function(){/
2017-02-26 17:50:51
241
原创 Web基础之jQuery(一)
概述: 1)jQuery是一种框架,对于浏览器的兼容问题,95%不用再去考虑了。 2)jQuery利用选择器(借鉴了CSS选择器的语法)查找要操作的节点(DOM对象),然后将这些节点封装成一个jQuery对象(封装的目的有两个:①是为了兼容不同的浏览器。②也为了简化代码)。通过调用jQuery对象的方法或者属性来实现对底层的DOM对象的操作。 3)jQuery特点简单概括就是:选择器 + 调方
2017-02-26 16:43:11
349
原创 Web基础之Ajax
Ajax概述: + Ajax(Asynchronous JavaScript And Xml),异步的JavaScript和Xml。是一种用来改善用户体验的技术,其实质是利用浏览器内置的一个特殊对象(XMLHttpRequest,一般称之为Ajax对象)异步地(Ajax对象在向服务器发送请求时,浏览器并不会销毁当前页面,用户仍然可以对当前页面作其他的操作)向服务器发送请求,服务器送回部分数据(不是
2017-02-26 16:25:42
265
原创 Web基础之JavaScript(三)
DOM+ 概念: 1)HTML DOM定义了用于HTML的一系列标准的对象,以及访问和处理HTML文档的标准方法 2)HTML标签对象化:将网页中的每个元素都看作一个对象。 3)常用HTML DOM对象:Select对象 1)Select对象代表HTML表单中的一个下拉列表,标签即表示一个Select对象。 2)常用属性:options(选项数组)、selectedIndex(索引从0开始)、s
2017-02-26 16:19:16
295
原创 Web基础之JavaScript(二)
window对象 + DHTML 1) 操作HTML以创造各种动态视觉效果,是一种浏览器端的动态网页技术。 2) DHTML的功能: —> 动态改变页面元素。 —> 事件响应机制制作动态折叠的树形结构和菜单。 —> 与用户进行交互等。 1) 对象模型:window表示浏览器中打开的窗口。也是父对象。 1)常用属性: ①name:窗口名称。 ②opener:打开当前窗口的
2017-02-26 15:49:30
230
原创 Web基础之JavaScript(一)
JavaScript概述: + 是一种网页编程技术,用来向HTML页面添加动态交互效果; + 是一种基于对象和事件驱动的解释性脚本语言,具有与Java和C语言类似的语法; + 可直接嵌入HTML页面,由浏览器解释执行,不进行预编译。 发展史 + 正式名称是“ECMSCript”,由ECMA组织发展和维护; + CMA-262是正式的JavaScript(Netscape)和JScript
2017-02-26 12:59:10
506
原创 Web基础之CSS3
概述:css3完全向后兼容,不需要改变已有设计。浏览器通常支持 CSS2。 CSS3被划分成模块,【-moz- , -o- , -webkit-】 有: 1)选择器 2)框模型 3)背景: —>属性: ->:background-size:规定背景图片的尺寸。 ->:background-origin: 规定背景图片的定位区域。 ->:backgrou
2017-02-26 12:45:26
210
原创 Web基础之HTML5
+概述:HTML5是W3C 与 WHATWG 合作的结果。新特性: 1)canvas:用于绘画; 2)video/audio:用于媒体播放; 3)web离线存储; 4)新的特殊内容元素:article、footer、header、nav、section 5)新的表单控件:calendar、date、time、email、url、search*<video src=“a.mp4”
2017-02-26 12:35:32
378
原创 Web基础之CSS(二)
CSS 单位 尺寸: [注意:em是根据font-size的值来确定;若font-size的单位也设置为em,则以该元素的父级元素的font-size为标准计算。]颜色:尺寸属性: + width/height:宽高 + overflow:当内容溢出元素框时如何处理,可取的值有:visible/hidden/scroll(总是显示滚动条)/auto(溢出时才会显示滚动条)* 边框样式:
2017-02-26 12:20:52
265
原创 Web基础之CSS(一)
css作用:早期,依靠HTML元素的属性设置样式,比如:border/align;而每个元素的属性不尽相同,所以样式设置比较混乱;因此,W3C推出了一套标准:使用某种样式声明后,所有的元素通用,即CSS产生,它是对页面的样式进行统一的定义(声明)的。CSS概念: + CSS(Cascading Style Sheets):层叠样式表,又叫级联样式表,简称样式表; + 用于HTML文档中元素的定义
2017-02-26 12:05:49
262
原创 Web基础之HTML
HTML 版本信息: 在文档的起始用DOCTYPE声明指定的版本和风格,让浏览器清楚文档的版本、类型和风格。版本信息分为三种:严格型、传统型(过渡型)、框架型。 分别是: 1)Strict DTD<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-s
2017-02-26 11:47:01
242
原创 IOS开发学习笔记(六)
+摄像头和照片库+ 由于ios应用受到沙盒机制的限制 ,通常不能获取照片或自己沙盒之外的其他数据。但可使用图像选择器UIImagePickerController;并在其代理 UIImagePickerControllerDelegate中处理选择的图片和拍摄的照片;沙盒(箱)机制:是一种数据安全策略;每个应用程序都有自己的存储空间;应用程序不能翻过自己的空间去访问别的存储空间的内容;应用程序请求
2017-02-25 21:01:55
393
原创 IOS开发学习笔记(五)
++应用生命周期(5种状态)+ * 未运行(Not Running):在设备打开的状态下,只有遇到下面三种情况的时候才返回返回该状态;* 应用的plist.info包含UIApplicationExistsOnSuspend(并且设值为YES);应用之前被挂起且系统需要清除一些内存;应用在运行过程中崩溃; 不活跃(Inactive):应用仅在其他状态间临时过渡阶段处于不活跃状态。应用右在任意时间
2017-02-25 19:52:23
351
原创 IOS开发学习笔记(四)
+UINavigationController+导航控制器: 是用于构建 层级应用的主要工具与UITabBarController类似。主要区别在于UINavigationController是用栈(stack)来实现的。非常适合处理层级结构。 原理:UINavigationController维护着一个视图控制器栈,用户看到的第一个视图的视图控制器就是根视图控制器,也是导航控制器栈的栈底。后其
2017-02-25 19:10:56
281
原创 IOS开发学习笔记(三)
ios项目模板全都默认使用.xib扩展名,但最初所有的界面构建器文件都使用.nib扩展名。界面的实现三种方式:storyBorad、xib、纯代码; storyBorad:由一组或多组相对应的视图和控制器构成;由场景(Sence)和过渡(segue)组成;缺点是多人开发时容易冲突,多使用xib; Assets.xcassets目前,创建项目自动生成的资源目录,用来管理应用图标及其他图片;但Xod
2017-02-25 19:04:49
252
原创 IOS开发学习笔记(二)
++ xib ++ xib文件实质是一个xml文件,类似于android用于描述界面;要先设置File’s Owner中的class属性(目的是在xib中能找到Owner中的方法,类似android中xml与View的绑定);并建立File’s Owner跟控件间的联系 [[NSBundle mainBundle] loadNibNamed:@”RowView” owner:self optio
2017-02-25 18:57:00
192
原创 IOS开发学习笔记(一)
概述: iOS是苹果开发的手持设备操作系统(iPhone,iPad,iPod touch,iPad mini)。 基于UNIX,层次架构:核心操作系统层(Core OS)—> 核心服务层(Core Services)—>媒体层(Media)—>可触摸层(Cocoa Touch); 主要面对Cocoa Touch层;很多技术都是基于OC,底层很多框架是C开发的;Cocoa Touch层中的UIK
2017-02-25 18:50:19
465
原创 IOS学习笔记之Object-C(三)
NSArray 有顺序;固定的,一旦创建,里面的元素不可变;只能放OC的对象(且任何OC的对象都能放入);不能放nil(有特殊意义,代表数组结束); 创建: NSArray *array = [NSArray array]; //创建一个空数组 [NSArray arrayWithObject:@”123”];//创建一个带1个元素的数组 [NSArray arrayWithObj
2017-02-25 18:37:37
345
原创 IOS学习笔记之Object-C(二)
++ Category ++分类(类扩展) 可以动态的为已经存在的类添加新的方法(但不能添加成员变量);(Xcode中新建-Object-C file-选择category;)[可以和头文件写在同一个文件中(一个文件中可有多个类)] 不需要创建子类;实现的方法的模块化; //需要导入要扩展的类的头文件;#import “Student.h"//类名后有一个()就代表着是一个分类;//(..
2017-02-25 18:20:44
300
原创 IOS学习笔记之Object-C(一)
++ 概述 ++ 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。 * 基于C语言:C语言是一门面向过程的语言,OC是在C语言的基础上,增加了一层最小的面向对象语法,为什么说是最小的面向对象语法呢?因为OC把一些比较复杂的面向对象语法都去掉了,剩下的都是面向对象的精华,因此OC是一门
2017-02-24 18:19:34
440
原创 IOS基础学习之C(二)
++ 指针 ++ 引用的概念:赋值时都是先将变量名a转换为a的存储地址,根据地址找到变量a的存储空间。然后将数据以2进制的形式放入a存储空间中。直接引用:直接通过变量名来读写变量间接引用:首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。 [间接引用来修改值:先根据 变量名b 获取 变量b 的地址ffc2,取出变量b中存储的内容ff
2017-02-24 17:46:46
221
原创 IOS基础学习之C(一)
iOS开发的核心语言是Objective-C,Objective-C是在C语言的基础加了一层面向对象的语法。为了能够更好地掌握Objective-C,我们可以先学习C语言,然后在C语言的基础上升华到Objective-C。C语言: 是编译型语言; *C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前是用汇编写的) *C语言是一门面向过程的语言,非面向对象的语言 ++ 特
2017-02-24 17:25:54
411
原创 Android学习笔记(七)
AIDL进程间通信;AIDL(Android Interface Design Language)▲№aidl接口语法: 1、支持package 和 import等关键字 支持void interface等关键字 2、不支持访问修饰符 3、接口中不能定义常量只能定义方法 4、参数类型或返回类型: a、基本类型 b、CharSequenc
2017-02-23 22:26:12
229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人