PiUoS8&gc{U!xDQfiF4EQv4YdwFn1d2jtg
z)8M|hhufxuf*X=9it~n&zNwSVE
z&Jbj?h~yASgB@|&io*PrhO&k!jBvDsFp7rF`V&s-n`-{knI;I`Lk--}m
zk+(_Bno`PhF?;M=*?F^tIDJ{YfyBr-QmuVBHv0#>F6YL;?H~oCX$_reijC1zclvHd
zT$;(c`{yXTtD0xDE|cSa^9d!;URRQ6#j=&Ra@hX*i^mE29lpKEF0fbAZWeco@(!J)
z%zpA~7PXZ95S8m0rY1GLM|`p?ZFW;prq@SIK^+2sot1$AzMlF26lIavIqLaU_c%GV
znU1f+N`}yh3JESVu%(V!^6A0oWFGZKq-y}{@l(dIx_sSCSZIE&vYckbTr9t2_MV+=
z0()86wE##?>;W6O52>bFexKZZ?M%9`Q}8Wm1zm1dobkBrBrChNQGX|`k(OXK_6ch9
z!=3s)x|HEFa|9-Ta?OUgg;@<2i6!a|AuAHEs0I()<=u74{8?UR2V40Z8`A??#{yCM
zDP0-&4;2*bE9r@GojVd^|NZ7WQ6#raKNW-nZq}^T`KLBQ=vDIw_x)3>bCD&d1mBJ;
zilf-nbe(Jati^vaCw{*e0$`7v2?(Gel$drD`%WR%@WZ8Q7AC3JufPgSt4jhpx{
zynJqvx9G@Nzr8a_yLGb|Hj7~08cG7mn4^HTYl(kR_#d0=E|I#~_hY3+z53EX5$KDP
zjYEW+fjN|moK-ufHc%b}PeIDSoHsVZ-fO|;6vb5F8lhY#D5LBK<5Mlys~-dbBerZU
zs7})RKFG!&9_z%L9UwC6jGAN^%UWnDD$n
zB>>Z|D~LsagE`8b+C
ziF2LFZ}s9$CN5fO?NM8E+K;^-RuXAP>`gc>Qk<6fuS83r8x!{J(Kr3Rstc^ByN!FZ
z@%F+fkO$^50odhe}>8_FYyHLM0TxD~LHuabQUD+VgDb
z1x>%|MAX%@edW2v;DeSxbUAGHTv{|q8ujxlg%h*KYYbms+w5txE_(_2>1GL9q3xKH
z8+HT#=D8zDMI8c}*!6y-ED7kA<^qg
zg;$^`F?0i6+_cdDyV?{SpYTrtU)I|u96e?})*~Amk*Wb=mF2ljbatga-OVn%wL`LI
z{HDoc0>t(=7UkI;I|*YKv+|zB#;q?g`ZmW@M9w9s;-h5*P;QLZk1W?5FQm?_%UVOS
zZJ3BJiwDc*I}f4+3*52}(B~FVT?bGJGJ;#b)69@=e~U&sK(DX4r8p*Pn3~sc&YUTV
zin#kc;^7wM{jTIEHfh*aF@Z*hNW%LWIK%+kNF8Rg(ZM-Hk7Ae!^teK_e(rHAW=J@~
zkM?uJETs++zhm|IG-S*#kufv3sVgLJZ}My7J#Uq4z`FF&%r}bOU#;)FKh98UO2?zC
zVJ#k3$=f-@N7x(lv#KNWi11U)6BM)HMnSF$m$9wI=~MToDrz~5OoQ*OYL!?t$2YvB
zh35;1uh6ed!DdV4{i$s!q+zSXmk9Z@n!e-=F%>5ae>w2(UlL0|6l33)CTh;a7z
zh_{l+W5}sb{dOp#^aRh%f|E@066TIxLC$+f&-KC6Nv%^)k4lV^ESbM1;eW3sx9sWau)emjR1O&F!6lO}v(b*XxbHSZN6tgf%&
z>!k>pH@qDWDv!{g2Q5Tms^Rutkj<-hgq}XAjRkXR`C2bNrS5jc(NkQrMnZj|)HEi5
zv+*o3%z5LX=$|F&v=Os6-WjCPoE&n0Jev(g&qw=nTITvfo)}|COe-2-xLa5APT1Wc
zxGj?fyzZrQbMIh1OD0V?mK*->e`Gn_#k}fZe9*&f`mjmShT!0``SsdJg&uKmQAL*=
z$p2w%{SM#t5vU~EzL<3E`c>2IEz5a(_w;qibFvJFBFo{&rf!zq^8Oa4h{lfS9=}3s=8UL
zZPHWhWfDK&NVT)4ls*E2U@vL`E*fNoILaLs1$>+=f26AdxV3+5*Dc}yVRS0yz2;@CHH;z-;X-bSQIcvBaxse1<3Aw2Tg(2R+$mJlRP%L;4-oUY$suy>CH3q3wNr?Pq?|bF-KPsa`jc
zetzD>4>b1Ihx+4I8U?2crn=Ohf4EuyP;FTG18)5{^I`>i@(79c)w$|kV{IM>chJ17)3)w4!XcIGWv3z17`Md<^2ggoVbj!5izo}Q
zz2vE)-cBjtLx%5VpMf;4pTwuT4YjwW6o63ff15W2(;Mvi-QAX`UU?aJZhRyY@oEcc?G1)-6xX
z#IYQraM`;rDZx*&lv4B5Ml__ai0x0UwK|LM85DDZoKbeIy|5ZydWxrq>)zO494bpK
zH)07VCQRW;l5^h@Y@3JJ%1FFk;ZhUXfY)P{(!iLon?c_$S2jmqx`KwYw-BUT5`Qm)
z;wkhuC|q7^1ZETqb9Z;|n9z$j>-8!)t92$js5==SGSBKsNB71pg>N(VAK6}Wa;-JZ
z(FxfueXx>rhWnIYEfI3BWZ0I&OPT_qB0p8o6ejpAJYoq#S}I5ct#yU(q^p!CuO+qTwOu<|HNr)FOD6EHeBnq
z(eKD5M5yPU1{4lW+*hxbDv^gM9*%9tkhqHcBB#=_vrl$(cfa->uI2kHb8)ziO>^pZ
z{BvDKrk!p20jG;|I*4uTNxksv2rko;$>R&(>G*_71anH9_Odgf_IgpH*pJi~R|^2w
ziaYlyt)QX=0bJ|Xe~@;pZ({H_GxD1F$U
z#JqZ6sahgk=tfavQ7GvY@S&wJVm*F=Lm?fm+gu(M0(fmW!K+2XryDdUs;SzTmOkLE
zP4v%kQsN#!QIAJi)6?_}^c{e)h4@DSo3)cq-?Lz{C{p!P1ZZU0_z$Y~1@{(XWCrTbcp=&mvN%+SDladu=3ImS(WOvg>u+kbVCuYvxn%W%6mUDx
zc`Q>4Nfbd@U$ziLSpzZkOFDmuc#k-YZ0pYP`bW=Y9jWKoKO?InaXj-gUF^S`Uuew{
z?J`AIIEA)QCG@F=&JS3ji7f99JljvYgxpvJx`DqwN5QE60U-p**;KnTX^NzNU?Bc3
z)ik$Y%FhdKmCZ39+9nb$syx1J-mmG0qdJX(G}fU7R%->K?81MiCv*=KVN0xOmuHkg~m3
zu+Vw^ccsVT&?LTgamY+r3vNmMhmvGlN4Bt3;qxr+tVY06Lm1bPu+J3ZIty~YIYD+k
zp;Et~hP1jMKxwxvnCxGjAW%vylQ&OjGHi}!X?Tre%B*rUt0Z_hn=jvtWmzj$y`xT~iC?7qY0RNie9X0qln9BMxxskO!c34ick
zy0&?=l4N|RG;;e4IN@Y6uW&l*Xb2^K;gf*J8a$Y6#Q*p&=s=Oj+~f|g?iGqQLZ1dJLr-r{)~wku-?zVdcq
zm_(yV2m;Esq_6xs5zt;^m=)mS|5tyOHE*H6E-UUTJ>(nBLj$KXQJ5agpmXRnPhFm~
zFwV+fEd84H$!=^MQ^Nf?Tf9`73_-(c~E$mp^roahOu5rRNiSh
z&@o5=E;2B+4_4d!N3fTC2}8L#%Kl%o6$-A#r|_zw>o*S$!=UXIqaFMQO1T-(gV#UR
zdZpBTS-~BnpJW3NCeumYz0-MJFVmIWc_QH&2!2_e*LturT`;}bUBB$1`>^$de>*xm
zyLvfJo!7W=e@doXd-^2qcc#ze^Amoitc|MglcVgV)HoGemrkKD5!${>vjFL*;U@jrEU6BePF*Laun0R@?K;7Vvl__!d^q4=3V|x@sm|k
zf1y|J;;cf)3Kunxg&QR6rjh`kzEay**tcBuwl>ALY#*#fWX*ivYTJE?eUn%uRH!0%
zn%DMI=3&2O{=B=2ls2zmJ5Oi_7Sf8x@GX1qk0@c<-(0#Id4DOexBS+<&E_LE?a2Bv
zRKkNyZ1NzF{7J7m9h{)bJU_Mx#W>dw#Mmka+Up|A1yTE^JI>{$;Wy`)wm!447#H_cnx$B?4{bkkQsZwPe8m=Eb4<*mL|{SLTzZ<
zc&nx9!%z3nX*K2aV5x)el|HQ&Jr7wPleso$U&~uUTry=2Ih)x(c
zuFeq8BwAo!$?{TRQu6Z1Ijc2;H$eYf=zxvH=9L_sVo6XWmWFH=kzJ2y
z7;oOZx8Y(pKTyF5xghn#>y{=C3Hnw1Qm3Y`Y{G}vmL4CJ)cuJxEE8|{Co(;}etyhH
z5>7*O0((U>a-aE86eeDX%9=;bx1iiorj#7zyjFMbH27PZ>3!h
z|9V{d^%oWMGWI;dMKV5GP@MH>wtA7bUD&iYxCt$>mU3R{1|n#Eu-W@&yN@=w6~n}&
z2WLxOwKNqK011Sru)(X?Ybx-n`Sa&O%*B5&O8Y|a7<5;#Wif@EJT%w;fwOq13?tTX
z^<#E8WJRY8Dqb=lN4h%4{o=D%t)eL-_P_Npd>5x*2~g-U!tT1-e^?jb(j;~uda^xP
zwlZ|t4ar}_4LJ`;iq$l9&Hwh}VfJfS*?kSgwnS-^5&A8U+ev!pVqoafp2r&6+S)|X
zp##3pYh~^272n&9*(IAA2L=UA@d|`~E_mVRCBS(D_S=dd9{0REI!c4FyL1+IKd!vz
z-B!lvYTOGziZ|~4eDdG%?;QMF1OL{*zcujxq=7fsZRGi0=H+?Iv`yZ(DgZMRYh$$G
Ht*8G1pCP%t
literal 11474
zcmeHtcTkhv)-P5(@&YePQCg1jDoVA`q$((}P^5Qw0i^{h9&)#c4YyEy}t-T*y
zcK}N7SKconAt8O`@`X|8E7qm8dha(H+F|!u)iQ7
z(O4)Y4BWHb{s-i;SFD7DOwVuGK?K*{kdV*`y>jt_Ymz@_Qu4|8YU@_aEpF@F@lD1>
zd!BN>a(jP4&K_;WykieK|85U*G*HfW3Vv`%TkD@e+|G5nl=8L66GngP7&skix|t9X
znpnBDk{l8`>8JQ-;6cD}>PT{VMjc_YoRQka;C}jv22Lt=_CLXThF+Zv>6G|xrt3X3
zwBUqGMw`+iEI{9G`AKXzxFE)LGC=hXwX`&~?Ir?KPaS`r1(LFYk_;Q7;f7jUKhx;P
zVf22B8Y^&!5u3cqax+bLFWDhh>-rcR8*QE-Ku)f*&Q1%0IDBm%P8%VzIdNnVZIS
z3A?szPu?mMa5j~E+UZvVfFp!`QP*E|U0~bB@Ar?41P}mQLE5!PFH(L
zW5v`H;gM60%iSn7UCQjZ%YX;Q(RFb8gc{Gz*?q@`=~
z7(;~XTRX86?{em3F;gdr?y!fjvc5a%&C8-huW7@QP2-g2s~s4poYG+{(O*_u4xkRs
zUIb&By40iZXF9G7ZlzzP288G1{JAw-$Gg0uXi{;_-i%GQKtxgIc6=RJpFC_9ym*~F
zc*40WwnWc_Iv~pc_gx6>J(y~aZ9#9qTs9`Rykg!hH8Ko@n-I_jf~%C$v_9&@dpL*xgzyj!de?
z<8o(Wukq`*++n$%?m&ST>6*T$NRQ@P(ddm+ns?86oCO!Yo1{RNPrIAMF_ONqV^o>H
z2IsGICCvs{DB^nms9NeWLk8aFLUJOd#<5xZXU`@-)|ToZAsUW7L+@|CH@DeQ({9gn)^9WZ!lJWU*s!
zSCDa=r?kbK-3(x2t_Z)`<3#z+MCNr&Oxk)FWP5^d61e$DNbd!hkCOL_B$r72oUDTB
z>}!_voGw=K;V55o8}_&%Si_FFm3WH$&3bPJ+0J^q2TTrIu4G}wu@*?K##!tPeAuee
zfR`RQaVga2BQTt-nR7U6FnA1tk!7Xbc;n=>gmlr;cp0$XIMrGsINPJ(-ahfzefgn+
z%zUU}uBgz^KfaMHh-*sN%xJ*QjTM72;Itlq%wgQ?GnZ2h{=+I9jp>g9L8CMXd<61$z`u+L!FXzkA&;ZhCWVBx{|y0nF&3Y3SIyLkUf
z$kO#d}bkbNj#n@n1BCGMF&BkQPdsZi$<@q}~o}h#UQzkq8T{T7iakd{-?TLnFgC
z&QiXY6smpG_fa)@r(9sxyYZckCu~{Cvi;=V
zJqG?|3saw{mIGgmRB;f;-aP(;_BBC-!q8!X1iyx)Va61{O;l|hP-*Gg#iejtI$P4r
zji#zDpKQwUXMVVs7RO@xhi0Jlxsf7z!rJGI$WE$-T~BCq?p&(p2sPzP@x2mbv&66}
zY4yJCJtlmW_W#*WGuIJsP1O-oFQW3b6&yv^>?U14_HA#k?p?3~sa~x&xLr1#;
z7Bq7O6ED&XIVk>t)D(AD(1@}duPDVu#>e}kAS@%HfRsccQx;vuXJzTlv!j5G#V{p=
zU#u6%WVHP|qZ#`a=ZxQ5L3p?dYsre5fup><82X9bGgfO5>Bf{wYc?!YS#O9~=AUFV
zJ1`^Y{MJ*swk*@IdjRMiPoR$j18S1P9UG9>HotlI_}CxJy*H8*MD!Kc+GsP!KD%ht
z4^fuRt=q`iSoHLYHqUw@y-r3pjOSrlo
zW=-MIqOb*Hd-3ei4BH*L(rWXLVz5_FV|q5){+^V*qoHJHvlL>K@RqC(
zyGlKQdal#lcg_Qw8p6ymTYlsyS}PM6$8HW_>`B``paE;S&~f+A__ddphZe56E7A<_
zF7rXI3Uh+yr~X$yd%Jg-BLJwaKd<%-=Yw54OsA{#RXa);l_NDG{+`MjDvEVv1&j@<
z-D73(=eBcy%&FP<>@or&b9Q%0r$c
zGp&fE#Tb%ob@HdMbV}>6GPmuRKZ?u=uk|$vLmvuZzkju2m`8CnsOaR2j;o)@@tFgw
zo}%$K$n(8GYx@yP1;>i2+`WCl&5#dtxxegFuckCnhNsM4Cz$5H9VoPtzoyvePHvMQ
zGYtvX5gMBAVxQ+WN$h10{-2)TKe+32#D5tS_wN!
z>63S~Xw){E(NwQXgKb#KE_4--`gsHt&BKH#mn!@F_kDCE87YmJpS$b%ydljZ2;qiF
zds20?Y<3%m;|49`^ILScy232X{GX`Y!e*^*4j44Ai08IE4k>)ZixyaXb-_P@Xw*Um
ze(Id18R?H9E8`dI#t47`sBgu=SS96^g6tBS2CO5~Dw6T_yj@Fy&HhW-fbKu^4#xhP
z#IX+<7E^0dic7AnBFUQm&Zv&7_*6DcO?XE6F=CegDzd%NaO14aAK|Mnmu@c{el@sh
z@hghe_`}Sd<|8AF@#MmVCX;=H_;VJP)28CDfI@GZF&b>jv;p_Z$rCBJxvBg-JW3N4
zF!{)E-{+ex`k1agmq~43^y`l}T})U|ar~LmL7Wj8G#qASG$jdfsn_1+Z6-wcOtF`t
z)O*eZM|RivS_@_@A)K)+GQwU9xVG914zROd^+HE3@YbjblNAg{k&Jj1A>GEnu80_7
z!xNZ^1kOlf68hvyg_(CFLuawINMZd89UR*^kP_T35QQ+u`ZtVCuQCFAO#Q1(M=F1w
zS+ZFHG&xXH?sRSP@8neHwB-#Kg6jip1CR^eqE{YZc#7BG(WBFDJUnR{Eh<8Z8;E{_
z!CZePCD^Zo8tlzv#dRhL`#IS53JgPOs*C35C_JrBCC^M@MV4t+*`x^u5jmgI2A#}A
zQIqWv7Lz5fT|_CNYpn>j2N!`@sgHwwBSzLn7ey0D9B4CS$GgOR%$*Nq{vTxcn-o=%
z-Ou<@V57rA>$y8p1N0ZK3fS(f6cu-IEo_do3f!1RpT`n7hnHwnMqMF+kDp0d@{pef
z&y38&LaRkaBX%CtJ)d=F{qg2n{Pr)V%GZTo$rN~&YvIoEJKf{tVH9Bw`c6IO{0>G1
z-uM375$~8df3@VQTeNZ%wIZ52U2V07CKRDLV>`4|3QWTKiA80H39yT?wiqb?Y!?T0
z5O~%*brU>W)_>@HS?fWRC5U*z&!!KzF(qu?OKeEcRb$?GsW4)4QYMjNumIJz+KT*^kR|x}SHZrx@gvo;
zYG>+ZORR8HFGEGqKkEkW=mA?38Q5wM|GXZr
zzAdO(y#KV#x_k7s^pe!(mImhd^fbi5l=npD0=)_`dFkGi#4Gaj<((TLvsdwPkWZOK
zV%G=v3Z@WFIb7k4B)9P?zinWLE*P(sKw17(qg_Iaq7_K?{CbpIU|%CU`Ba9GPV3I9U8%Mh
zj71qLd}!Lr5Txa^QUmZ=>0Kg~ozk1P0cuf<5;jaFK8?S~x(3&kbz8wZPMO@=?_h^c
z(L1v7ziwq|6?)}c;e^`Tn%cV8V|WSFsp%?YE935co8qJBU>!9i!5YH#;CSV
zkV|qrpH`-u2EhxfJ;c%Zi40}Qneh{-km9~zUTD>0G8gZ5^CGsw@n$^0bR&wr{#sd2
z&DWqyNv_#J-cc5ut5*ZrT(9OsB~F2274`b8B`eK|J=dd=s`rL!(v;m;CQ+s*Lhgf#
z16&it+X+hdXcqsb#ZmHhq?I;DeS}PRoNTS@{AQ&3DVKA<)TU;lS)7{{O
zTG}tq1rvzw)(d61{EXyFEiU*VXw*G2l0`0=nw0{o%fBMefZX}5hA&{RTgL60y+!FW
zeNZhNp(V}eWc7P;;nNYTT)}9l8p@o~ib-&nE-9>zyS!Rj1v{{#vLLG|fgIpDs0r9y
z<^JXSF0ypH(D30x))ckCUpc}5qFojh7c?5&9Zo33LZZgb
zQj##@Dp@sDfLRL#Qz{nw>QLC<%Z7q&`;NSqlH?qgq~-1EUoi3pp7K5cPT9=BOE=W?
zvC6yMa6|oaGWLP1uSUHDVXk_qr7h!>-V^!-&cYHacfHh!f2cR^n%>tVO%xxIi9s2n
zs^!pbL0|NI?crA0hNqyS{B^ozXX>{}+;cLyf0XbKrBkV0P(0>Y7yYUwH1&AG;%p;;
z|KUcEu$?)QOazJEv`2zItKoQQE4L
z$qfL)FX{@y=>t89yqyLdf*WNV4SKardbvZ;C+qXOV#+-|_z>3_-Wt={PJjZy&qKrV
zuj)%&gm@E<=kKR=x2$H$$?N{|39dWP)B-hSlid1{As_c3Szk4gtRcPbRdKs`6{Zfi
zZ@|Te|JX;E?B8d>+!->WnvXYd9#eK=bzg8d-+cDv{b1oYfLTx!dM5ahk6CyWxH5;e
z+;z|RMN%Bi)yd_e{mIqQq!mNU)l%QXLqetmsDo8HF!4z73-qs=NBN3#AgX8m8E3?D
z)aO8!}AB
zYU>5rk60bNz){t+S5QH>ziz_Lkv_2Ib&tRTbS;%{=1V<;#>%5SeU{6yA*~rf<8K~0
z=(wl)%B$FaG-#^jR2kpn$2lA^`I(&n@-4>gFi?$sMg|iu?S{YKb?C?jC&W^VR(-3L
z!}lb$Ycwpr`W)w2L*}+c&6sx@gNh6r-fsPj5qMt*KOa}tlP$9iI|lIU1KJ$1ja}06
zuL--djRE&t_>YS@Q2ymYkT~GY#G56+0>qdLh5;vbdH97^iq2OB@UYq7`Hx+ny?I>eq&qp%ij|Okkh3nHJL23?~Pvg45-i;%3UIp`D2gW_ns7UgNFm2&VEH6Vt-%8nl=Dj<5XhL1~
zr6M8zYd2HWkh~n)cmnMdFzB&`;WrrPJPP<$W8Iv;MF4ZNJ?xliy;bWWEDieKreYWE
z^7I5dSvGDR5`}e$gxlV1AqZOyMbM<(^|AO;x(aKlEMy2!n6IQ+4Uade*)XDaD=VF9
zpVjeYqYs!hDn1Ktn}eU&_JF=i)5o@!Ez}=9m~Kc~t7|-jYB`osRV6~?v^A_TO=mm-
z3c4;{k_ReN7C7=zxhvYD?P8X%p?9N&9Lmi6ad5+1M)cBvpUA<-tLJvG#@`&qIrNt>
z9@U%=MbPRKJF4LP>g#<~i!S&DG$1^ut}b}Hb}%ip-kL;)uqwStE`@#Iy>`Y^V}fQB
z;f%jpJ_{0>BFG5HGSvG{dk%-Nl%A~)yily)UN5QcnHD`MesMnKYdYWfrTUacz61FD
zwyhDw=Yq%y0QKGWf;h7oO+dbr6D_&iwWq4?^-j5U)>3xju(mG@5XBrzp|CVBWg9GL
z`B~~z!=#Do>g1bDp%_;CKY
z@``IjM3rvkvgP*Lo;Ayr5MMFT#D4TZ*ppFb50GwvT>*pZa>(GocDZnM1A2k;cE2z4
za%XIpY9NC2x|32mn}Dy+U2&-CQ@K%ArY-doA$r}UJE$L-Z|r;6yXs>1vu@Ul&inhs^0H08+;qG<8s!2Q)+a5Gw9lmQ4?W?pf7*B
z{m)|)q$1d8yM|;
zm*@>b>{GgJzAbV8UD=MOuU0))*uSUDD5?~?v^i%KKK7Tyv*8~fi#UV&ggp1!!x2Ca
z`{%{22T(zcVJ_8njj~q4&-CPVKb6g4GoxESE=$axhbB?;)h$d*UnRtmpLjjjW;&nK
z%mV=4r>u9bOZ=T#e^15GhBIG(viS^=Id&c0h0+thSh!5acbg6sK
z_ke=`?Pdp7tk4DA#AMT1wfj<&SHX&^B4$?1hZR|3-h-_{Nx1FT-YZ3s!G6PYHSpDv6N-v7r^`ee1ZVUT^MvOopcJL|Ol#fU{9
z;Opf2w_wpagQ1=(T-uj!z4pV!@#~Q+)u2MlHP7Cejp;(%E?LtLYc#MGn?WF~(qbLk
zXD2|Myt5;i*kKFf*TxjI*zTp>C1#g`zH>aS{GX1>APhp?#odMJx&Uax_;bh~OK3jFw#D
zw}_*G!BD|k3kcmloG=;h;S
z8LeANKT=XH?JWmGa#*_u5WaI*`@m`>ld(tie@|aW+qB7=NLv|FIx;%XLWGkRpZb7X
zHetfx_Md#VhHtKZ7rs1c?20>&*z;q=3O91x5j#TI=pHs@BeO@Z=@V3+`lp1KrHeN?
zPko{vgijBsw_B;k-0u_)XvYX@%3&$yCu;1=%}vE+0#>F(6|=phX;^XJ|}(e
zNy-+S3g3_GJ#g(yww%TyJ(bJ(6LqY_cTC3Q*LfAoG`t1xSI^qULC4;GY_X*J+e+aN
z&C`?P<1zUa77dA9dcq4w-2kX4-e*32i>kMJ@>TU?1pfnQrr4u^HjZ(ETZqn}#FPJ4
z79zb22_Jv6@1%}kvDvXV90tg6>!~6s`9z-fiEf=a8r^C91ESy
z;PwgD?H#)!X&h{`3b^BRw8x{eQ{m3YlBn(9xdsP_PN3l7udAPV%d#VA50#kKxcW@c
zojr$;eq6o~)4P13%u3p=GoCazxAnCn2?1x4rjk1vjT
z`+n~l@9aqL(YEfhH$MF76FX$cLA7%WAW?)K8LXJkCSJaJ$2+{LcoAGvuE-qI&V=%L
zjf58v>u(iw&-(RPR#VQa?l|TTd-G+>2HmJdD+A#dhnHc
zYEQ=<2s7X{qRv}D;&D-NmIVIRLO5qDz@mYFHOONwn0_8F@y6!=AP1TJA4TZ__%~f$
z^y7BVJ~Q+0lGiyB=gI9;(4@KY#7N=B(r5vy^o(}wF<)tE>9v`XfPNK8MhaUubvoa8
zv4t8Sd0U3(Bd5_J2e-}738_`{GrZ}(jo}94h?OIiMmMHgv4`)h=x4X8~@Orz^L;*c2`W6Hbc!hL15y
z;mvQDO>qfZmJ)F<6F;%P?3%U|8T=P&u+X$Gl?Uol^c~%0VG2QL_&Ie(r?&Y`cIm+d>@>?+>HAV!2l$&Z>EdLwxfijK@9JtM
zEVij2*y1`MPg$X{O`NH+xb1^^B=xlUBkjWFLC)iA`YqS=+dru%eZP}kYHpT>_e&`Y|cat8B#Hu
zbCrw&GjWp299%=K<>rH9Pv36e;-E!DfTBh^*P6KLTLSFzfHrNvHu7&P5zCQtdzUQc
zN|7e*`w^Q(!j^!*xkLHDT2s&!3GN?sc)Lf*_cO&mHR?A%OdEmQHfQ&F&qZ1Pp8cvz
zyD>eD^wcZlFq?)0UknlUK1diJ1=7;RbLkU3vR0~a)Qm-#NU)9zH#DT61FU@F$!^ov
zU6tL!cdrI)tp+5Z3#(E1shn)O4XiT)Z*U-W_G{>GU~kqaFdwV7D_15wq=CxgksfIO
zMrjT(^h4n`(z^kDtTx`uE@rBLF;^;~ilFOoVqPNx-8JE##;STY5PqX&ODq85*S-W7
z9xAr~^^UBxe{G!PNZhxmMG%syzQIyDZ_jTh!Mf}W!q%jse^MYVrlx$c0ms1VcL~o_
z7p;Fw1>0Rx_%uw*?D&l))pu?5@&B~7S-1LizIS%kC%W-BZT?)X4Rc*x`|wC@JL81g
zhS>~TG4#5A9H8AA)QxJLd7ArA)>e7Xu~HfTQ<2Yfn?4*3Eb&Wt(9-y^GTi|)d*SyE
zGM%r(gwp_G+Y?(LEwb7EJ}b*g7-%Pwf4Rn-7^%t2At{59fl|7d>v?Yss)TbM0be)O
zn}?ZW+4kx1E9_w9_vLZRA1TeDBlwY(z0x^*_`|e}Z@-uPI)+%D*zdZu&Da?I8oLLE
zCmTFY>Xi7wHshFM%G3x%gW~D24|XN(-*(lU3YV{jSSpBpeIP+^gnrG6}?uu1;ex)AgJo+NF(YrPW-(cNY`
zECVLEgiqKuTF)2M*KL$m>_h}&-$Qkc9&?x#f3$E)SI%27_JPgS?+U}w6UtWSM|)%}
zH@+vG{$Azb-xyEzqf)$6IrwzNxjEh6RvwrVy#Zm9Y6?Y*p;o!8^_P_V#@Bv5BA2Nj
zwqNB@vUbUuf9@(Z(xu=rCTLR2!*r@&VxRKY!Darhq#vj$CPkR>JStBMQ&VJZ(za
zG=;LNN(yk+$fg0U1OW%Pl8~MJ=Qi8A+?LnRe`zo^#^W{;0fi)a)p9iMYzJ?7@U-ce
zDY<#Xf|>v=uU=Wrbk6u$S5uKw_u5?Cd+=WrGsDvpcm$*lMYpl458Yvj0y}oZ(=XzG
z>BCv2wpM&EP&q<`fO=y*zQ`Z$LyFMs`CDyit0GT+Vk$=;F?hoL^>&qn*zsQx^MB10
z=FH?!ri7K4>HfadBwmG@#IwUK)s5{v-d{ga6pTe{A4C
zHt_$i4TJ+wZ5seU+OPM(yRwD|V5_e>X>9CFm8;hFnRltTn_dY~n7(lAd&L1iop;;!
QkR`5Ma=3`H{`>C#03>S}$p8QV
From 7e403d3f96030449773ab36d52c76630ff1fd025 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Tue, 12 Dec 2017 15:00:55 +0800
Subject: [PATCH 12/32] =?UTF-8?q?1=EF=BC=9A=E9=80=82=E9=85=8DAndroid=20Stu?=
=?UTF-8?q?dio=203.0=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 5 ++
build.gradle | 39 ++-------
gradle.properties | 4 +-
keystore.properties | 4 +
lib_common/build.gradle | 33 ++++----
.../common/base/ApplicationDelegate.java | 2 -
.../module/common/base/BaseApplication.java | 1 +
.../module/common/base/ClassUtils.java | 5 +-
.../module/common/utils/ScreenLockUtil.java | 84 +++++++++++++++++++
module_app/build.gradle | 32 ++++---
module_girls/build.gradle | 6 +-
module_main/build.gradle | 8 +-
module_news/build.gradle | 7 +-
.../com/guiying/module/news/MyDelegate.java | 4 +-
versions.gradle | 27 ++++++
15 files changed, 173 insertions(+), 88 deletions(-)
create mode 100644 keystore.properties
create mode 100644 lib_common/src/main/java/com/guiying/module/common/utils/ScreenLockUtil.java
create mode 100644 versions.gradle
diff --git a/README.md b/README.md
index 20d96c0..958f54a 100644
--- a/README.md
+++ b/README.md
@@ -14,12 +14,17 @@
Android项目组件化示例代码
**Android组件化方案**:http://blog.csdn.net/guiying712/article/details/55213884
+
**Android组件化之终极方案**:http://blog.csdn.net/guiying712/article/details/78057120
1. 现在的 AndroidModulePattern 使用 阿里ARouter作为路由;
+
2. Android组件化方案已经支持 **Fragment组件化**,使用方法请下载Demo查看;
+
3. 目前Android组件化方案还没有写完,后续会**继续更新**,完善组件化方案。
+4. 本项目已适配Android Studio 3.0.1版本(Google仓库会带来一定影响)
+
## 集成开发模式和组件开发模式转换
diff --git a/build.gradle b/build.gradle
index 3874a63..3c67d3c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,11 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
+ apply from: '/versions.gradle'
+
repositories {
+ google()
jcenter()
- mavenCentral()
}
-
dependencies {
//classpath "com.android.tools.build:gradle:$localGradlePluginVersion"
//$localGradlePluginVersion是gradle.properties中的数据
@@ -15,10 +16,9 @@ buildscript {
allprojects {
repositories {
+ google()
jcenter()
- mavenCentral()
- //Add the JitPack repository
- maven { url "https://jitpack.io" }
+ maven { url 'https://jitpack.io' }
//支持arr包
flatDir {
dirs 'libs'
@@ -30,32 +30,3 @@ task clean(type: Delete) {
delete rootProject.buildDir
}
-// Define versions in a single place
-//时间:2017.2.13;每次修改版本号都要添加修改时间
-ext {
- // Sdk and tools
- //localBuildToolsVersion是gradle.properties中的数据
- buildToolsVersion = localBuildToolsVersion
- compileSdkVersion = 25
- minSdkVersion = 16
- targetSdkVersion = 25
- versionCode = 1
- versionName = "1.0"
- javaVersion = JavaVersion.VERSION_1_8
-
- // App dependencies version
- supportLibraryVersion = "25.3.1"
- retrofitVersion = "2.1.0"
- glideVersion = "3.7.0"
- loggerVersion = "1.15"
- eventbusVersion = "3.0.0"
- gsonVersion = "2.8.0"
- photoViewVersion = "2.0.0"
-
- //检查时间:2017.6.6
- annotationProcessor = "1.0.3"
- routerVersion = "1.2.1.1"
- easyRecyclerVersion = "4.4.0"
- cookieVersion = "v1.0.1"
- toastyVersion = "1.1.3"
-}
diff --git a/gradle.properties b/gradle.properties
index d817325..9b51cd5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -18,10 +18,8 @@ org.gradle.jvmargs=-Xmx2048m
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
-# ΪԶ(ΪÿĵԻһ)
-localBuildToolsVersion=25.0.3
# ֵһAndroidStudio汾һ
-localGradlePluginVersion=2.3.3
+localGradlePluginVersion=3.0.1
# ÿθġisModuleֵҪ "Sync Project" ť
# isModuleǡɿģʽ͡ģʽл
diff --git a/keystore.properties b/keystore.properties
new file mode 100644
index 0000000..dabd93e
--- /dev/null
+++ b/keystore.properties
@@ -0,0 +1,4 @@
+storePassword=guiying712
+keyPassword=guiying712
+keyAlias=guiying712
+storeFile=/mykey.jks
\ No newline at end of file
diff --git a/lib_common/build.gradle b/lib_common/build.gradle
index 1ec98ca..4834e39 100644
--- a/lib_common/build.gradle
+++ b/lib_common/build.gradle
@@ -2,8 +2,6 @@ apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
-
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
@@ -13,25 +11,26 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
+ api fileTree(dir: 'libs', include: ['*.jar'])
//Android Support
- compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
- compile "com.android.support:design:$rootProject.supportLibraryVersion"
- compile "com.android.support:percent:$rootProject.supportLibraryVersion"
+ api "com.android.support:support-v4:$rootProject.supportLibraryVersion"
+ api "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
+ api "com.android.support:design:$rootProject.supportLibraryVersion"
+ api "com.android.support:percent:$rootProject.supportLibraryVersion"
//网络请求相关
- compile "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
- compile "com.squareup.retrofit2:retrofit-mock:$rootProject.retrofitVersion"
- compile "com.github.franmontiel:PersistentCookieJar:$rootProject.cookieVersion"
+ api "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
+ api "com.squareup.retrofit2:retrofit-mock:$rootProject.retrofitVersion"
+ api "com.github.franmontiel:PersistentCookieJar:$rootProject.cookieVersion"
//稳定的
- compile "com.github.bumptech.glide:glide:$rootProject.glideVersion"
- compile "com.orhanobut:logger:$rootProject.loggerVersion"
- compile "org.greenrobot:eventbus:$rootProject.eventbusVersion"
- compile "com.google.code.gson:gson:$rootProject.gsonVersion"
- compile "com.github.chrisbanes:PhotoView:$rootProject.photoViewVersion"
+ api "com.github.bumptech.glide:glide:$rootProject.glideVersion"
+ api "com.orhanobut:logger:$rootProject.loggerVersion"
+ api "org.greenrobot:eventbus:$rootProject.eventbusVersion"
+ api "com.google.code.gson:gson:$rootProject.gsonVersion"
+ api "com.github.chrisbanes:PhotoView:$rootProject.photoViewVersion"
- compile "com.jude:easyrecyclerview:$rootProject.easyRecyclerVersion"
- compile "com.github.GrenderG:Toasty:$rootProject.toastyVersion"
+ api "com.jude:easyrecyclerview:$rootProject.easyRecyclerVersion"
+ api "com.github.GrenderG:Toasty:$rootProject.toastyVersion"
//router
- compile "com.alibaba:arouter-api:$rootProject.routerVersion"
+ api "com.alibaba:arouter-api:$rootProject.routerVersion"
}
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java b/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
index 1e98f86..dd671fb 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
@@ -7,8 +7,6 @@
* @version V2.8.3
* @name ApplicationDelegate
*/
-
-
public interface ApplicationDelegate {
void onCreate();
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
index b8d634a..9b46d73 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
@@ -41,6 +41,7 @@ public void onCreate() {
for (ApplicationDelegate delegate : mAppDelegateList) {
delegate.onCreate();
}
+
}
@Override
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
index d767f26..2b6862c 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
@@ -53,7 +53,8 @@ private static SharedPreferences getMultiDexPreferences(Context context) {
* @param U know
* @return 对象列表
*/
- public static List getObjectsWithInterface(Context context, Class clazz, String path) {
+ public static List
+ getObjectsWithInterface(Context context, Class clazz, String path) {
List objectList = new ArrayList<>();
try {
//找出所有路径中的类名,主要用于各个组件根包名一致的情况
@@ -273,7 +274,7 @@ private static boolean isVMMultidexCapable() {
}
- Log.i("galaxy", "VM with name " + vmName + (isMultidexCapable ? " has multidex support" : " does not have multidex support"));
+ Log.i(TAG, "VM with name " + vmName + (isMultidexCapable ? " has multidex support" : " does not have multidex support"));
return isMultidexCapable;
}
diff --git a/lib_common/src/main/java/com/guiying/module/common/utils/ScreenLockUtil.java b/lib_common/src/main/java/com/guiying/module/common/utils/ScreenLockUtil.java
new file mode 100644
index 0000000..d85c106
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/utils/ScreenLockUtil.java
@@ -0,0 +1,84 @@
+package com.guiying.module.common.utils;
+
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.app.KeyguardManager.KeyguardLock;
+import android.content.Context;
+import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
+import android.util.Log;
+
+import java.util.HashMap;
+
+/**
+ * 用于保持屏幕高亮的工具
+ */
+public class ScreenLockUtil {
+ private static final String TAG = "ScreenLockUtil";
+
+ private ScreenLockUtil() {
+ throw new UnsupportedOperationException("cannot be instantiated");
+ }
+
+ static private HashMap mWakeLockArray = new HashMap<>();
+ static private HashMap mIsUnlockArray = new HashMap<>();
+
+
+ /**
+ * 保持屏幕常亮
+ *
+ * @param activity you know
+ */
+ public static void keepScreenOn(Activity activity) {
+ WakeLock wakeLock = mWakeLockArray.get(activity);
+ if (wakeLock == null) {
+ PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
+ wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK,
+ activity.getClass().getName());
+ }
+
+ if (!wakeLock.isHeld()) {
+ wakeLock.acquire();
+ }
+
+ mWakeLockArray.put(activity, wakeLock);
+
+ cancelLockScreen(activity);
+
+ Log.i(TAG, "开启屏幕常亮");
+ }
+
+
+ /**
+ * 取消屏幕常亮
+ *
+ * @param activity you know
+ */
+ public static void cancelKeepScreen(Activity activity) {
+ WakeLock wakeLock = mWakeLockArray.get(activity);
+ if (wakeLock != null) {
+ if (wakeLock.isHeld()) {
+ wakeLock.release();
+ }
+ }
+
+ Log.i(TAG, "取消屏幕常亮");
+ }
+
+ /**
+ * 取消锁屏限制
+ *
+ * @param activity you know
+ */
+ private static void cancelLockScreen(Activity activity) {
+ Boolean isUnlock = mIsUnlockArray.get(activity);
+ if (isUnlock != null && isUnlock) {
+ return;
+ }
+ KeyguardManager mKeyguardManager = (KeyguardManager) activity.getSystemService(Context.KEYGUARD_SERVICE);
+ KeyguardLock mKeyguardLock = mKeyguardManager.newKeyguardLock(activity.getClass().getName());
+ mKeyguardLock.disableKeyguard();
+
+ mIsUnlockArray.put(activity, true);
+ }
+}
diff --git a/module_app/build.gradle b/module_app/build.gradle
index 1e084f4..e092fcc 100644
--- a/module_app/build.gradle
+++ b/module_app/build.gradle
@@ -1,5 +1,13 @@
apply plugin: 'com.android.application'
+// Create a variable called keystorePropertiesFile, and initialize it to your
+// keystore.properties file, in the rootProject folder.
+def keystorePropertiesFile = rootProject.file("keystore.properties")
+// Initialize a new Properties() object called keystoreProperties.
+def keystoreProperties = new Properties()
+// Load your keystore.properties file into the keystoreProperties object.
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+
static def buildTime() {
return new Date().format("yyyyMMdd");
}
@@ -7,15 +15,14 @@ static def buildTime() {
android {
signingConfigs {
release {
- keyAlias 'guiying712'
- keyPassword 'guiying712'
- storeFile file('/mykey.jks')
- storePassword 'guiying712'
+ keyAlias keystoreProperties['keyAlias']
+ keyPassword keystoreProperties['keyPassword']
+ storeFile file(keystoreProperties['storeFile'])
+ storePassword keystoreProperties['storePassword']
}
}
compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.guiying.module"
minSdkVersion rootProject.ext.minSdkVersion
@@ -60,13 +67,12 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:multidex:1.0.1'
- if (isModule.toBoolean()) {
- compile project(':lib_common')
- } else {
- compile project(':module_main')
- compile project(':module_girls')
- compile project(':module_news')
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:multidex:1.0.2'
+ implementation project(':lib_common')
+ if (!isModule.toBoolean()) {
+ implementation project(':module_main')
+ implementation project(':module_girls')
+ implementation project(':module_news')
}
}
diff --git a/module_girls/build.gradle b/module_girls/build.gradle
index 4014b71..966fe3e 100644
--- a/module_girls/build.gradle
+++ b/module_girls/build.gradle
@@ -6,8 +6,6 @@ if (isModule.toBoolean()) {
android {
compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
-
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
@@ -39,7 +37,7 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
- compile project(':lib_common')
+ implementation project(':lib_common')
}
diff --git a/module_main/build.gradle b/module_main/build.gradle
index bba5baa..92534d4 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -6,8 +6,6 @@ if (isModule.toBoolean()) {
android {
compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
-
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
@@ -42,9 +40,7 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
- compile project(':lib_common')
- compile 'com.android.support:design:25.3.1'
- compile 'com.android.support:support-vector-drawable:25.3.1'
+ implementation project(':lib_common')
}
diff --git a/module_news/build.gradle b/module_news/build.gradle
index 7c5b438..966fe3e 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -6,8 +6,6 @@ if (isModule.toBoolean()) {
android {
compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
-
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
@@ -39,8 +37,7 @@ android {
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
- compile project(':lib_common')
- compile 'com.android.support:support-v4:25.3.1'
+ implementation project(':lib_common')
}
diff --git a/module_news/src/main/java/com/guiying/module/news/MyDelegate.java b/module_news/src/main/java/com/guiying/module/news/MyDelegate.java
index 30bbfac..f0aca07 100644
--- a/module_news/src/main/java/com/guiying/module/news/MyDelegate.java
+++ b/module_news/src/main/java/com/guiying/module/news/MyDelegate.java
@@ -2,6 +2,7 @@
import com.guiying.module.common.base.ApplicationDelegate;
import com.guiying.module.common.base.ViewManager;
+import com.orhanobut.logger.Logger;
/**
* 类说明
@@ -10,12 +11,11 @@
* @version V2.8.3
* @name MyDelegate
*/
-
-
public class MyDelegate implements ApplicationDelegate {
@Override
public void onCreate() {
+ Logger.init("pattern");
ViewManager.getInstance().addFragment(0, new NewsFragment());
}
diff --git a/versions.gradle b/versions.gradle
new file mode 100644
index 0000000..b0a4da9
--- /dev/null
+++ b/versions.gradle
@@ -0,0 +1,27 @@
+// Define versions in a single place
+//时间:2017.2.13;每次修改版本号都要添加修改时间
+rootProject.ext {
+ // Sdk and tools
+ compileSdkVersion = 25
+ minSdkVersion = 16
+ targetSdkVersion = 25
+ versionCode = 1
+ versionName = "1.0"
+ javaVersion = JavaVersion.VERSION_1_8
+
+ // App dependencies versions
+ supportLibraryVersion = "25.4.0"
+ retrofitVersion = "2.1.0"
+ glideVersion = "3.8.0"
+ loggerVersion = "1.15"
+ eventbusVersion = "3.0.0"
+ gsonVersion = "2.8.0"
+ photoViewVersion = "2.0.0"
+
+ //检查时间:2017.6.6
+ annotationProcessor = "1.0.3"
+ routerVersion = "1.2.1.1"
+ easyRecyclerVersion = "4.4.0"
+ cookieVersion = "v1.0.1"
+ toastyVersion = "1.1.3"
+}
From 1e677dee104c4c0be710a5dfe3ba084175574850 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Thu, 4 Jan 2018 22:06:04 +0800
Subject: [PATCH 13/32] =?UTF-8?q?1=EF=BC=9A=E9=87=8D=E5=86=99=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6=E6=A8=A1=E5=9D=97=E7=9A=84Gradle=E8=84=9A=E6=9C=AC?=
=?UTF-8?q?=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
build.gradle | 42 ++++++-----
lib_common/build.gradle | 90 ++++++++++++++++-------
module_app/build.gradle | 18 +++--
module_girls/build.gradle | 30 ++++++--
module_main/build.gradle | 31 +++++---
module_news/build.gradle | 30 ++++++--
versions.gradle | 151 +++++++++++++++++++++++++++++++-------
7 files changed, 291 insertions(+), 101 deletions(-)
diff --git a/build.gradle b/build.gradle
index 3c67d3c..40fe932 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,32 +1,38 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- apply from: '/versions.gradle'
-
- repositories {
- google()
- jcenter()
- }
+ apply from: 'versions.gradle'
+ addRepos(repositories)
dependencies {
- //classpath "com.android.tools.build:gradle:$localGradlePluginVersion"
- //$localGradlePluginVersion是gradle.properties中的数据
- classpath "com.android.tools.build:gradle:$localGradlePluginVersion"
+ /* classpath deps.android_gradle_plugin*/
+ classpath deps.android_gradle_plugin
+ classpath deps.kotlin.plugin
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
}
}
allprojects {
- repositories {
- google()
- jcenter()
- maven { url 'https://jitpack.io' }
- //支持arr包
- flatDir {
- dirs 'libs'
+ addRepos(repositories)
+ // Android dependency 'com.android.support:design' has different version for the compile (25.3.1) and runtime (25.4.0) classpath.
+ // You should manually set the same version via DependencyResolution
+ subprojects {
+ project.configurations.all {
+ resolutionStrategy.eachDependency { details ->
+ if (details.requested.group == 'com.android.support'
+ && !details.requested.name.contains('multidex')) {
+ details.useVersion "27.0.2"
+ }
+ }
}
}
+
+ // 组件缓存更新时间设置(默认每次build都更新)
+ configurations.all {
+ resolutionStrategy.cacheChangingModulesFor 0, 'minutes'
+ }
}
task clean(type: Delete) {
delete rootProject.buildDir
-}
-
+}
\ No newline at end of file
diff --git a/lib_common/build.gradle b/lib_common/build.gradle
index 4834e39..87eb2af 100644
--- a/lib_common/build.gradle
+++ b/lib_common/build.gradle
@@ -1,36 +1,76 @@
apply plugin: 'com.android.library'
android {
- compileSdkVersion rootProject.ext.compileSdkVersion
+ compileSdkVersion build_versions.target_sdk
defaultConfig {
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode rootProject.ext.versionCode
- versionName rootProject.ext.versionName
+ minSdkVersion build_versions.min_sdk
+ targetSdkVersion build_versions.target_sdk
+ versionCode 1
+ versionName "1.0"
}
+
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ buildTypes {
+ release {
+ buildConfigField "boolean", "LOG_DEBUG", "true"
+ zipAlignEnabled false
+ shrinkResources false
+ minifyEnabled false
+ debuggable true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
}
dependencies {
- api fileTree(dir: 'libs', include: ['*.jar'])
- //Android Support
- api "com.android.support:support-v4:$rootProject.supportLibraryVersion"
- api "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
- api "com.android.support:design:$rootProject.supportLibraryVersion"
- api "com.android.support:percent:$rootProject.supportLibraryVersion"
- //网络请求相关
- api "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
- api "com.squareup.retrofit2:retrofit-mock:$rootProject.retrofitVersion"
- api "com.github.franmontiel:PersistentCookieJar:$rootProject.cookieVersion"
- //稳定的
- api "com.github.bumptech.glide:glide:$rootProject.glideVersion"
- api "com.orhanobut:logger:$rootProject.loggerVersion"
- api "org.greenrobot:eventbus:$rootProject.eventbusVersion"
- api "com.google.code.gson:gson:$rootProject.gsonVersion"
- api "com.github.chrisbanes:PhotoView:$rootProject.photoViewVersion"
-
- api "com.jude:easyrecyclerview:$rootProject.easyRecyclerVersion"
- api "com.github.GrenderG:Toasty:$rootProject.toastyVersion"
+ api fileTree(include: ['*.jar'], dir: 'libs')
+ // Support libraries
+ api deps.support.app_compat
+ api deps.support.v4
+ api deps.support.v13
+ api deps.support.design
+ api deps.support.cardview
+ api deps.support.percent
+ api deps.support.recyclerview
+ api deps.constraint_layout
+
+ // RxJava and retrofit
+ api deps.rx_android
+ api deps.rxjava2
+ api deps.retrofit.runtime
+ api deps.retrofit.gson
+ api deps.persistent_cookie
+
+ //Dagger
+ api deps.dagger.runtime
+ api deps.dagger.android
+ api deps.dagger.android_support
+
+ // other
+ api deps.kotlin.stdlib
+ api deps.event_bus
+ api deps.gson
+ api deps.permission
+ api deps.utils
+ api deps.glide
+
+ //view
+ api deps.photo_view
+ api deps.easy_recycler
+ api deps.material_dialog
+ api deps.logger
+ api deps.toasty
//router
- api "com.alibaba:arouter-api:$rootProject.routerVersion"
+ api deps.arouter_api
+
+ //annotationProcessor
+ annotationProcessor deps.dagger.android_support_compiler
+ annotationProcessor deps.dagger.compiler
}
diff --git a/module_app/build.gradle b/module_app/build.gradle
index e092fcc..2776c5c 100644
--- a/module_app/build.gradle
+++ b/module_app/build.gradle
@@ -22,18 +22,24 @@ android {
}
}
- compileSdkVersion rootProject.ext.compileSdkVersion
+ compileSdkVersion build_versions.target_sdk
defaultConfig {
applicationId "com.guiying.module"
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode rootProject.ext.versionCode
- versionName rootProject.ext.versionName
+ minSdkVersion build_versions.min_sdk
+ targetSdkVersion build_versions.target_sdk
+ versionCode 1
+ versionName "1.0"
multiDexEnabled true
//打包时间
resValue "string", "build_time", buildTime()
}
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
buildTypes {
release {
//更改AndroidManifest.xml中预先定义好占位符信息
@@ -68,7 +74,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:multidex:1.0.2'
+ implementation deps.support.multidex
implementation project(':lib_common')
if (!isModule.toBoolean()) {
implementation project(':module_main')
diff --git a/module_girls/build.gradle b/module_girls/build.gradle
index 966fe3e..d0662b8 100644
--- a/module_girls/build.gradle
+++ b/module_girls/build.gradle
@@ -5,21 +5,25 @@ if (isModule.toBoolean()) {
}
android {
- compileSdkVersion rootProject.ext.compileSdkVersion
+ compileSdkVersion build_versions.target_sdk
defaultConfig {
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode rootProject.ext.versionCode
- versionName rootProject.ext.versionName
+ minSdkVersion build_versions.min_sdk
+ targetSdkVersion build_versions.target_sdk
+ versionCode 1
+ versionName "1.0"
- //ARouter
javaCompileOptions {
annotationProcessorOptions {
- arguments = [moduleName: project.getName()]
+ arguments = [ moduleName : project.getName() ]
}
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
sourceSets {
main {
if (isModule.toBoolean()) {
@@ -34,10 +38,20 @@ android {
}
}
+ buildTypes {
+ release {
+ buildConfigField "boolean", "LOG_DEBUG", "true"
+ zipAlignEnabled false
+ shrinkResources false
+ minifyEnabled false
+ debuggable true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
+ annotationProcessor deps.arouter_compiler
implementation project(':lib_common')
}
diff --git a/module_main/build.gradle b/module_main/build.gradle
index 92534d4..d0662b8 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -5,22 +5,24 @@ if (isModule.toBoolean()) {
}
android {
- compileSdkVersion rootProject.ext.compileSdkVersion
+ compileSdkVersion build_versions.target_sdk
defaultConfig {
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode rootProject.ext.versionCode
- versionName rootProject.ext.versionName
+ minSdkVersion build_versions.min_sdk
+ targetSdkVersion build_versions.target_sdk
+ versionCode 1
+ versionName "1.0"
- //ARouter
javaCompileOptions {
annotationProcessorOptions {
- arguments = [moduleName: project.getName()]
+ arguments = [ moduleName : project.getName() ]
}
}
- vectorDrawables.useSupportLibrary = true
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
sourceSets {
main {
@@ -36,11 +38,20 @@ android {
}
}
-
+ buildTypes {
+ release {
+ buildConfigField "boolean", "LOG_DEBUG", "true"
+ zipAlignEnabled false
+ shrinkResources false
+ minifyEnabled false
+ debuggable true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
+ annotationProcessor deps.arouter_compiler
implementation project(':lib_common')
}
diff --git a/module_news/build.gradle b/module_news/build.gradle
index 966fe3e..d0662b8 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -5,21 +5,25 @@ if (isModule.toBoolean()) {
}
android {
- compileSdkVersion rootProject.ext.compileSdkVersion
+ compileSdkVersion build_versions.target_sdk
defaultConfig {
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode rootProject.ext.versionCode
- versionName rootProject.ext.versionName
+ minSdkVersion build_versions.min_sdk
+ targetSdkVersion build_versions.target_sdk
+ versionCode 1
+ versionName "1.0"
- //ARouter
javaCompileOptions {
annotationProcessorOptions {
- arguments = [moduleName: project.getName()]
+ arguments = [ moduleName : project.getName() ]
}
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
sourceSets {
main {
if (isModule.toBoolean()) {
@@ -34,10 +38,20 @@ android {
}
}
+ buildTypes {
+ release {
+ buildConfigField "boolean", "LOG_DEBUG", "true"
+ zipAlignEnabled false
+ shrinkResources false
+ minifyEnabled false
+ debuggable true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- annotationProcessor "com.alibaba:arouter-compiler:$rootProject.annotationProcessor"
+ annotationProcessor deps.arouter_compiler
implementation project(':lib_common')
}
diff --git a/versions.gradle b/versions.gradle
index b0a4da9..3cd6235 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -1,27 +1,126 @@
-// Define versions in a single place
-//时间:2017.2.13;每次修改版本号都要添加修改时间
-rootProject.ext {
- // Sdk and tools
- compileSdkVersion = 25
- minSdkVersion = 16
- targetSdkVersion = 25
- versionCode = 1
- versionName = "1.0"
- javaVersion = JavaVersion.VERSION_1_8
-
- // App dependencies versions
- supportLibraryVersion = "25.4.0"
- retrofitVersion = "2.1.0"
- glideVersion = "3.8.0"
- loggerVersion = "1.15"
- eventbusVersion = "3.0.0"
- gsonVersion = "2.8.0"
- photoViewVersion = "2.0.0"
-
- //检查时间:2017.6.6
- annotationProcessor = "1.0.3"
- routerVersion = "1.2.1.1"
- easyRecyclerVersion = "4.4.0"
- cookieVersion = "v1.0.1"
- toastyVersion = "1.1.3"
+/**
+ * Shared file between builds so that they can all use the same dependencies and
+ * maven repositories.
+ **/
+ext.deps = [:]
+
+def versions = [:]
+versions.android_gradle_plugin = "3.0.1"
+versions.kotlin = "1.1.51"
+versions.support = "27.0.2"
+versions.multidex = "1.0.2"
+versions.constraint_layout = "1.0.2"
+versions.dagger = "2.11"
+versions.glide = "3.8.0"
+versions.rxjava2 = "2.1.7"
+versions.rx_android = "2.0.1"
+versions.retrofit = "2.3.0"
+versions.event_bus = "3.1.1"
+versions.photo_view = "2.0.0"
+versions.persistent_cookie = "v1.0.1"
+versions.gson = "2.8.2"
+versions.qmui = "1.0.4"
+versions.flow_layout = "1.0.3"
+versions.swipe_recycler = "1.1.3"
+versions.easy_recycler = "4.4.2"
+versions.permission = "1.1.2"
+versions.utils = "1.10.0"
+versions.top_snackbar = "1.1.1"
+versions.litepal = "1.6.1"
+versions.toasty = "1.1.3"
+versions.logger = "1.15"
+versions.material_dialog = "0.9.6.0"
+//Arouter
+versions.arouter_compiler = "1.1.4"
+versions.arouter_api = "1.3.1"
+
+
+
+def deps = [:]
+
+def support = [:]
+support.annotations = "com.android.support:support-annotations:$versions.support"
+support.app_compat = "com.android.support:appcompat-v7:$versions.support"
+support.v13 = "com.android.support:support-v13:$versions.support"
+support.percent = "com.android.support:percent:$versions.support"
+support.recyclerview = "com.android.support:recyclerview-v7:$versions.support"
+support.cardview = "com.android.support:cardview-v7:$versions.support"
+support.design = "com.android.support:design:$versions.support"
+support.v4 = "com.android.support:support-v4:$versions.support"
+support.core_utils = "com.android.support:support-core-utils:$versions.support"
+support.multidex = "com.android.support:multidex:$versions.multidex"
+deps.support = support
+
+
+def retrofit = [:]
+retrofit.runtime = "com.squareup.retrofit2:retrofit:$versions.retrofit"
+retrofit.adapter = "com.squareup.retrofit2:adapter-rxjava2:$versions.retrofi"
+retrofit.gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit"
+deps.retrofit = retrofit
+
+
+def dagger = [:]
+dagger.runtime = "com.google.dagger:dagger:$versions.dagger"
+dagger.android = "com.google.dagger:dagger-android:$versions.dagger"
+dagger.android_support = "com.google.dagger:dagger-android-support:$versions.dagger"
+dagger.compiler = "com.google.dagger:dagger-compiler:$versions.dagger"
+dagger.android_support_compiler = "com.google.dagger:dagger-android-processor:$versions.dagger"
+deps.dagger = dagger
+
+
+def kotlin = [:]
+kotlin.stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jre7:$versions.kotlin"
+kotlin.test = "org.jetbrains.kotlin:kotlin-test-junit:$versions.kotlin"
+kotlin.plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin"
+deps.kotlin = kotlin
+
+//view
+deps.constraint_layout = "com.android.support.constraint:constraint-layout:$versions.constraint_layout"
+deps.qmui = "com.qmuiteam:qmui:$versions.qmui"
+deps.flow_layout = "com.zhy:flowlayout-lib:$versions.flow_layout"
+deps.swipe_recycler = "com.yanzhenjie:recyclerview-swipe:$versions.swipe_recycler"
+deps.easy_recycler = "com.jude:easyrecyclerview:$versions.easy_recycler"
+deps.photo_view = "com.github.chrisbanes:PhotoView:$versions.photo_view"
+deps.material_dialog = "com.afollestad.material-dialogs:core:$versions.material_dialog"
+
+deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin"
+deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2"
+deps.rx_android = "io.reactivex.rxjava2:rxandroid:$versions.rx_android"
+//other
+deps.glide = "com.github.bumptech.glide:glide:$versions.glide"
+deps.event_bus = "org.greenrobot:eventbus:$versions.event_bus"
+deps.persistent_cookie = "com.github.franmontiel:PersistentCookieJar:$versions.persistent_cookie"
+deps.gson = "com.google.code.gson:gson:$versions.gson"
+deps.permission = "com.yanzhenjie:permission:$versions.permission"
+deps.utils = "com.blankj:utilcode:$versions.utils"
+deps.top_snackbar ="com.androidadvance:topsnackbar:$versions.top_snackbar"
+deps.litepal = "org.litepal.android:core:$versions.litepal"
+deps.toasty = "com.github.GrenderG:Toasty:$versions.toasty"
+deps.logger = "com.orhanobut:logger:$versions.logger"
+deps.arouter_api = "com.alibaba:arouter-api:$versions.arouter_api"
+deps.arouter_compiler = "com.alibaba:arouter-compiler:$versions.arouter_compiler"
+
+ext.deps = deps
+
+def build_versions = [:]
+build_versions.min_sdk = 16
+build_versions.target_sdk = 27
+build_versions.build_tools = "27.0.2"
+ext.build_versions = build_versions
+
+
+def addRepos(RepositoryHandler handler) {
+ /*公司仓库*/
+ handler.maven {
+ url "http://maven.hikvision.com.cn/nexus/content/groups/System-Android-down/"
+ credentials {
+ username "System-Android"
+ password "HikSysDeveloper123"
+ }
+ }
+
+ handler.google()
+ handler.jcenter()
}
+
+ext.addRepos = this.&addRepos
\ No newline at end of file
From f08a03744d7afd9834461fb353beca16358beb90 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Thu, 4 Jan 2018 22:30:57 +0800
Subject: [PATCH 14/32] =?UTF-8?q?1=EF=BC=9Akeep=E4=B8=8D=E5=8F=AF=E6=B7=B7?=
=?UTF-8?q?=E6=B7=86=E7=9A=84=E7=B1=BB=EF=BC=9B=202=EF=BC=9A=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E4=B8=BB=E5=8A=A8=E5=AF=BB=E6=89=BEView=E7=9A=84?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=B7=E4=BE=8B=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/base/BaseActionBarActivity.java | 2 ++
.../module/common/base/BaseActivity.java | 2 ++
.../module/common/base/BaseApplication.java | 12 ++++----
.../module/common/base/BaseFragment.java | 8 ++++++
.../module/common/base/BasePresenter.java | 9 ++++++
.../guiying/module/common/base/BaseView.java | 10 +++++++
.../module/common/base/ClassUtils.java | 2 ++
...elegate.java => IApplicationDelegate.java} | 5 +++-
.../module/common/base/IViewDelegate.java | 21 ++++++++++++++
.../module/common/base/InfoCallback.java | 3 ++
.../module/common/base/ViewManager.java | 2 ++
.../guiying/module/girls/GirlsFragment.java | 10 +++++++
.../com/guiying/module/girls/MyDelegate.java | 10 +++++--
.../guiying/module/girls/MyViewDelegate.java | 28 +++++++++++++++++++
.../module/main/BottomNavigationActivity.java | 22 +++++++++++++--
.../com/guiying/module/news/MyDelegate.java | 10 +++++--
.../guiying/module/news/MyViewDelegate.java | 28 +++++++++++++++++++
.../com/guiying/module/news/NewsFragment.java | 11 ++++++++
18 files changed, 180 insertions(+), 15 deletions(-)
rename lib_common/src/main/java/com/guiying/module/common/base/{ApplicationDelegate.java => IApplicationDelegate.java} (75%)
create mode 100644 lib_common/src/main/java/com/guiying/module/common/base/IViewDelegate.java
create mode 100644 module_girls/src/main/java/com/guiying/module/girls/MyViewDelegate.java
create mode 100644 module_news/src/main/java/com/guiying/module/news/MyViewDelegate.java
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
index ffe9243..c32f18e 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
@@ -8,6 +8,7 @@
package com.guiying.module.common.base;
import android.os.Bundle;
+import android.support.annotation.Keep;
import android.support.annotation.StringRes;
import android.support.v7.app.ActionBar;
@@ -22,6 +23,7 @@
* @version V1.2.0
* @name BaseActionBarActivity
*/
+@Keep
public abstract class BaseActionBarActivity extends BaseActivity {
/*默认的ActionBar*/
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
index 340afa2..32ffebe 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseActivity.java
@@ -2,6 +2,7 @@
import android.os.Bundle;
import android.support.annotation.IdRes;
+import android.support.annotation.Keep;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
@@ -17,6 +18,7 @@
* @version V1.0.0
* @name BaseActivity
*/
+@Keep
public abstract class BaseActivity extends AppCompatActivity {
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
index 9b46d73..5c183ee 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseApplication.java
@@ -24,7 +24,7 @@ public class BaseApplication extends Application {
private static BaseApplication sInstance;
- private List mAppDelegateList;
+ private List mAppDelegateList;
public static BaseApplication getIns() {
@@ -37,8 +37,8 @@ public void onCreate() {
sInstance = this;
Logger.init("pattern").logLevel(LogLevel.FULL);
Utils.init(this);
- mAppDelegateList = ClassUtils.getObjectsWithInterface(this, ApplicationDelegate.class, ROOT_PACKAGE);
- for (ApplicationDelegate delegate : mAppDelegateList) {
+ mAppDelegateList = ClassUtils.getObjectsWithInterface(this, IApplicationDelegate.class, ROOT_PACKAGE);
+ for (IApplicationDelegate delegate : mAppDelegateList) {
delegate.onCreate();
}
@@ -47,7 +47,7 @@ public void onCreate() {
@Override
public void onTerminate() {
super.onTerminate();
- for (ApplicationDelegate delegate : mAppDelegateList) {
+ for (IApplicationDelegate delegate : mAppDelegateList) {
delegate.onTerminate();
}
}
@@ -56,7 +56,7 @@ public void onTerminate() {
@Override
public void onLowMemory() {
super.onLowMemory();
- for (ApplicationDelegate delegate : mAppDelegateList) {
+ for (IApplicationDelegate delegate : mAppDelegateList) {
delegate.onLowMemory();
}
}
@@ -64,7 +64,7 @@ public void onLowMemory() {
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
- for (ApplicationDelegate delegate : mAppDelegateList) {
+ for (IApplicationDelegate delegate : mAppDelegateList) {
delegate.onTrimMemory(level);
}
}
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
index 116ab50..5ec3cb5 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseFragment.java
@@ -2,10 +2,18 @@
import android.content.Context;
import android.support.annotation.IdRes;
+import android.support.annotation.Keep;
import android.support.v4.app.Fragment;
import com.guiying.module.common.utils.Utils;
+/**
+ * Fragment的基类
+ *
+ * @author 张华洋
+ * @name BaseFragment
+ */
+@Keep
public abstract class BaseFragment extends Fragment {
protected BaseActivity mActivity;
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java b/lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
index d7468af..be56ad9 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BasePresenter.java
@@ -1,5 +1,14 @@
package com.guiying.module.common.base;
+import android.support.annotation.Keep;
+
+/**
+ * Presenter的基类
+ *
+ * @author 张华洋
+ * @name BasePresenter
+ */
+@Keep
public interface BasePresenter {
void start();
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseView.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
index 7d557ea..e1b0b21 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseView.java
@@ -1,5 +1,15 @@
package com.guiying.module.common.base;
+
+import android.support.annotation.Keep;
+
+/**
+ * View接口的基类
+ *
+ * @author 张华洋
+ * @name BaseView
+ */
+@Keep
public interface BaseView {
void setPresenter(T presenter);
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
index 2b6862c..7e65de6 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ClassUtils.java
@@ -5,6 +5,7 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Build;
+import android.support.annotation.Keep;
import android.util.Log;
import com.guiying.module.common.utils.Utils;
@@ -25,6 +26,7 @@
* Copy from galaxy sdk ${com.alibaba.android.galaxy.utils.ClassUtils}
* Scanner, find out class with any conditions, copy from google source code.
*/
+@Keep
public class ClassUtils {
private static final String TAG = "ClassUtils";
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java b/lib_common/src/main/java/com/guiying/module/common/base/IApplicationDelegate.java
similarity index 75%
rename from lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
rename to lib_common/src/main/java/com/guiying/module/common/base/IApplicationDelegate.java
index dd671fb..1ea31b6 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/ApplicationDelegate.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/IApplicationDelegate.java
@@ -1,5 +1,7 @@
package com.guiying.module.common.base;
+import android.support.annotation.Keep;
+
/**
* 类说明
*
@@ -7,7 +9,8 @@
* @version V2.8.3
* @name ApplicationDelegate
*/
-public interface ApplicationDelegate {
+@Keep
+public interface IApplicationDelegate {
void onCreate();
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/IViewDelegate.java b/lib_common/src/main/java/com/guiying/module/common/base/IViewDelegate.java
new file mode 100644
index 0000000..3c35b8e
--- /dev/null
+++ b/lib_common/src/main/java/com/guiying/module/common/base/IViewDelegate.java
@@ -0,0 +1,21 @@
+package com.guiying.module.common.base;
+
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+/**
+ * 类说明
+ *
+ * @author 张华洋 2018/1/4 22:10
+ * @version V2.8.3
+ * @name IFragmentDelegate
+ */
+@Keep
+public interface IViewDelegate {
+
+ BaseFragment getFragment(String name);
+
+ View getView(String name);
+
+}
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java b/lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
index 96e6d21..8a5cf9b 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/InfoCallback.java
@@ -1,5 +1,7 @@
package com.guiying.module.common.base;
+import android.support.annotation.Keep;
+
/**
* 数据回调接口
*
@@ -7,6 +9,7 @@
* @version V1.2.0
* @name InfoCallback
*/
+@Keep
public interface InfoCallback {
void onSuccess(T info);
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java b/lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
index 1b421f2..8f221a0 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/ViewManager.java
@@ -2,6 +2,7 @@
import android.app.Activity;
import android.content.Context;
+import android.support.annotation.Keep;
import android.util.Log;
import java.util.ArrayList;
@@ -15,6 +16,7 @@
* @version V1.1
* @name ViewManager
*/
+@Keep
public class ViewManager {
private static Stack activityStack;
diff --git a/module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java b/module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java
index 4be5443..43accad 100644
--- a/module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/GirlsFragment.java
@@ -15,6 +15,16 @@
*/
public class GirlsFragment extends BaseFragment {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @return A new instance of fragment GirlsFragment.
+ */
+ public static GirlsFragment newInstance() {
+ return new GirlsFragment();
+ }
+
public GirlsFragment() {
// Required empty public constructor
diff --git a/module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java b/module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java
index 5ab446c..dc0ecf4 100644
--- a/module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java
+++ b/module_girls/src/main/java/com/guiying/module/girls/MyDelegate.java
@@ -1,6 +1,8 @@
package com.guiying.module.girls;
-import com.guiying.module.common.base.ApplicationDelegate;
+import android.support.annotation.Keep;
+
+import com.guiying.module.common.base.IApplicationDelegate;
import com.guiying.module.common.base.ViewManager;
/**
@@ -10,11 +12,13 @@
* @version V2.8.3
* @name MyDelegate
*/
-public class MyDelegate implements ApplicationDelegate {
+@Keep
+public class MyDelegate implements IApplicationDelegate {
@Override
public void onCreate() {
- ViewManager.getInstance().addFragment(0, new GirlsFragment());
+ //主动添加
+ ViewManager.getInstance().addFragment(0, GirlsFragment.newInstance());
}
@Override
diff --git a/module_girls/src/main/java/com/guiying/module/girls/MyViewDelegate.java b/module_girls/src/main/java/com/guiying/module/girls/MyViewDelegate.java
new file mode 100644
index 0000000..3d4294e
--- /dev/null
+++ b/module_girls/src/main/java/com/guiying/module/girls/MyViewDelegate.java
@@ -0,0 +1,28 @@
+package com.guiying.module.girls;
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.IViewDelegate;
+
+/**
+ * 类说明
+ *
+ * @author 张华洋 2018/1/4 22:16
+ * @version V2.8.3
+ * @name MyViewDelegate
+ */
+@Keep
+public class MyViewDelegate implements IViewDelegate {
+
+ @Override
+ public BaseFragment getFragment(String name) {
+ return GirlsFragment.newInstance();
+ }
+
+ @Override
+ public View getView(String name) {
+ return null;
+ }
+}
diff --git a/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java b/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
index 9af5f0c..51c27cf 100644
--- a/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
+++ b/module_main/src/main/java/com/guiying/module/main/BottomNavigationActivity.java
@@ -8,6 +8,8 @@
import com.guiying.module.common.base.BaseActivity;
import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.ClassUtils;
+import com.guiying.module.common.base.IViewDelegate;
import com.guiying.module.common.base.ViewManager;
import com.guiying.module.common.widget.NoScrollViewPager;
@@ -39,7 +41,7 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
mPager.setCurrentItem(1);
return true;
} else if (i == R.id.navigation_notifications) {
- mPager.setCurrentItem(0);
+ mPager.setCurrentItem(2);
return true;
}
return false;
@@ -57,7 +59,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}
private void initViewPager() {
- mFragments = ViewManager.getInstance().getAllFragment();
+ mFragments = ViewManager.getInstance().getAllFragment();//这几个Fragment是主动添加到ViewManager中的
+ BaseFragment newsFragment = getNewsFragment();//主动寻找
+ mFragments.add(newsFragment);
mPager = (NoScrollViewPager) findViewById(R.id.container_pager);
mAdapter = new FragmentAdapter(getSupportFragmentManager(), mFragments);
mPager.setPagerEnabled(false);
@@ -65,4 +69,18 @@ private void initViewPager() {
}
+ /**
+ * 在News模块中寻找实现的Fragment
+ *
+ * @return Fragment
+ */
+ private BaseFragment getNewsFragment() {
+ BaseFragment newsFragment = null;
+ List viewDelegates = ClassUtils.getObjectsWithInterface(this, IViewDelegate.class, "com.guiying.module.news");
+ if (viewDelegates != null && !viewDelegates.isEmpty()) {
+ newsFragment = viewDelegates.get(0).getFragment("");
+ }
+ return newsFragment;
+ }
+
}
diff --git a/module_news/src/main/java/com/guiying/module/news/MyDelegate.java b/module_news/src/main/java/com/guiying/module/news/MyDelegate.java
index f0aca07..98f55a8 100644
--- a/module_news/src/main/java/com/guiying/module/news/MyDelegate.java
+++ b/module_news/src/main/java/com/guiying/module/news/MyDelegate.java
@@ -1,6 +1,8 @@
package com.guiying.module.news;
-import com.guiying.module.common.base.ApplicationDelegate;
+import android.support.annotation.Keep;
+
+import com.guiying.module.common.base.IApplicationDelegate;
import com.guiying.module.common.base.ViewManager;
import com.orhanobut.logger.Logger;
@@ -11,12 +13,14 @@
* @version V2.8.3
* @name MyDelegate
*/
-public class MyDelegate implements ApplicationDelegate {
+@Keep
+public class MyDelegate implements IApplicationDelegate {
@Override
public void onCreate() {
Logger.init("pattern");
- ViewManager.getInstance().addFragment(0, new NewsFragment());
+ //主动添加
+ ViewManager.getInstance().addFragment(0, NewsFragment.newInstance());
}
@Override
diff --git a/module_news/src/main/java/com/guiying/module/news/MyViewDelegate.java b/module_news/src/main/java/com/guiying/module/news/MyViewDelegate.java
new file mode 100644
index 0000000..0620bb5
--- /dev/null
+++ b/module_news/src/main/java/com/guiying/module/news/MyViewDelegate.java
@@ -0,0 +1,28 @@
+package com.guiying.module.news;
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+import com.guiying.module.common.base.BaseFragment;
+import com.guiying.module.common.base.IViewDelegate;
+
+/**
+ * 类说明
+ *
+ * @author 张华洋 2018/1/4 22:16
+ * @version V2.8.3
+ * @name MyViewDelegate
+ */
+@Keep
+public class MyViewDelegate implements IViewDelegate {
+
+ @Override
+ public BaseFragment getFragment(String name) {
+ return NewsFragment.newInstance();
+ }
+
+ @Override
+ public View getView(String name) {
+ return null;
+ }
+}
diff --git a/module_news/src/main/java/com/guiying/module/news/NewsFragment.java b/module_news/src/main/java/com/guiying/module/news/NewsFragment.java
index e316af6..93c039a 100644
--- a/module_news/src/main/java/com/guiying/module/news/NewsFragment.java
+++ b/module_news/src/main/java/com/guiying/module/news/NewsFragment.java
@@ -15,6 +15,17 @@
*/
public class NewsFragment extends BaseFragment {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @return A new instance of fragment NewsFragment.
+ */
+ public static NewsFragment newInstance() {
+ return new NewsFragment();
+ }
+
+
public NewsFragment() {
// Required empty public constructor
From 59c2ff678fbfed36911ee7d28e3642d38db4a1a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Thu, 4 Jan 2018 22:49:52 +0800
Subject: [PATCH 15/32] Update versions.gradle
---
versions.gradle | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/versions.gradle b/versions.gradle
index 3cd6235..2564818 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -110,17 +110,8 @@ ext.build_versions = build_versions
def addRepos(RepositoryHandler handler) {
- /*公司仓库*/
- handler.maven {
- url "http://maven.hikvision.com.cn/nexus/content/groups/System-Android-down/"
- credentials {
- username "System-Android"
- password "HikSysDeveloper123"
- }
- }
-
handler.google()
handler.jcenter()
}
-ext.addRepos = this.&addRepos
\ No newline at end of file
+ext.addRepos = this.&addRepos
From 1f728c5c2957c65ad3af8e88129aa2430f79f4c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Thu, 4 Jan 2018 22:52:51 +0800
Subject: [PATCH 16/32] =?UTF-8?q?1=EF=BC=9A=E9=80=82=E9=85=8DAndroid=20Stu?=
=?UTF-8?q?dio=203.0=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1:适配Android Studio 3.0;
---
versions.gradle | 1 -
1 file changed, 1 deletion(-)
diff --git a/versions.gradle b/versions.gradle
index 2564818..dd7e50e 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -108,7 +108,6 @@ build_versions.target_sdk = 27
build_versions.build_tools = "27.0.2"
ext.build_versions = build_versions
-
def addRepos(RepositoryHandler handler) {
handler.google()
handler.jcenter()
From c44483a24506765bc932d6a571e3b6f65cddbb16 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Thu, 4 Jan 2018 22:53:37 +0800
Subject: [PATCH 17/32] =?UTF-8?q?1=EF=BC=9A=E9=80=82=E9=85=8DAndroid=20Stu?=
=?UTF-8?q?dio=203.0=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1:适配Android Studio 3.0;
---
settings.gradle | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/settings.gradle b/settings.gradle
index a7e0b34..4e334dd 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,5 +1,6 @@
-include ':module_app',
+include ':lib_common',
+ ':module_app',
':module_main',
':module_girls',
- ':module_news',
- ':lib_common'
+ ':module_news'
+
From fa31aff424a3393369a39294db110f62ef6f9d58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Thu, 4 Jan 2018 22:54:59 +0800
Subject: [PATCH 18/32] =?UTF-8?q?=E6=9B=B4=E6=96=B0git=E7=9A=84ignore?=
=?UTF-8?q?=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index eef2d45..63fc54f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,5 +39,6 @@ captures/
.idea/vcs.xml
.idea/libraries
+
# Keystore files
*.jks
From 5f29fd521a780731ba1d3f72f1c4e17520a7b310 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Thu, 4 Jan 2018 22:56:12 +0800
Subject: [PATCH 19/32] =?UTF-8?q?1=EF=BC=9A=E9=87=8D=E5=86=99=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6=E6=A8=A1=E5=9D=97=E7=9A=84Gradle=E8=84=9A=E6=9C=AC?=
=?UTF-8?q?=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1:重写组件模块的Gradle脚本;
---
versions.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/versions.gradle b/versions.gradle
index dd7e50e..2564818 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -108,6 +108,7 @@ build_versions.target_sdk = 27
build_versions.build_tools = "27.0.2"
ext.build_versions = build_versions
+
def addRepos(RepositoryHandler handler) {
handler.google()
handler.jcenter()
From 434bb4ff81eaa989c779e1724bb87b43ae199996 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Thu, 4 Jan 2018 22:57:47 +0800
Subject: [PATCH 20/32] Update README.md
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 958f54a..47b787d 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ Android项目组件化示例代码
## 集成开发模式和组件开发模式转换
-**1、首先打开Android项目的 gradle.properties 文件,然后将 isModule 改为你需要的开发模式,
+**1、首先打开Android项目的 gradle.properties 文件,然后将 isModule 改为你需要的开发模式(true/false),
然后点击 "Sync Project" 按钮同步项目;**
**2、 在运行之前,请先按照图中选择一个能够运行的组件;**
@@ -71,4 +71,4 @@ Android项目组件化示例代码
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
- limitations under the License.
\ No newline at end of file
+ limitations under the License.
From 1b49c74ed0eaedefc4f8565d3f369823ca382c6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Fri, 5 Jan 2018 14:55:59 +0800
Subject: [PATCH 21/32] Update README.md
---
README.md | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 47b787d..438a057 100644
--- a/README.md
+++ b/README.md
@@ -21,9 +21,7 @@ Android项目组件化示例代码
2. Android组件化方案已经支持 **Fragment组件化**,使用方法请下载Demo查看;
-3. 目前Android组件化方案还没有写完,后续会**继续更新**,完善组件化方案。
-
-4. 本项目已适配Android Studio 3.0.1版本(Google仓库会带来一定影响)
+3. 本项目已适配Android Studio 3.0.1版本(Google仓库会带来一定影响)
## 集成开发模式和组件开发模式转换
From 21b409e3484b29bf3fa56e5a02c82049414e9e7f Mon Sep 17 00:00:00 2001
From: guiying712
Date: Fri, 19 Jan 2018 13:50:12 +0800
Subject: [PATCH 22/32] =?UTF-8?q?1=EF=BC=9AAdd=20the=20JitPack=20repositor?=
=?UTF-8?q?y=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
gradle.properties | 2 +-
versions.gradle | 13 ++++---------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/gradle.properties b/gradle.properties
index 9b51cd5..3ee61c6 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,4 +23,4 @@ localGradlePluginVersion=3.0.1
# ÿθġisModuleֵҪ "Sync Project" ť
# isModuleǡɿģʽ͡ģʽл
-isModule=false
+isModule=true
diff --git a/versions.gradle b/versions.gradle
index 3cd6235..e4663ed 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -110,17 +110,12 @@ ext.build_versions = build_versions
def addRepos(RepositoryHandler handler) {
- /*公司仓库*/
- handler.maven {
- url "http://maven.hikvision.com.cn/nexus/content/groups/System-Android-down/"
- credentials {
- username "System-Android"
- password "HikSysDeveloper123"
- }
- }
-
handler.google()
handler.jcenter()
+ handler.mavenCentral()
+ //Add the JitPack repository
+ handler.maven { url "https://jitpack.io" }
+ handler.maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
ext.addRepos = this.&addRepos
\ No newline at end of file
From 71d04d4e1b850366a9fcef22e4642ee32a214d1a Mon Sep 17 00:00:00 2001
From: guiying712
Date: Fri, 19 Jan 2018 13:53:21 +0800
Subject: [PATCH 23/32] =?UTF-8?q?1=EF=BC=9AAdd=20the=20JitPack=20repositor?=
=?UTF-8?q?y=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index 3ee61c6..9b51cd5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,4 +23,4 @@ localGradlePluginVersion=3.0.1
# ÿθġisModuleֵҪ "Sync Project" ť
# isModuleǡɿģʽ͡ģʽл
-isModule=true
+isModule=false
From 9cba1d8c9ebb58e6e85c60486c44a4b1816da11d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Fri, 19 Jan 2018 13:55:19 +0800
Subject: [PATCH 24/32] Add the JitPack repository
---
versions.gradle | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/versions.gradle b/versions.gradle
index 2564818..4a8a289 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -112,6 +112,10 @@ ext.build_versions = build_versions
def addRepos(RepositoryHandler handler) {
handler.google()
handler.jcenter()
+ handler.mavenCentral()
+ //Add the JitPack repository
+ handler.maven { url "https://jitpack.io" }
+ handler.maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
ext.addRepos = this.&addRepos
From 60147ff3ca0a26eb657b7b1b7b899e30e4ff2312 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Fri, 26 Jan 2018 10:31:28 +0800
Subject: [PATCH 25/32] Update BaseActionBarActivity.java
---
.../guiying/module/common/base/BaseActionBarActivity.java | 7 -------
1 file changed, 7 deletions(-)
diff --git a/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java b/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
index c32f18e..85c8570 100644
--- a/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
+++ b/lib_common/src/main/java/com/guiying/module/common/base/BaseActionBarActivity.java
@@ -1,10 +1,3 @@
-/*
- * @ProjectName: ISMS_Petrel_MCU
- * @Copyright: 2017 HangZhou Hikvision System Technology Co., Ltd. All Right Reserved.
- * @address: http://www.hikvision.com
- * @Description: 本内容仅限于杭州海康威视系统技术公有限司内部使用,禁止转发.
- */
-
package com.guiying.module.common.base;
import android.os.Bundle;
From 310cc39b0c07a90753cc42639767b724a14c84e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Sat, 3 Feb 2018 11:39:49 +0800
Subject: [PATCH 26/32] Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 438a057..6510e50 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,8 @@
Android项目组件化示例代码
+**声明**:此方案只适用于小团体小项目使用(不涉及跨部门或跨公司)。
+
**Android组件化方案**:http://blog.csdn.net/guiying712/article/details/55213884
**Android组件化之终极方案**:http://blog.csdn.net/guiying712/article/details/78057120
From fc8e0d117fced81950f5f7779932c8ef7e5163dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Tue, 27 Feb 2018 11:34:22 +0800
Subject: [PATCH 27/32] Update README.md
---
README.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/README.md b/README.md
index 6510e50..438a057 100644
--- a/README.md
+++ b/README.md
@@ -13,8 +13,6 @@
Android项目组件化示例代码
-**声明**:此方案只适用于小团体小项目使用(不涉及跨部门或跨公司)。
-
**Android组件化方案**:http://blog.csdn.net/guiying712/article/details/55213884
**Android组件化之终极方案**:http://blog.csdn.net/guiying712/article/details/78057120
From b12215432cf74e9647fddcd27fe1d5e4b893e545 Mon Sep 17 00:00:00 2001
From: guiying712
Date: Wed, 28 Feb 2018 14:46:16 +0800
Subject: [PATCH 28/32] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9=E6=89=93?=
=?UTF-8?q?=E5=8C=85release=E8=84=9A=E6=9C=AC=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module_girls/build.gradle | 3 +--
module_main/build.gradle | 3 +--
module_news/build.gradle | 3 +--
3 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/module_girls/build.gradle b/module_girls/build.gradle
index d0662b8..7695843 100644
--- a/module_girls/build.gradle
+++ b/module_girls/build.gradle
@@ -40,11 +40,10 @@ android {
buildTypes {
release {
- buildConfigField "boolean", "LOG_DEBUG", "true"
+ //buildConfigField "boolean", "LOG_DEBUG", "true"
zipAlignEnabled false
shrinkResources false
minifyEnabled false
- debuggable true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
diff --git a/module_main/build.gradle b/module_main/build.gradle
index d0662b8..7695843 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -40,11 +40,10 @@ android {
buildTypes {
release {
- buildConfigField "boolean", "LOG_DEBUG", "true"
+ //buildConfigField "boolean", "LOG_DEBUG", "true"
zipAlignEnabled false
shrinkResources false
minifyEnabled false
- debuggable true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
diff --git a/module_news/build.gradle b/module_news/build.gradle
index d0662b8..7695843 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -40,11 +40,10 @@ android {
buildTypes {
release {
- buildConfigField "boolean", "LOG_DEBUG", "true"
+ //buildConfigField "boolean", "LOG_DEBUG", "true"
zipAlignEnabled false
shrinkResources false
minifyEnabled false
- debuggable true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
From 1219951b677cac9ee81ce13ae22a117d85f25811 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Wed, 28 Feb 2018 14:48:17 +0800
Subject: [PATCH 29/32] Update build.gradle
---
module_news/build.gradle | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/module_news/build.gradle b/module_news/build.gradle
index d0662b8..7695843 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -40,11 +40,10 @@ android {
buildTypes {
release {
- buildConfigField "boolean", "LOG_DEBUG", "true"
+ //buildConfigField "boolean", "LOG_DEBUG", "true"
zipAlignEnabled false
shrinkResources false
minifyEnabled false
- debuggable true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
From 88f0c49b78c4940dfe3b05b51c06e546ea09eb5b Mon Sep 17 00:00:00 2001
From: guiying712
Date: Thu, 1 Mar 2018 13:44:48 +0800
Subject: [PATCH 30/32] =?UTF-8?q?1=EF=BC=9A=E4=BF=AE=E6=94=B9=E6=89=93?=
=?UTF-8?q?=E5=8C=85release=E8=84=9A=E6=9C=AC=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
module_girls/build.gradle | 3 ---
module_main/build.gradle | 3 ---
module_news/build.gradle | 3 ---
3 files changed, 9 deletions(-)
diff --git a/module_girls/build.gradle b/module_girls/build.gradle
index 7695843..a1838bd 100644
--- a/module_girls/build.gradle
+++ b/module_girls/build.gradle
@@ -40,9 +40,6 @@ android {
buildTypes {
release {
- //buildConfigField "boolean", "LOG_DEBUG", "true"
- zipAlignEnabled false
- shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
diff --git a/module_main/build.gradle b/module_main/build.gradle
index 7695843..a1838bd 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -40,9 +40,6 @@ android {
buildTypes {
release {
- //buildConfigField "boolean", "LOG_DEBUG", "true"
- zipAlignEnabled false
- shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
diff --git a/module_news/build.gradle b/module_news/build.gradle
index 7695843..a1838bd 100644
--- a/module_news/build.gradle
+++ b/module_news/build.gradle
@@ -40,9 +40,6 @@ android {
buildTypes {
release {
- //buildConfigField "boolean", "LOG_DEBUG", "true"
- zipAlignEnabled false
- shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
From 2f43b6d8f475eb43cb6cf2b122534e18d253a65f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E6=B4=8B?=
Date: Tue, 6 Mar 2018 16:54:46 +0800
Subject: [PATCH 31/32] Update AndroidManifest.xml
---
module_main/src/main/module/AndroidManifest.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/module_main/src/main/module/AndroidManifest.xml b/module_main/src/main/module/AndroidManifest.xml
index a5eb0d9..c9d51ec 100644
--- a/module_main/src/main/module/AndroidManifest.xml
+++ b/module_main/src/main/module/AndroidManifest.xml
@@ -1,6 +1,6 @@
+ package="com.guiying.module.main">
-
\ No newline at end of file
+