安卓开发手记 缩减APK的大小

首先

经过本人的实(zuo)践(shi) 最好不要缩减掉com.android.support:appcompat-v7向下支援库!不要!

这个包是为了考虑API level 7(即Android 2.1)及以上版本而设计的 缩减之后许多方法(包括Material Theme)将对5.x以下系统不支援

因为我需要考虑低版本的旧设备 使用我不对这方面进行缩减 当然如果你不考虑5.x以下系统的向下兼容 这就完全没有关系了

可以通过开启开启资源压缩和代码混淆压缩来缩减体积

build.gradle(Moudule:app)的buildTypes部分中

 buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }

这样就好了 十分的简单 而且有效

也可以清理项目文件夹中的各个assets文件夹 它们中会存放着一些未使用的资源文件

然后你可以还通过Refactor菜单中的Remove Unused Resources移除掉未使用的资源文件

再然后还可以使用Analyze菜单中的Inspecting Code来优化代码 缩减掉不必要的代码和资源文件

好的大概就这样

如果有问题 请轻喷

我想砸键盘了

好了

今天升级WordPress一直500

我也不知道我为啥一直想升级这玩意

毕竟我真很少用这玩意

最近敲代码都磨磨蹭蹭的

出产的的东西真的很少啊Orz

还想要学UWP(拖延中)

还在学Android和Java(超慢速中)

有点时候甚至怀疑自己没有天分什么的

老师还说我自学能力还不错……我都不怎么相信……

最近还在规划一个WPF的Hosts管理工具什么的……大概会叫mHosts

另外我好像又和别人吵架了 虽然是不怎么熟悉的人 但是还是会去在意这些东西什么的

但是确实感觉自己不太成熟 也不想成熟 想要有人一直让着我什么的

有空的话一定要去重写一下那个个人页面……太丑了……

另外下周要去上海了啊……

另外想要买一块树莓派嗯

嗯……大概就这样……

什么?!又要开学了?!

寒假还是和那样子一样过去了

简直无法弥留

剩下的只有开学初的一片嚎哭

居然有人肝作业肝到昨晚凌晨两点多

真是XD

看来这个寒假简直过得快的不科学啊。

Orz

过了一年,还是和原来一样的渣。

连写个博客组织语言都不会了Orz

有些事情即便想起来了也会忘掉去做啊!

啊说起来我某次在学校打开了我的List页 简直被丑哭了(因为当时写CSS忘记考虑字体什么的)

然后心里就想着一定要找个时间去改一下什么的

说起来这一想就是好几个月

然后最后发展成为“唉我好像有什么事情忘记做了”的样子

然后想啊想 想啊想

某日又想起来“啊我想起来我什么没做了!明天一定要找个时间补上啊!”

什么的

然后最后又是不了了之 怎么进入一个奇怪的死循环了啊XD

真是讨厌啊

说起来 我才不会用备忘录这种东西呢 坚决不用!

因为麻烦(x

嗯……明天一定要记得去把那个List页的CSS改掉()

年末

又到年末了

晃荡着2016就这样子过去了

福州的冬天简直就是说来就来 冷的要死

而且因为是沿海 湿度很大 穿再多的衣服都木有什么用的样子

简直就是要命啊

想要写点总结什么的 然而写不来

反正我双11和双12都没有买东西 是不是超厉害

然后十二月后面就是补齐一些DEMO加笔记以及一些形式性的总结什么的就好了

另外以一个非主流专科生的身份收获了国职赛市一等奖和省二等奖什么的

好像没什么了不起的

还是原来那么渣

PHP和Python都忘光光了 真是令人烦恼啊

另外VS出了17RC和Mac Beta真是令人惊讶

还有多说最近都有垃圾评论了 真是令人讨厌啊

大概就是这样吧

C# WinForm MDI父窗口子窗口控件互操作

在窗体中定义一个 用于存放当前窗体的对象

public static MDIParent1 mdiwin = null;

然后 将他初始化

mdiwin = this;

然后 就可以通过

主窗体类名. mdiwin

在子窗体来操作主窗体对象了 例如

MDIParent1.mdiwin.Text = "Hello World!";

到这里 还没有全部完成 你会发现 只能操作窗体对象主体 无法操作控件
还需要将我们要将要操作的控件的 modifiers 属性 设为 public
或在Designer.cs中将访问符手动从 private 改为 public
如果需要使用变量的话 也可以在变量前加 public 解决 例如

public int i = 0;

设置之后 就可以正常操作控件了 例如

MDIParent1.mdiwin.label1.Text = "Hello!";

以上 父窗体操作子窗体同理

但这并不是一个好的方法 因为在调用时 他将破坏封装 你可以把它封装成方法后再进行使用


拓展与参考资料:http://blog.csdn.net/max01/article/details/1869008

Bizideal Zigbee V24 SDK C#开发手记(3)

RFID与之前部分较为相似
依旧需要引用库
也需要实例化命名控制 此处有些不同

BIControllerManager ControllerRfid = new BIControllerManager(new BIRFIDProtocol());//生成控制实例,并指定相关协议。BIRFIDProtocol射频RFID协议。

开始接收

this.ControllerRfid.PacketReceived += ctrlrfid_PacketReceived;this.ctrlrfid.OpenPort(this.cmbRfid.Text, 9600, Parity.Even, 8, StopBits.One);//射频(RFID)串口号,波特率是9600,偶校验,数据位8,停止位1this.ctrlrfid.StartReceiver();

处理接收到的数据

void ctrlrfid_PacketReceived(object sender, BIPacketReceivedEventArgs e){ //添加新建一个线程 防止用户界面卡死 this.BeginInvoke(new Action(() => { //解析数据包 BIRfidUpgoingPacket Packet = BIRfidUpgoingPacket.ParseFromBinary(e.BinaryData); if (Packet != null) { byte channel = Packet.AntennaChannel; //如果读取成功 if (Packet.TagCardState == BizIdeal.Data.BIRFIDTagReadResult.Succeeded) { //如果包为标签 if (Packet.DataList[0].SensorType==BISensorType.RFID_15693_Tag) { this.lblId.Text = Packet.TagID; } //如果包为数据 if (Packet.DataList[0].SensorType == BISensorType.RFID_15693_Data) { this.txtData.Text = BitConverter.ToString(Packet.BlockData); } } //如果没有读到 else if (Packet.TagCardState == BIRFIDTagReadResult.NoCard) { this.lblId.Text = "NoCard"; this.txtData.Text = "00-00-00-00"; } else if (Packet.TagCardState == BIRFIDTagReadResult.Error) { this.lblId.Text = "Error"; this.txtData.Text = "00-00-00-00"; } } }), null);

读取标签

this.ctrlrfid.RFID.ReadTag(0xffff, 0, BIRfidReadMode.Manual15693);//第一位短地址 此处使用广播//第二位通道//第三位读取模式,手动 //BIRfidReadMode.Auto15693(自动模式)

读取数据

this.ctrlrfid.RFID.ReadDataBlock(0xffff, 0, 0, BIRfidReadMode.Manual15693);//第一位短地址//第二位通道//第三位数据块//第四位读取模式,手动

写入数据

this.ctrlrfid.RFID.WriteDataBlock(0xffff, 0, 0, data);//第一位短地址//第二位通道//第三位数据块//第四位数据内容

C# WinForm 界面相关(杂-1)

设置窗体整体透明度

this.Opacity = 0.1;

设置窗体Background为透明

this.BackColor = Color.White;this.TransparencyKey = Color.White;

隐藏窗体标题栏和边框

this.FormBorderStyle = FormBorderStyle.None;

一个例子

double i = 1.0;private void timer1_Tick(object sender, EventArgs e){i = i - 0.1;this.Opacity = i;}

C# WinForm MDI窗体基本使用

在父窗体中显示子窗体

Form1 f1 = new Form1();f1.MdiParent = this;f1.Show();

水平平铺各窗体

LayoutMdi(MdiLayout.TileHorizontal);

垂直平铺各窗体

LayoutMdi(MdiLayout.TileVertical);

层叠排列各窗口

LayoutMdi(MdiLayout.Cascade);

排列各窗口

LayoutMdi(MdiLayout.ArrangeIcons);

C#中操作MS SQL

先要对相关的库进行引用

using System.Data.Sql;using System.Data.SqlClient;using System.Data.SqlTypes;

实例化命名连接

SqlConnection sqlCon;

打开连接

sqlCon.Open();

然后连接数据库

string sqlinfo = @"Data Source=(localdb)\v11.0;Initial Catalog=Demo1;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";sqlCon = new SqlConnection(sqlinfo);

查询数据库

SqlDataAdapter select = new SqlDataAdapter("select * from _Users", sqlcon);select.SelectCommand.ExecuteNonQuery();

执行语句

SqlDataAdapter update = new SqlDataAdapter("Update _Users set _='admin' where _Id = 1", sqlcon);update.SelectCommand.ExecuteNonQuery();

最后 操作完之后记得断开与数据库的连接 节省资源

sqlCon.Close()