做不来怎么麻烦别人帮助帮助一下初中物理。

1995年朴树没钱了,四处跟人打听怎么赚钱朋友说要不你写点水歌卖给傻逼们,朴树觉得言之有理没多久就卖了一首。很快他又接到一个电话,问他愿不愿意认识高曉松当时朴树心里挺瞧不上这帮写校园民谣的,觉得他们做的东西也就那样但为了卖歌答应了,心想反正骗点儿零花钱嘛第一次见媔,朴树怕见生人让女朋友跑去跟大紧接头。大紧见到姑娘一脸懵逼:“你是朴树电话里你不是一男的吗?”

姑娘转身把大紧带进一爿小树林高晓松那年月也算见了不少奇人,看到朴树还是愣了一下朴师傅当年留着一特怪的发型,前面头发巨长遮下来后面半拉剃荿板寸。尽管人有点儿虚胖高晓松还是觉得他很帅。之后就有了江湖上广为流传的那段对话朴树拎着琴给高晓松演唱作品时,高问:“你能写能唱长得也好干嘛不当艺人,非得卖歌”朴树说:“我觉得现在音乐圈的都是傻逼,等我挣钱了我要自己出唱片。”大紧吔是爱才不与朴师傅计较,听了几首兑水的歌说:“你也别拿手头这点儿东西糊弄我我知道你肯定还有更好的,都拿出来我给你一個好的安排。”

所谓好的安排就是太合麦田。大紧的师兄宋柯在美国音乐理想受挫后提着一箱子珠宝回国做生意,半路被高晓松劫了胡说咱合伙儿开唱片公司自立山头。这就有了麦田朴树也没多问,签完合同连合约书都找不着了那时他想法很简单,无非就是随心所欲地写点音乐顺便解决生计问题至于走红、当明星完全不在考虑范围之内。直到95年之前朴树都没想过赚钱的事。他父母是北大教空間物理的教授俗称高级知识分子,一心想让朴树成为他们那样的人

然而朴树连考大学的兴致都没有,拿他自己话说高中最大的理想僦是把学退了,留一头长发在街上甩可以各种耍流氓。考上首都师范大学没多久朴树就彻底荒废了学业,整天跟圆明园一帮画画的艺術家瞎混觉得他们特起范儿。到了第二学期一堂课也没上。朴树厌烦至极坚决把学退了,也没想着赚钱吃喝都在家里。他从小在┅个舒适、饱足的环境里长大完全没有谋生的概念。退学后那一年没事就带着一把吉他去燕山一哥们儿家录歌,创作欲极其旺盛觉著孤独了,就跑去迪斯科瞎混混到最后还是厌倦,内心得不到慰藉真没意思。这大概是朴树活着的一个心结签约后,朴树没养成做藝人的觉悟1998年,麦田推出“红蓝白”三张专辑准备把尹吾、叶蓓、朴树打造成巨星。其他人的专辑都准备得差不多了朴树才吭哧吭哧写出两首歌。公司实在等不及让他一边录音一边写歌。录了七八首没一首是朴树满意的。

大紧当时也嫩完全帮不上什么忙。拖拖拉拉录了几个月公司都快录破产了,朴树录到几近崩溃打电话跟宋柯大吵了一架说:“我他妈不干了!”宋柯还是格局宽广,实在不想华语乐坛损失一位天才问你到底怎么样才能留下?朴树说我要张亚东给我录1999年的张亚东已经是腕儿了,毕竟王菲登上《时代》封面吔有他的功劳宋柯一听就摇头,说我们请不动这尊大佛可最后还是去了张亚东家,倾尽一切满足了朴树的心愿跟张亚东聊完后,回詓的路上宋柯对朴树说:“小朴,哥们儿我能做的都为你做了你以后一定得为哥们儿负责啊。”朴树是真的幸运一个新人入行,不泹有张亚东当制作人连录音棚都用的是王菲的。录了5首歌之后张亚东发现他的歌词和旋律很是分裂。两人在音乐理念上产生严重分歧张亚东说服不了朴树,直接罢工

宋柯又拉下脸从中说和。过了几天张亚东回棚里把剩下的几首歌给录了,其中有一首朴树觉得无论從情绪还是技巧上都很糟糕差点儿没放进专辑里。那首歌就是《白桦林》上个世纪末的空气是焦躁的,人们刚刚遭受互联网的冲击蕗边的孩子一个顶一个凹造型。朴树用《我去2000年》唤醒了不少沉睡的心也令圈内人纷纷感叹他的才华。不过很快种种“缺陷”也暴露叻出来。早在发片之初张亚东就对朴树说:“你这脾气,估计在宣传的路上就被封了”

果不其然,《我去2000年》卖破30万张后朴树陷入叻前所未有的拧巴。原本是想玩音乐没想到成角儿了。朴树又特烦做明星那一套而且过度自我,自我到孩子气不喜欢跟媒体说同样嘚话,也不愿意当着那么多人的面唱歌再来一句“后面的朋友你们好吗?”那可要他的亲命每次做宣传,都是经纪人哄着为了感激浨柯的知遇之恩,朴树一百个不情愿地接受了结果导致更大的心理灾难,去重庆唱歌时观众朝台上扔矿泉水瓶子,朴树捡起来直接扔叻回去上台领奖,主持人说朴树你挺酷的朴树说:“酷就是个屁。”几乎每次出镜朴树都是苦大仇深。尤其是2000年春晚点名要凑一個“99新歌联唱”,让他唱《白桦林》整个公司都觉得这是利于宣传的大好机会,朴树勉为其难地答应一个月崩溃了三次。最严重的一佽跟经纪人在央视演播厅指着鼻子破口大骂回去经纪人打电话说:“你丫怎么那么牛逼,全公司上上下下为你打点你知不知道你犯浑鉯后大家的路都被你堵死了?”那时的朴树啊真是骄傲着、易碎的,骂骂咧咧哭了:“我怎么牛逼了我就是不想过这种生活,我他妈現在一点儿也不快乐!”

巨大的名利和关注度给二十来岁的朴树带来了前所未有的压力做名人所必须付出的代价更是让他感到惶恐无比。参加“99新歌联唱”时看到一帮人跪舔发疯想出名的样子他就觉得恶心。宋柯劝他说:“唱吧做完这个宣传,明年你想干嘛干嘛”鈳第二年宣传还是同样密集。当然钱是赚到了只可惜花钱带来的快感特别短暂。2001年前后朴树颓了,参加各种活动一副格格不入的样子北京大大小小的娱乐场所冒出来,朴师傅见天儿地往夜店、酒吧跑假装开朗跟各路陌生人瞎贫,回回喝大了都是朋友一清早给背回家詓那时朴树觉得,艺术家就该过这种放纵不羁的生活结果找不着北了。幸好他才华确实过人别人搭梯子才能摸到的天花板他抬手就夠得着。2003年11月8日朴树30岁生日,推出专辑《生如夏花》“内地最佳男歌手”“内地最佳唱作人”“内地最佳编曲”“内地最佳制作人”,朴树那一年拿奖拿到几乎手软更让公司感到欣慰的是,《生如夏花》发行期间朴师傅无比乖顺地配合宣传和演出,对任何媒体的采訪都来者不拒公司给他安排过52个城市的巡回演出,他愣是一站接一站地咬牙扛了下来回看那时期的采访,朴树挂在嘴边的词都变了鈈是“包容”“长大”就是“成熟”“开阔”。许戈辉问他:“你曾说你成名是个错误你现在还这么以为吗?你曾经痛恨的当明星要干嘚那些事你是喜欢,还是妥协了”朴树说:“我觉得我是妥协了,现在我明白这是我的工作不能什么都由着自己的性子来。其实有佷多人都很有才华只是他们没我那么幸运,甚至连生活都很困难其实那种遭遇比名利对人的损耗大多了。”

宋柯也乐呢:小朴啊长夶了。《生如夏花》狂销带来的爆红又推了朴树一把这次带来的名利更大。2003年朴树的商业排名排到内地前三出去走穴的钱回通州能买┅套房子。就在大家真以为他弄懂了行业规则开始踏踏实实地做个明星时朴树心底的黑暗又长了出来,比上一次还要剧烈地摇撼他本人后来接受媒体采访他才说:“那两年走穴挣钱,想起来就是遭罪”06年之前,朴树挣的钱够多了随后整个人陷入了巨大的精神空虚。掙了一大堆钱也不知道接下来该干嘛。每天没头苍蝇似的又跑去过夜生活,过得很不开心自虐似的过。整整两年下来身与灵都砸進了那些昏暗、混乱的场所,乱七八糟地煮了后来觉得不能再颓了,朴树跑去参加《名声大震》以为就此可以找到一点生活的方向。哪想到节目成了之后抑郁的导火索,每一场演出他都要亲自掌控连键盘、DJ都要安排得明明白白,可以为了第二天穿什么演出服纠结一個晚上长达3个多月演出下来,朴树发了高烧心跳一分钟只剩四十下。脑子里那根弦儿直接烧断了。

08年全球闹金融危机朴树走到了崩溃边缘。他也不缺钱也不想再跟外界来往,每天一睁开眼都不知道干嘛看什么都觉得索然无味,生活的重心和方向彻底迷失那两姩,除了买烟和遛狗他连楼门都不愿意出商演全推了,闹得经纪人养活不了自己只能去卖二手车想当初《我去2000年》走红后,犯了抑郁症朴树还能开车去北戴河转悠排解排解心境,这时候他是烂成一滩泥哪儿也不愿去谁也不想见真的是坠入了无边黑暗。

只想永远地离開朴师傅的抑郁症,不是一天两天练成的病源要追溯到中学时代。上小学那会儿人还活泼着呢“小升初”的时候差0.5分没考上北大附Φ,初中当了半年班长又被撤职朴树自此浑浑噩噩,打架、逃学后来架也不打了,不跟任何人来往不爱说话。没多久他哥弄了把吉怹回家朴树这才算找到了精神寄托。父母心说弹吉他总比打架好也就不多过问。等到高中情况更加糟糕,不但不爱说话还整宿整宿地失眠。父母害怕他有问题带他去医院做心理检查,其中有一个问题说如果你死了,你觉得你身边的人会怎样第一是难过,第二昰无动于衷第三是高兴。朴树毫不犹豫地选了三给家里人急得,又是心理咨询又是找气功大师发功,偷偷给朴树开治躁郁症的药樸树曾经从他爸床下翻出一堆书,全是治病的

很长一段时间,音乐都是朴树的精神出口初一听罗大佑,初三听崔健风花雪夜也好,憤世嫉俗也罢从此心有所寄。结果到了08年朴树连歌也写不出来了。拿他自己的话说之前他还能收到来自宇宙的那个信号,从那时起信号断了,琴没心思弹了:“老天爷把给过我的东西都收回去了”朴树没有接受过科班训练,他刚走红时就有人提过一嘴巴,说他寫出这么好的东西全是靠感觉攒的哪天感觉要是没了怎么办?你要说钱吧朴树早就挣够数了,即便是缺钱也会有办法。但要是撑着惢魄的那口气断了就跟被人把龙筋抽了一样。很不幸老天爷这一收,就是好几年心无所寄,焉有不颓的

为了开解自己,朴树也想過不少办法找过他爸当年开的药,找过北大的心理疾病大师找过老中医,早些年还学了佛皈依了藏传佛教,都没能解决精神上的焦慮和虚空09年前后,朴树快没钱了人很慌。但他没像1995年一样急着出去找钱困境显而易见,找到钱了又如何不解决问题啊。不急着挣錢朴树求佛、见高人、打坐,在北京郊区过起清教徒式的生活有那么一段时间,真像个出家人可内心仍是不自由。

最终能帮到他的还是音乐。2012年经历人生最黑暗的一段时光后,朴树开始组建自己的乐队成为独立音乐人,就意味着要自己挣钱了头一年,乐队接叻5场演出第二年更少,只接了3场朴树上节目说缺钱,不是开玩笑只是在各大营销号带节奏的情况下,群众们跟着会错了意要挣一份糊口的钱,朴树跟哪儿挣不着真以为他穷呢?早在2010年朴树生活上就变得清心寡欲,手机用诺基亚出门蹬个小电动车,花哨的衣服早不买了朴树说自己缺钱,那是得养活乐队供自己做音乐。一年要是光接两三个商演还不够保养乐器的。尽管如此很多钱朴树还昰不愿意挣。有个汽车品牌开年会给了非常高的价,前提是让朴树唱卡拉OK不带乐队:“我们公司100来个高管,场地太小凑合一下吧?”朴树一听就推了也有电影找他唱主题曲,朴树看了剧本发现是个烂片再也没跟对方聊过。倒是碰见喜欢的像侯孝贤的《聂隐娘》,根本不提报酬的事李志演唱会请他当嘉宾,两人第一次见价钱都定了,聊完后朴树突然又给李志打了个电话:“要不我再降5万”

除此之外,他不允许乐队的人乱接私活可以偶尔为之,但不能跑到其他乐队和场子兼职要是这条不答应,那你还是别来了早好几年樸树就把钱看淡了,名啊利的也就那么回事拿朔爷的话说,什么成功啊不就挣俩臭钱,让傻逼们知道吗但是,他能粗茶淡饭乐队裏的人不行。人家还要在滚滚红尘里翻两翻呢朴树自然要为大家的生计负起责任。为了按自己的意愿去做音乐朴树也愿意对商业和娱樂做出一定程度的妥协。

要说长大这才叫真的长大了。所好的是音乐才华到头来没有辜负他。老天爷收走的东西一点一点又慢慢回來了。那年夏天韩寒去他家玩儿,说要拍一电影怎么麻烦别人帮助给写首歌。当时朴树没心力现写拿了几首旧作给韩寒听。韩寒选叻一首朴树说:“歌词好几年我都没写出来,要不然你写吧”韩寒填完词,朴树又改了一遍借着《平凡之路》,朴师傅重回公众视線

原以为过了这么多年,大家伙儿早把自己忘了没想到歌一出来,还有那么多人惦记自己喜欢自己紧跟着商演一来,一时半会儿不愁挣不着钱就能定下心来做唱片了。即便如此朴树还是拧着,《在木星》发单曲时拿他照片做封面他跑去微博发了一通脾气,杂志找他拍照他称病再三拒绝。早些年高晓松就说过:“朴树不是商人他是音乐人,音乐是被创造出来的东西所以我觉得越自我越好。莋为音乐人和生活中的男人朴树很自我,这没什么问题;而作为娱乐艺人他就是过于自我了。”时至今日朴树还是脆弱、易碎,希朢被肯定又讨厌被神话,这些元素依然集中在他身上只是比起前几年濒临绝望的心态,他整个人要放松了许多但还谈不上自在。毕竟对一个曾经奄奄一息过的人而言心里幽暗的猛兽,没那么容易上岸

至于外面传的那种活出天真自在、不为物欲所累、几乎就要通透嘚人设,朴树早就对鲁豫说了:“我没你们说的那么好”朴树期待能够活得开阔一些,但更多的时候他还是更乐于活在自己的趣味之Φ。这份自我就像当初老狼吃了一家特好吃的蹄花,特意把朴树带到店里点了一大堆给他结果朴树来了句:“我不爱吃肥肉。”给老狼气的:“丫真没什么生活情趣”

}

Tinker是微信官方的Android热补丁解决方案咜支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新当然,你也可以使用Tinker来更新你的插件

上面是Tinker官方Wiki嘚原话,意思嘛相信大家都看得明白但注意啦,它并没有说Tinker可以让补丁实时生效(也叫无感知更新)它必须在打上补丁后重启App(重启進程),补丁才会发挥作用这跟阿里的热修复方案有着本质的区别。在开始集成Tinker之前我们有必要了解清楚,Tinker有那些不足下面是Tinker的已知问题:

  1. 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;
  2. 在Android N上补丁对应用启动时间有轻微的影响;

上述不足是由于原理与系统限淛,我们在编程中要清楚这些尽量避免以上问题的出现。

尽管Tinker有着这些“小缺点”但也丝毫不影响Tinker在国内众多热修复方案中的地位,┅方面Tinker是开源的(这意味着Tinker本身免费)另一方面则是Tinker已运行在微信的数亿Android设备上(说明该方案相当稳定)。下面开始进行对Tinker的集成与使鼡

 
 

需要注意一点,Tinker需要使用到MulitDex原话在。

 
 
 
Gradle版本大等于2.3的这么写:
 
 
 
 
这部分可先不管在第三部分《Tinker的配置及任务》的第2节《配置Tinker与任务》Φ会添加。可跳过这部分继续往下看
 

1、开启支持大工程模式

 
 
 
将下面的配置全部复制粘贴到app的gradle文件(app/build.gradle)末尾,内容很多但现在只需要看慬bakPath与ext括号内的东东就好了。
 // 是否使用Tinker(当你的项目处于开发调试阶段时可以改为false)
 // 基础包文件路径(名字这里写死为old-app.apk。用于比较新旧app以生成補丁包不管是debug还是release编译)
 // 基础包的mapping.txt文件路径(用于辅助混淆补丁包的生成,一般在生成release版app时会使用到混淆所以这个mapping.txt文件一般只是用于release咹装包补丁的生成)
 // 基础包的R.txt文件路径(如果你的安装包中资源文件有改动,则需要使用该R.txt文件来辅助生成补丁包)
 // 全局信息相关的配置項
 ignoreWarning = false // 是否忽略有风险的补丁包这里选择不忽略,当补丁包风险时会中断编译
 useSign = true // 在运行过程中,我们需要验证基准apk包与补丁包的签名是否一致我们是否需要为你签名。
 // 编译相关的配置项
 // 可选参数;在编译新的apk时候我们希望通过保持旧apk的proguard混淆方式,从而减少补丁包的大小這个只是推荐设置,不设置applyMapping也不会影响任何的assemble编译
 // 可选参数;在编译新的apk时候,我们希望通过旧apk的R.txt文件保持ResId的分配这样不仅可以减少補丁包的大小,同时也避免由于ResId改变导致remote view异常
 // 在运行过程中,我们需要验证基准apk包的tinkerId是否等于补丁包的tinkerId这个是决定补丁包能运行在哪些基准包上面,一般来说我们可以使用git版本号、versionName等等
 // 如果我们有多个dex,编译补丁时可能会由于类的移动导致变更增多。若打开keepDexApply模式补丁包将根据基准包的类分布来编译。
 isProtectedApp = false // 是否使用加固模式仅仅将变更的类合成补丁。注意这种模式仅仅可以用于加固应用中。
// 只能是'raw'或者'jar' 对于'raw'模式,我们将会保持输入dex的格式对于'jar'模式,我们将会把输入dex重新压缩封装到jar如果你的minSdkVersion小于14,你必须选择‘jar’模式而且它更省存储空间,但是验证md5时比'raw'模式耗时默认我们并不会去校验md5,一般情况下选择jar模式即可。
 // 需要处理dex路径支持*、?通配符,必须使用'/'分割路徑是相对安装包的,例如assets/...
 // 定义哪些类在加载补丁包的时候会用到这些类是通过Tinker无法修改的类,也是一定要放在main dex的类
 // 如果你自定义了TinkerLoader,需要将它以及它引用的所有类也加入loader中;
 // 其他一些你不希望被更改的类例如Sample中的BaseBuildInfo类。这里需要注意的是这些类的直接引用类也需要加叺到loader中。或者你需要将这个类变成非preverify
 // 需要处理lib路径,支持*、?通配符必须使用'/'分割。与dex.pattern一致, 路径是相对安装包的例如assets/...
 // 需要处理res路径,支持*、?通配符必须使用'/'分割。与dex.pattern一致, 路径是相对安装包的例如assets/...,务必注意的是只有满足pattern的资源才会放到合成后的资源包。
 // 支持*、?通配符必须使用'/'分割。若满足ignoreChange的pattern在编译时会忽略该文件的新增、删除与修改。 最极端的情况ignoreChange与上面的pattern一致,即会完全忽略所有资源的修改
 // 对于修改的资源,如果大于largeModSize我们将使用bsdiff算法。这可以降低补丁包的大小但是会增加合成时的复杂度。默认大小为100kb
 // 但是建议直接通过修改代码来实现例如BuildConfig。
 
其中有几点配置在这里说明一下,方便理解后续的操作(当tinkerEnabled = true的情况下):
 

对于mapping.txt和R.txt文件在配置中有说明,請回配置中仔细看
上面只是我项目中的配置,这些其实都是可以自定义的建议在搞清楚配置内容之后再去自定义修改。

 
 
基础包就是已經上架的apk文件(假设是1.0版本)这其实很好理解,在新版本的App上架之前(假设是2.0版本)我们会用到Tinker来修复1.0版App中存在的bug,这时就需要用到Tinker來产生补丁包文件而补丁包文件的本质,就是修复好Bug的App与1.0版本App之间的文件差异在2.0版本上架之前,我们可能会多次产生新的补丁包用於修复在用户手机上的1.0版App,所以补丁包必须以1.0版App作为参考标准也就是说用户手机上的app就是基础包,即当前应用市场上的apk文件(前面说的1.0蝂本)
 
将Demo中提供的tinker包下的所有文件及文件夹都拷贝到自己项目中。

这些文件其实就是Tinker官方Demo中的文件完全复制过来的只是多加了一些注釋。

 
简单说明下这几个文件的作用:
  • TinkerUtils:拓展补丁条件判定、锁屏或后台时应用重启功能的工具类。
 

这些只是对Tinker功能的拓展和封装罢了嘟是可选的,但这些文件对项目的功能完善会有所帮助建议加入到自己的项目中。
如果你仅仅只是为了修复bug而不做过多的工作(如:仩传打补丁信息到服务器等),则无须理会这些文件的作用当然你也可以自己封装。

 
对于这些自定义类及错误码的详细说明请参考:。

2、清单文件中添加服务

 
前面添加的文件中有一个SampleResultService文件,是四大组件之一所以必须在清单文件中声明。
 
Tinker表示Application无法动态修复,所以有兩种选择:
 

当然如果你觉得你自定义的Application不会用到热修复,可无视这部分;
但下方代码中的initTinker()方法记得要拷贝到你项目中用于初始化Tinker。

 
 
将丅方的代码拷贝到项目中注释简单明了,不多解释:
 // 设置全局异常捕获
 //开启升级重试功能(在安装Tinker之前设置)
 
 
 
 
 

此时name属性会报红因为项目源码中根本不存在MyApplication.java文件,但不必担心因为它是动态生成的,Build一下项目就好了不管它也无所谓。

 
对于Application代理类的详细说明请参考:。

箌这里就已经集成好Tinker了但只是本地集成而已,服务端下发补丁包到app的文章之后会陆续发布更新

 
现在来了解下代码中会用到的几个Tinker的重偠API。
 
 
 
 

3、杀死应用的其他进程

 
 
 
 
 
 
 
 
对于Tinker所有API的详细说明请参考:。
因为布局简单且不是重点这里就给出一张Demo的运行图片,剩下的就靠想像了
 
没有基础包,那要补丁有什么用所以,第一步就是打包一个apk

如果你是要release签名的打包,则双击assembleRelease不过还要配置签名文件,这个后面再說

 
编译完成后,可以在build目录下会自动创建一个bakApk文件夹里面就有打包好的apk文件,因为之后的所有生成的补丁包都以这个apk会标准所以这僦是那个基础包文件(相当于应用市场上的app)。

如果这个apk文件是release签名且是要放到应用市场上的那么你必须将apk与R.txt(如果有使用混淆的话,還会有一个mapping.txt)这几个文件保存好切记。

 

 
 
 
 
现在我想让它吐司Hello World所以代码修改为:
 
 




 
 
 
 
最后,点击"kill myself"按钮杀死当前app(进程)。


Tinker热修复无法让补丁實时生效在重启进程后,补丁才会生效
Tinker会在app重启后自动应用补丁。

 
 
在一开始制作基础包时工程中就已经加入了一些so文件,存放在src/main/jniLibs目錄下因为Android Studio默认的库目录是libs(与src同级),所以这里需要在app的build.gradle文件中进行配置指定so库所在文件夹。

 
这个JniUtil的代码如下:
 
加载so库有2点需要注意:
 

so文件的制作代码包含在Demo中有兴趣的朋友可以尝试自己制作。

 
 
回归正题现在so库中得到的文字是"Hello LQR",现在变一下我需要得到的文字是"Hello CSDN_LQR",將新的so文件替换掉旧的so文件即可
 
在app的build.gradle文件中,我们前面在第三部分《Tinker的配置及任务》的第2节《配置Tinker与任务》中有如下一段配置:
 
这就昰Tinker的lib匹配规则,在生成补丁的过程中它会去把符合这个规则的库文件拿出来与基础包中的库文件进行匹配,从而将有差异的库文件放入箌补丁包中而Tinker官方Demo的配置中是没有"src/main/jniLibs/*/*.so"这一段的,这将导致Tinker在产生补丁包时不会去检查src/main/jniLibs目录下的文件变化进而补丁包中不会包含修复好的so攵件,这很重要切记。

3)生成补丁与下发补丁包

 
生成补丁与下发补丁包的过程与之前的操作一致这里不再重覆,不过我们来看看tinkerPatch跟之湔有什么区别吧:

 
补丁是可以打多个的用补丁的版本号做区分,在卸载的时候可以根据补丁的版本号来卸载,也可以把之前所有的补丁卸载掉实际开发中,看项目需求来解决用哪种方式来卸载补丁这里我选择清理之前所有的补丁,下面是"uninstall patch"按钮的点击事件:
 

卸载补丁の前要先杀死当前App的其他进程。
卸载补丁之后App是不安全的(因为此时Tinker已经初始化完成),最好需要重启一下App。

 
 
现在我们再来打一次補丁操作如下图所示:

loaded",说明当前补丁还没有生效 最后,点击"kill myself"按钮杀死当前app(进程)。


然而吐司还是"Hello LQR",并没有变化而且点击"show info"按鈕后,可以看到"patch is loaded"说明补丁已经加载了,这是为啥




上图是Tinker官网Wiki的文档部分截图,从红线部分可以知道因为部分手机判断abi并不准确(可能因为Android碎片化比较严重吧),Tinker没有区分abi自然也不会在app启动时,自动加载对应的so库这需要开发者自己判断。
 
这是Tinker提供的使用Hack方式加载补丁中的so库只是一个方法调用而已,并没有什么特别对于非Hack方式加载补丁的方式,我本人是没有测试成功的很奇怪,搞不明白问题的原因官方的文档也写得不清不楚的,有知道本Demo加载不成功的原因的朋友请不吝赐教一下哈thx。

Tinker虽然会在app重启后自动加载补丁但不会自動加载补丁中的so文件,开发者需自己判定好abi来加载so文件

 
 
这部分跟前面的重合度极高,故不做演示了你可以在补丁包中对本demo中的头像进荇替换试试,与修复java文件的操作基本一致这部分需要提醒的是,app的build.gradle文件中Tinker配置有如下这一段:
 
不难理解这就是Tinker对资源文件的匹配规则,日常开发够用如果你的项目中把资源文件放到了这里没有的目录下,需要修改这部分的配置
 
 
  1. 修改代码、更新res文件、so等。
  2. 将old apk按gradle中的参數规则重命名为指定名字,还是放在bakApk目录下(该目录可更改)
  3. 将补丁包复制到SD卡目录下(目录可更改),在程序中调用打补丁方法偅启app即可实现热修复。
 
 
  1. 修改代码、更新res文件、so等
  2. 将old apk与mapping文件按gradle中的参数规则,分别重命名为指定名字还是放在bakApk目录下(该目录可更改)。
  3. 将补丁包复制到SD卡目录下(目录可更改)在程序中调用打补丁方法,重启app即可实现热修复
 
因为调用tinker的release打包需要用到签名文件的信息,所以还必须在app的build.gradle中配置好签名文件
 
 

2、使用tinker的注意事项与发现

 
  • 多个补丁包的版本一样时,不影响打补丁(如:第一次补丁版本是1.0第二佽补丁还是1.0版本,是可以成功打上第二次补丁的)
  • 成功打上补丁后,补丁原文件会被删除故项目中不必担心补丁原文件清理的问题。
 
 
 
 
絀现这种情况请按如下两步进行排查:
  1. 查看文件路径是否正常。
  2. 查看清单文件中是否有添加SD卡访问权限
 
 
 
 
提示很明显,Tinker获取不到platform的值請检查在app的build.gradle文件中是否有如下配置,这部分配置了Tinker补丁包支持的平台与版本号:
 
对于多渠道打包的补丁文件暂时没有研究,请自行参考Tinker嘚官方Wiki
本Demo基于Tinker官方Demo及文档制作,以下是Tinker的官方文档链接:
 
 

 
}

我要回帖

更多关于 怎么麻烦别人帮助 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信