做另一面的自己


  • 首页

  • 分类

  • 关于

  • 归档

  • 搜索
close
做另一面的自己

永远别让自己陷入怪圈

发表于 2021-11-23 | 分类于 新加坡 |

好多年没有更新了,每次想写一些什么,但是因为种种原因,还是没有写,生活还是需要总结的。最近遇上一些工作上的奇葩事,记录一下。

事情的经过是这样的,在前公司有条不稳的工作生活了两年,打心底敬佩前老板的工作理念,数据驱动产品。抱着尝试和接受新挑战的心态离开了原公司,去了一家做语音直播的武汉公司,在新加坡刚建立团队,刚开始还是很抱有期望的,进入这个公司可以大展拳脚一翻,也不辜负自己多年从事社交领域的经历,虽然预料到了会有很多不如意的地方,毕竟初创公司。

于是10.11就第一天入职这家公司,办公区域是合租的wework方式,我也第一次使用这种办公模式,办理入职手续小姐姐还是很热情的,后面领电脑,自己安装,心里开始觉得这公司连个IT都没有吗,加上武汉的团队,所有办公也快上千人,也不是小公司了。后面再拉取代码运行,这么庞大的工程,竟然一点文档都没有,心里还有点不习惯。后面慢慢的呆了几天,发现一切和自己预期的相差太远,这边虽然开了一个办公室,但办公和武汉根本没有独立开来,业务上和代码库都是共用,工作上会带来很多不必要的麻烦;每天的半个多小时的站会,中午一点去吃饭,两点上班,中午没有时间午睡,都让我不得不重新适应,这也没什么好抱怨的,毕竟每个公司都有自己的制度;产品需求没有什么讨论,念完需求,开发自己认领,一期任务多达40个,多些是运营任务,拿到任务自己和产品讨论有没有问题,两周没有必要的测试时间,直接上线,见证了活生生的拿线上用户当白老鼠的产品,可想而知,产品在线上之后到处都是bug,这是我对自己做的产品所不能接受的;工作任务的分配精确到小时,这一切都是我没有预料到的。越想越不对劲,本来想好好来打磨产品的,最后没想到的是竟然是做运营活动,而且流程相当不规范,这种做产品的方式跟领导反馈之后,他也只是云淡风轻的带过,或许只是我的一厢情愿,这样工作并不耽误赚钱。

我很无奈,我一边想要离开这样的工作模式,一边又在想要不要为自己的选择买单,做下去,毕竟又不是我一个人在工作。自己也在努力看其它之前拒掉的机会。那段时间真的很挣扎,在走与不走之间,走了去哪里,回原公司还是换新公司,期间和家里人吵架和领导也商讨过。回原来的公司,还是有些不甘心,虽然领导和同事都期待着我回去,但是出来是学新技术和体验新的挑战的。就在接了原公司offer准备回去的时候,发现自己内心并没有那么狂喜,而是焦虑,于是又果断跟原领导联系,拒了offer,也真是够丢脸的。这时心情才平静下来,要么呆下去,要么去寻找新的offer,这时候也收到了以前拒掉公司的offer, 在和前同事打听了一波里面的情况之后,最终还是决定去尝试一下。

尝试就意味着有新的挑战,但应该觉得没必要害怕和胆怯,我应该重新找回自己的自信。经过这件事,做了很多自己不敢想也不敢做的事,也对不起很多同事,前同事为我铺好了路,心心念念让我回去,但我却在最后反悔了,心里感恩。在工作上也是第一次遇到这种事,以前只是碰到别人会这样,心里还觉得很奇怪,总是觉得自己在一份工作上无论如何也能坚持几年,没想到以前也只是自己运气好,去的都是不错的公司,想到自己有没有必要去做无意义的坚持时,我还是选择了断舍离,及时止损才是人生的明智之举。

在那一个月的时间,体会到了度日如年的感觉,让自己陷入了怪圈,每天犹豫不定,天天失眠焦虑,自信心丢失,家人看到我这样也对我快失去耐性。现在终于解脱,正应了那句话,在所谓”人世间”摸爬滚打至今,我唯一愿意视为真理的,就只有这一句话,一切都会过去的。不要让任何人任何事打断你的节奏。希望以后能勇敢坚定的走下去。

做另一面的自己

工作中的负能量

发表于 2018-12-22 | 分类于 新加坡 |

好巧不巧,今年完春节来新加坡刚好是13号,一个两年前风尘仆仆带着希望来新加坡的年轻人,现在好像没有了当时的朝气,甚至是有些丧气。

这段时间在公司经历了太多负面情绪,事情的经过是这样的,在cto带领着server团队鏖战黑客的一翻战争中,给我们服务带来了很大的创伤,此时正值网红从我们平台转向其他平台的时候,虽然最终黑客被赶走了,但是其间把用户踢走,确实影响了不少用户。在有个晚上brain challenge这款游戏在server端优化的时候又出现了毛病,产品经理大为恼怒,认为技术做了很多无用的优化,想找责任人,表面的事情就是这样的,熟不知,公司这时候压力已经来了,资金出现问题,就这样过了一段时间,大家也没有太在意,工作还是正常进行,直到有一天,老板一封邮件,打破了平静:为了公司的正常运作,今年的季度奖金和年终奖都将延迟发放,这可是大家一年的期盼,认真工作辛苦了整年,都希望过年有些收获,知道有多少人是准备着最后一个月工资和年终奖回家过年的么;国内很多公司都是3个月以后,问到自己的时候没有,这会不免有些尴尬。季度奖也是,当大家期待已久,而且看收入曲线都还良好的情况下,忽然中止,没有任何征照,这样还是很伤大家的心。毕竟,年底发放奖金是对大家的一份承诺,虽然邮件上说明了公司的情况,但是且不论真假,企业的盈利不应该是高层领导考虑的问题吗。

发生这件事的情况是,茶余饭后都有很多报怨,大家工作也没有以住那积极,都纷纷提前开始了找工作的计划,而我在这件事中,听了太多的闲言闲语,也看到公司在这段时间的所作所为,导致心态也有些失衡,也抱怨过,失望过。可是回过头来想想,如果当时知道年底没有奖金,还会来这里吗,我想我的选择还是会的,对于未知的东西,我们总是想去尝试一下。新加坡也没有让失望,除了工作,在这里还学到了包容,学到了好的社会基础是多么重要,大家才能井井有条,奉公守法。没有奖金不是不能活,我们不能只为了眼前这点小钱不是吗,以后的路还长着呢。在工作上也学习到不少,自己从一个做事情都有些小胆怯的领导,现在也能够有条不稳的带领大家进步,从而得到大家的认可,这是金钱买不到的,当然还要不断进步。别人的情绪不能影响了自己,任何时候都要做好自己的工作,收拾好心情,重新上路才是最重要的。况且国内状况也不太好,听到太多的企业倒闭,发不出来工资,甚至是上午解bug,下午被通知裁员的,跟这个一比,我们已经非常好了,至于更好的企业,以后我们也会去的。家里人是会理解的,最重要还是自己的心态要好,不管怎么样,自己不能让自己失望是最重要的,别人的眼光,人生的起起落落不必太在意。

只需要记住,任何事都会过去的,一定要成为最好的自己,不要成为最讨厌的自己。

做另一面的自己

人生总有一些期而遇

发表于 2018-07-12 | 分类于 新加坡 |

今天是2018.7.11,2018已经过了两个季度,又是一个季度一次的老板洗脑日子,去年原定的计划做全屏游戏和直播结合的方式,慢慢的被推翻了;要做各个地区的loops计划也被推翻了。似乎又回到去年的这个时候,重头开发,全部专注于阿拉伯市场,这才几个月的时间,老板的心理发生了这么大的变化。原定的在年底在新加坡上市,现在又变成了明年中旬去香港创业板上市的计划,这又是老板新画的一个大饼吗?在情理上所有的尝试和变化都是必要的,但一切都是老板在主导者未来的方向,这个故事告诉我们如果你是一个非常有想法的人,一定要自己当老板,而我们的状态就只能是配合老板,做好自己的本职工作,努力提升自己,不负这岁月。

工作上这段时间,接触到不同的人,了解了很多不同人的想法,大家心里都打着自己的小算盘,有的人想跳槽,有的人想过些时候跳槽。原因有很多,有因为不满意工资的,有些不满意cto的做法的。对于我们团队,cto还是给了我们很高的评价,这点对自己和团队还是非常满意的,cto也兑现了曾经答应给我的期权,也算是利益和公司绑在了一起,虽然不知道何时才能兑现,心里还是非常感恩cto和公司的。所以还是要遵从自己的内心,不能在背后对别人的做法妄加评论,任何流程执行下来对团队的帮助都是很大的,就算前期会有很多不适应,那也不能抱怨,来日方长,时间会检验结果的。再者不断告诉自己不能受到别人的影响,也不能以消极的心态去影响别人。

最近零零散散看了很多公众号和新闻,但是感觉总结的不够,回头想想,还是要花精力做好期中的一件事,要读就要精读和精力集中在一点上,多总结,不然时间就会不知道不觉悄然流逝。都说22到30岁,是人生最艰难的几年,什么事都要尝试,但又不能看到事情的结果。在我这个人生的关键点,却发生着很我多我意想不到的事情,不管是工作上还是生活上,或许人生总有一些不期而遇,让我有些惶恐,又有些庆幸。即然该发生的已经发生,我就不应该畏惧,应该坦然面对,虽然可能走的是少有人走的路,但是遇上了就要认真对待。正如老罗所说:“我不在乎输赢,我就是认真”。不管将来发生什么,很感谢老天让我经历这一切。

从此以后做一个自律的人。从彭于宴的人生经历中可以了解,从一个三流明星成长为一线明星,不可谓不励志,他现在收获的一切一切,都源自于他的自律。看到这,感动还是很深的,优秀的人不一定自律,但是自律的人很难不优秀。对于我们这种从来都只能靠自己的人来说,人生只能勤奋和自律。如果人生只有一次让你翻身的机会,我们一定要拼命抓住它。

做另一面的自己

有时候会有一些莫明的忧伤

发表于 2018-03-01 | 分类于 新加坡 |

今天是2018年3月1日,距离上次更新日记已经有6个月之久,曾经有好几次想更新,但是总总借口都没有去做。过年回家感触很大,来了之后又不太想上班,想回家,所以是时候更新下以慰我心。

回顾自己去年下半年,自己的大部分经历都是埋在了工作上,自己平时也坚持锻炼身体,所以身体和工作能力上都有很大的进步,尤其自己被提升为android端leader,管理整个项目时,不仅要自己高质量的完成手头上的需求,还要督促其它同事做好相应的工作,在出了问题时随时去解决问题,保证产品的稳定性。付出还是有回报的,第四季度经过全组的努力,获得了cto的高度表扬,自己也成了公司的super star,劳动楷模。在和同事合作期间,组员工作都能按质量完成,也合作非常愉快,没有什么矛盾。新的一年到来,组员有自己的想法,可能要离开,曾经内心有一些小惶恐,惶恐是不是之前自己的一些行为让他们不爽了;惶恐自己以后还能不能撑起整个组。但是后面想了想,哪个领导会不用经历自己组员的离开呢,只能希望他们有一个更好的前程,有幸跟他们一起共事。怀着积极的心态,不够人了就积极招人,继续做好自己的本职工作,其它的想多了也没用。

2017年据个人统计到的时间大概250个小时,希望新的一年能以更高的效率完成工作,优化项目,提高项目的稳定性,更流畅,然后有更多的时间陪陪家人。

工作方面比较遗憾的是日活还只能维迟在7-8w的水平,远远没有达到我的目标。英语有一些提高,但是仍然没有达到想要的结果,要继续努力。

过年回家还是忙碌的,自己的新房,爸妈,老家,丈人家来回跑,结了婚的人真的是累啊。不过家里人在一起还是非常开心,有说不完的话,恨不得时间可以过的慢一点。

然后奶奶70大寿,给她买个蛋糕,希望她身体健康,我的小弟小妹们还给她做了特别生日礼物,奶奶特别开心。

过年回家收获最大的一件事,就是在奶奶和叔叔们大力支持下的我去找生我的亲妈,为自己的坦然接受感到骄傲,不管上一辈的恩恩怨怨,去看她是我应尽的责任,还好在我可以承担的年纪去认识了她们,感谢让我第一次有了对亲妈的期待和想象,那边的妹妹弟弟也远比我想象的懂事,上天待我不薄,余下的日子会有一个亲哥关注着你们的成长,相信时间会慢慢亲近我们的感情。

做另一面的自己

当身边的人离你而去

发表于 2017-08-28 | 分类于 新加坡 |

今天是2017年8月28号,这一年的情人节,和往常一样,各种秀恩爱,一不小心就要被一波洒狗粮的节奏。越是这种时候,心里总是隐隐约约有一些伤悲。主要是最近两年身边的亲人不知为何总是在我触不及防的时候离我而去。

我太公,王吉彬,生于一个我不知道的年代,打从记事起,他就退休了,不需要工作,还能领工资,在乡下是很多同龄老头老太太羡慕的对象。不论刮风下雨,每天他都要去茶坊里喝茶唠嗑打牌,从不间断,小时候在我读书之前,每天也是跟着他去喝茶,给我的童年增添了不少乐趣,也跟老人有了一种特殊的亲密感。他是一个耳朵特别背的人,耳朵顺风的时候很敏感,不顺风的时候到他耳朵边大声说也不一定能听到,每次他见到陌生人给他示意,他都会先说“我耳朵听不清,不要见怪”,乡里人都清楚他,所以交流也不存在大问题。他是一个相对固执的人,自己认定的事,就不会也不想去改变,正是因为这样,我小时候只要一受到欺负,他就不管不顾的挺身而出,对我的要求只要能做到的他都会答应我。就这样随着时间的推移,他越来越老,我越长越大,我十八岁上了大学开始,回家的时间就特别少,大学每到放假,我太公就通过我弟问我怎么还不回来。现在终于知道为什么后面几年,我工作在上海的时候我太公知道我要回来,经常在熟悉的地方等待着我回来。

我也只能尽量在放假的时候回去看他,别人放假都去旅游,而我是家里有期待的人,我必须回家,还好女朋友没有多少意见,难为他了。工作了几年,我太公身体一直很好,这也是我一直在外面安心工作的基础。可是上天就是这么的无情,直到2015年,有次回家呆了几天走的时候我太公突然对我说“过年回来就见不到太公了”当时我内心一怔,想哭,但是想到我太公对自己这么没信心,就安慰了一下,然后告别了,可是谁能想到这次告别竟然会是永别…..时间发生在那年小年夜的前一个晚上,你走了,走的那么安详,听到那个消息,我简直感觉天都要塌了,为什么会这样,马上就要过年,就能相见了,可是怎么会这样,如果知道会是这样,我就不应该出去工作,我就应该留在身陪着你走完这最后的一程。你的无私奉献成就了今天的我,我如愿走出国门,可是却再也见不到你,我知道是你一直默默的守护着我,你永远是我最敬爱的人。

富哥,2012年刚出来实习的时候在上海认识的,不知怎么的就成为了无话不谈的好朋友,在她面前说什么话,做什么事都不用伪装,因为他也从来不伪装。所以我喜欢跟这样的人相处。从武汉去上海,没什么朋友,都是他一直陪着我,后面我进了二三四五也是他无意推荐,他进了隔壁的TCL,我们周末有时间就会一起去玩,在上海换了几次房子都是我帮他搬,他帮我搬。2016年我们还经常一起泡澡,他也在西安买了房子,准备存点钱就回家安享晚年的,畅想未来。我今年过完年匆匆来了新加坡,都没有跟他来的及道别,本为打算我在这边稳定一点就推荐他来这边工作,这样我们又能在一起玩耍。可是天无眼,他被查出胃出血,住院住着就再也没联系我了,我多么希望这不是真的,有一天你会在微信上给我说你很好。

我姑爷爷前段时间因为癌症离开了我们,他那深刻的笑容印在了我的脑海里。

感觉生命的无常,在生命面前,任何事情都不值一提。随着越来越大,最害怕的事就是亲人的离去,一定珍惜和亲人在一起的时光。

做另一面的自己

2017年目标

发表于 2017-03-16 | 分类于 新加坡 |

忽然有种好想在2017年底在朋友圈说一句“今年收获太多的感觉”,通过接触身边的人,身边的事,感觉岁月还是不能用来蹉跎啊,以后会后悔。经过锻炼这件小事,明白了坚持的意义,每天坚持做一件小事,后面带给你的惊喜不容想像。

在工作的前两年也有感觉,只懂java似乎懂的是有点少,也尝试学习了一下C++开必,但由于工作经历实在太少,android都没有完全吃透的情况下实在是有些费劲,学了很多,学懂的很少,更别说应用。最后的结果是放弃,也是无奈啊。

现在参加正式工作不知不觉已经5年了,发现技能已经不能支撑我的梦想的时候,是时候学一些新的知识了,去年刚好买了mac pro, 多么好的机会学习IOS开发,这次不能再找借口了,这也是让mac物有所值的时候了。

于是2017年制定以下目标:

  • 坚持锻炼身体,一周去1到2次吧,好的身体才能撑起创业的带来的高负荷工作强度,虽然目前还在寻找健身房中。
  • 坚持白斩词学习英语,先四级高频,再六级高频,然后听力,口语。在新加坡这个弹丸之地不会说英语有时候还是挺尴尬的,羡慕身边的同事英语讲的溜,目标是今年可以听懂这里人说英语,能简单的日常交流。
  • 在不耽误平时工作的情况下,利用mac pro 学习IOS开发,掌握swift,有条件和时间掌握下Object-C,花了5年的时间学好android,花5个月的时间学会ios,再开发1,2年时间开发实际的iphone应用。
  • 希望为我们的项目Loops日活能破20-30w竭尽所能,我可是从2345浏览器日活150w跳槽出来,不能超过这个目标,让我在前同事面前抬不起头啊。
  • 今年争取回家两次,虽然花费不小,但是钱算什么呢跟家里老人对我回家的期待相比。
  • 尽量抽出时间陪老婆多逛逛东南亚,跟着我东奔西跑,现在也没有安定,真是难为她了。
做另一面的自己

在新加坡怎么样

发表于 2017-02-16 | 分类于 新加坡 |

2017.2.13号拖着重重的行李,在浦东国际机场看着老婆含泪告别,心中有很多不舍,离行前的前两天也和上海的朋友们依次作了告别。来之前一两个月还是挺兴奋,毕竟有机会出国,而且在国外可以呆一段时间,这也是不错的体验,不是人人都有这样的机会,所以还是来了这边。但是临行前查了下新加坡的消费水平,世界第一,想想自己的工资,相对来说就没这么高了,很害怕自己赚不到钱,反而虚度了时光,而且找了很久的酒店都这么贵,酒店也没找好,更加断定这不是一个普通人能消费的起的地方;想到海关检查,会不会入不了关,被关起来,到了这边要在飞机场过夜等等。想来想去,越发觉得不知道何去何,于是提前一天求助了推荐去这个公司的一个朋友,本来是不想打扰人家的,毕竟之前也不是很熟。但是他一听我要来,热情超出了我的想像,又是匆忙帮我找房子,晚上又要来飞机场接我,一听到这感觉一股暖流涌上心头,真正感觉到出门靠朋友的重要性。于是之前的害怕和恐惧就消失了,想了下之前的消费问题,来这边可以体验不一样的生活,少赚点又有何烦呢。于是就这样第二天2:40飞机起飞了,飞向另外一个国度,新加坡。

在飞机上,一切正常,中途有点饿,叫了份卤肉饭,40块,有点心痛,但想着毕竟出国啊,不能太寒惨了,发现旁边有一个大部分老人去坡国旅游的团,果然新加坡是个旅游的好地方。飞机提前一个小时到达,于是和朋友一边微信一边入关。带着EP的信件以为能进去了,没想被叫着去填了份入关申请表,还被另外一个海关人员一顿问话,说是不是第一次来新加坡等等,旁边有好多其它国家的人,感觉还是挺害怕的。不过没有想像的那么严,东西不检查,可怜了我爷爷奶奶给我备好的杨梅干,李子干了,有引起后悔。还好一切顺利,入完关,取完行李之后,朋友也来接到了我,他带着去坐地铁往住的地方赶,一边介绍着新加坡和我来到这边之后要注意的地方,还陪了我办了一张公交卡,有英语,果然坡国要讲英语,不然处处碰壁。到了住的地方才知道人家都提前把钱给了房东,$750,一笔不小的数目。想想人家真好,这么相信别人,自己也求必能做到。这个朋友如果人家不嫌弃,得交。于是把钱还给人家,还兑换了250块,1000块给人家去存了。后面他就回家了。发现这边是夏天,和家里形成鲜明的反差。我也安心的睡下了。要是没有他,真不知道那一晚上要怎么度过,房子要怎么才能找到。然后去公司又是多么的费劲。只能说好人有好报,以后要像他学习。

身上最重要的就是mac电脑和那3000的现金,签证,签证信件等等啊,于是包一直背着。第二天就买各种日用品了,然后去超市逛了逛,没有预期的消费那么贵,总共买下来不到50,终于验证了不管什么地方都有一千种活法,看你自己的选择,于是又否定之前自己无知的想法。住的问题算是暂时解决了,到了吃的问题,早上下去一看都9点多了,怎么还是这么多人在吃早点,而且一到下面发现什么人都有,印度的,本地的,中国的,马来,美国的,说的话基本都听不懂,于是有点害怕,本身不喜欢在陌生的环境呆着,于是找啊找,发现这边的食物做的让人没胃口啊,都黏糊糊的,于是找了家广东肠粉加一碗稀饭4.5,还蛮贵的,吃肠粉的第一口就想吐了,怎么会有这么难吃的食物,这是加了什么香料,于是再也不敢相信所有名字是中国的饭了,还是忍着吃了几口。于是后面的每餐都找米饭吃,这边米饭竟然也有一般特殊的香味,但是也得吃啊,不然真没什么可以吃的了。上班公司食堂的饭不错,价格也公道。于是慢慢的就算入乡随俗了。上班环境还不错,都是中国人,没有语言障碍,而且刚去配的还是macbookpro,好好干还有股票和奖金拿,老板非常open,有一说一,不会对员工隐藏什么东西,第一次领导的谈话跟我们说的就是在公司最重要的两件事一是钱给的多不多,二是过的开不开心,如果两个都达不到,就可以走了。说的很对,创业公司不容易,还乐于分享给员工,挺感动的,一定要好好干报答公司。



之前家里人还是有点担心我的安全,怕被关在这边,毕竟老家有这样的人,他们害怕的正常的。于是在朋友的帮助下办了电话卡,立马打了电话给家里人,说一路的经过和感受,见了好多没有见过的东西,进的是正规公司没有被贩卖,这样爸爸奶奶就放心了,我也就放心了。

做另一面的自己

Android Hook 技术

发表于 2017-01-17 | 分类于 Android |

hook一事看似神秘,其实并不是那么难,希望各位看官看过本文之后能有所收获。

本次是hook Android的点击事件,也就是OnClickListener,hook的意义在于你能在调用setOnClickListener后做些其他的事,其他一些你想和所有点击事件一起处理的事,那么在这里,我就以埋点为例吧。

1
2
3
4
@Override
public void onClick(View view) {
view.setTag(R.id.hook, "I'm hooking now.....");
}

这是一个普通的点击事件,可是弹出来的结果是Toast了个 I'm hooking now......

分析下源码:

首先来看看android.view.View中的这块代码,mOnClickListener变量静静的在这里(这里还有别的事件哦,比如OnLongClickListener等,大家学完之后可以试着hook下别的),我们需要做的就是移花接木,把自己的花替换掉这个木,mOnClickListener是ListenerInfo这个类的成员变量,那继续看看ListenerInfo在View的哪里被初始化了,因为我们最开始拿到的只有View这一个对象。

没错,找到了,getListenerInfo()干了这件事,我们从这个方法入手先把ListenerInfo拿下,然后再移花接木。

实现

hook的过程就是充分利用java反射机制的过程,几行代码搞定,我们来看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void hook(View view) {
try {
Class clazzView = Class.forName("android.view.View");
Method method = clazzView.getDeclaredMethod("getListenerInfo");
method.setAccessible(true);
Object listenerInfo = method.invoke(view);
Class clazzInfo = Class.forName("android.view.View$ListenerInfo");
Field field = clazzInfo.getDeclaredField("mOnClickListener");
field.set(listenerInfo, new HookListener((View.OnClickListener) field.get(listenerInfo)));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}

由于移花接木有个本质不能忘,那就是尊重原有类型,因此,我们的木也得实现View.OnClickListener接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static class HookListener implements View.OnClickListener {
private View.OnClickListener mOriListener;
public HookListener(View.OnClickListener onClickListener) {
mOriListener = onClickListener;
}
@Override
public void onClick(View view) {
if (mOriListener != null) {
mOriListener.onClick(view);
}
String text = (String)view.getTag(R.id.hook);
Toast.makeText(view.getContext(), text, Toast.LENGTH_LONG).show();
}
}

以上代码就是我们的木,为了看起来更简单,我直接通过构造函数把原来OnClickListener给传过来了,然后在新的HookListener的onClick()里把原来的事件继续完成,并加上自己想猥琐欲为的一些事情。

这只是简单的hook了一个onClick事件,还有很多更复杂的操作需要阅读源码,然后作相应的hook操作。希望对大家有帮助,我也是初学者。

做另一面的自己

Chromium 提供判断低端机方法

发表于 2017-01-11 | 分类于 Chromium |
1
2
3
4
5
6
7
public static boolean isLowEndDevice() {
if(sLowEndDevice == null) {
sLowEndDevice = Boolean.valueOf(detectLowEndDevice());
}
return sLowEndDevice.booleanValue();
}

实现:

1
2
3
4
5
6
7
8
9
10
11
12
private static boolean detectLowEndDevice() {
assert CommandLine.isInitialized();
if(CommandLine.getInstance().hasSwitch("enable-low-end-device-mode")) {
return true;
} else if(CommandLine.getInstance().hasSwitch("disable-low-end-device-mode")) {
return false;
} else {
int ramSizeKB = amountOfPhysicalMemoryKB();
return ramSizeKB > 0 && ramSizeKB / 1024 < 512;
}
}

读取 /proc/meminfo 目录正则匹配出物理内存地址,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
private static int amountOfPhysicalMemoryKB() {
Pattern pattern = Pattern.compile("^MemTotal:\\s+([0-9]+) kB$");
ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
try {
FileReader e = new FileReader("/proc/meminfo");
try {
BufferedReader reader = new BufferedReader(e);
try {
while(true) {
String line = reader.readLine();
if(line == null) {
Log.w("SysUtils", "/proc/meminfo lacks a MemTotal entry?");
break;
}
Matcher m = pattern.matcher(line);
if(m.find()) {
int totalMemoryKB = Integer.parseInt(m.group(1));
if(totalMemoryKB > 1024) {
int var7 = totalMemoryKB;
return var7;
}
Log.w("SysUtils", "Invalid /proc/meminfo total size in kB: " + m.group(1));
break;
}
}
} finally {
reader.close();
}
} finally {
e.close();
}
} catch (Exception var25) {
Log.w("SysUtils", "Cannot get total physical size from /proc/meminfo", var25);
} finally {
StrictMode.setThreadPolicy(oldPolicy);
}
return 0;
}

做另一面的自己

Android Api 23+ 权限请求问题

发表于 2017-01-06 |

如申请 ==PERMISSION_REQUEST_READ_STORAGE==为例。

1.在AndroidManifest申请权限

1
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这样要是在Api 23以下的机器,权限申请工作就算完成了。

2.onCreate 中检查权限是否被赋予,

1
2
3
4
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
startMainActivity();
}

3.如果权限没有被申请,开始申请权限

1
2
3
4
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSION_REQUEST_READ_STORAGE);

这个方法的注释非常详细,可以查看api文档。

4.这个activity实现ActivityCompat.OnRequestPermissionsResultCallback接口,用户点击是否授权会有回调方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
* Callback received when a permissions request has been completed.
*/
@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
String permissionResult = "Request code: " + requestCode + ", Permissions: " + permissions
+ ", Results: " + grantResults;
Log.d(TAG, "onRequestPermissionsResult(): " + permissionResult);
if (requestCode == PERMISSION_REQUEST_READ_STORAGE) {
// Close activity regardless of user's decision (decision picked up in main activity).
startMainActivity();
}
}
12
stareme

stareme

敢问路在何方

16 日志
3 分类
GitHub Weibo
© 2021 stareme
由 Hexo 强力驱动
主题 - NexT.Pisces