1 關(guān)于項(xiàng)目大體框架的思路
? (1) 關(guān)于框架主體用的模式
????????傳統(tǒng)的mvc勝在方便,但是后期拓展性弹砚,維護(hù)性差
????????mvp勝在拓展性,維護(hù)性較好,但是接口繁多,謹(jǐn)慎處理引用
????????mvvm個(gè)人感覺(jué)可以替代ButterKnife
????????所以個(gè)人更偏向使用使用mvc+mvvm+接口回調(diào)的方式來(lái)達(dá)到mvp+mvvm的效果
? ? (2) 通過(guò)封裝接口事件按照份屬模塊類型進(jìn)行統(tǒng)一回調(diào)處理
????????例如 地圖事件 ?菜單事件 ?模塊事件 ?登錄事件
????????比如現(xiàn)在又個(gè)項(xiàng)目里面要做登錄這個(gè)功能 一般因?yàn)橛芍黜?xiàng)目衍生出其他類型的項(xiàng)目
????????在風(fēng)格上基本大同小異 這個(gè)登錄做個(gè)類比 實(shí)際項(xiàng)目中自己可以根據(jù)需求替換
????????現(xiàn)在就需要設(shè)計(jì)類 LoginView LoginViewAction 實(shí)現(xiàn)類一般會(huì)涉及到了ui操作
????????所有一般會(huì)放在Activity里面
????????????????1 初始化 ? ? ? 比如loginView(String... args)
????????????????2 注入接口 ? ? 比如loginView(loginAction)
????????????????3 實(shí)例化參數(shù) ? 開(kāi)始在回調(diào)方法里面完善對(duì)應(yīng)的邏輯
????????這種通過(guò)依賴注入提煉出來(lái)的模塊在在其他衍生的模塊可以直接拿來(lái)用 快捷方便
????????在一定程度上分割出對(duì)應(yīng)的邏輯
(3) 關(guān)于mvc+mvvm+aop的思考,aop感覺(jué)和mvp核心思想非常相像(單一職責(zé)暖庄,接口分離)
????????一個(gè)簡(jiǎn)單的注解對(duì)應(yīng)一個(gè)功能问芬,雖然在一定程度上集成麻煩,不過(guò)在在后臺(tái)使用
????????aop如火如荼的情況下,android使用非常少讓在下很是費(fèi)解类垫。
2 ?關(guān)于代碼外在表現(xiàn)形式的思考
? ? ? ? (1) 做成arr包的模式
????????????????1 優(yōu)勢(shì)在于源代碼是被封裝起來(lái)的 查看起來(lái)相對(duì)麻煩
????????????????2 劣勢(shì)在于做成這種模式的話 編譯出來(lái)的arr在windows系統(tǒng)上
? ? ? ? ? ? ? ? ? ? 直接替換arr包沒(méi)清理緩存會(huì)引用緩存的class文件
? ? ? ? ? ? ? ? ? 3 改動(dòng)不大的前提條件下 做成arr包是個(gè)不錯(cuò)的選擇
? ? ? ? (2) 做成model的形式
????????????????1 ?代碼挺暴露的司光,就像沒(méi)穿衣服一樣,容易修改
? ? ? ? ?(3) 做成apk的形式
? ? ? ? ? ? ? ? ? 1 這個(gè)就很少了,插件化開(kāi)發(fā),在eclipse下面有著sharedUserId這個(gè)
? ? ? ? ? ? ? ? ? 屬性,做成插件化開(kāi)發(fā)更方便悉患。
3 ? 關(guān)于日志文件和項(xiàng)目調(diào)試這塊
? ? ? ? (1) 關(guān)于日志 首先要說(shuō)的是studio(idea類似) 在adb沒(méi)連接的情況下
? ? ? ? ?或者端口被占等等 造成進(jìn)程奔潰的時(shí)候控制臺(tái)看不到日志 這個(gè)時(shí)候就突兀出了
? ? ? ? ? 本地日志的重要性 一般都是實(shí)現(xiàn)Thread.UncaughtExceptionHandler類残家,系統(tǒng)出現(xiàn)
? ? ? ? ? crash的時(shí)候一般會(huì)回調(diào)uncaughException方法 這個(gè)網(wǎng)上比較多的工具類就不敘述了,
? ? ? ? ? ?養(yǎng)成良好的閱讀日志習(xí)慣是很必要的售躁。
????????(2) 關(guān)于項(xiàng)目調(diào)試這塊 這就不得不說(shuō)后臺(tái)了 有的時(shí)候項(xiàng)目出了問(wèn)題為了要證明是誰(shuí)的
????????????鍋坞淮,我們一般也要調(diào)試來(lái)拿到后臺(tái)的數(shù)據(jù)甩出去才更有底氣,
?????????????首先要說(shuō)的studio陪捷, studio相比elcipse回窘,還是elcipse這塊相對(duì)于
????????????更好用,studio覺(jué)得比較實(shí)用的快捷鍵在于 F8(執(zhí)行下一步) F9(下一個(gè)斷點(diǎn)) alt+F8(測(cè)試代碼結(jié)果)
????????????大家都知道點(diǎn)擊左鍵是調(diào)試 但是點(diǎn)擊完左鍵點(diǎn)擊右鍵可以加上條件限制
????????????關(guān)于elcipse,F6(執(zhí)行下一步)F8(下一個(gè)斷點(diǎn)) Expressions add new expression(測(cè)試代碼結(jié)果)
? ? ? ? ? ? (3) 關(guān)于項(xiàng)目構(gòu)建問(wèn)題 一般可以在gradle控制臺(tái)找到具體原因 這個(gè)功能在idea里面是沒(méi)有的
4 關(guān)于混淆apk和破解apk
????????1 首先是關(guān)于混淆apk elcipse和studio都有自帶的混淆規(guī)則的文件
????????????在elispse上面在projec.properties里面proguard.cofig=這個(gè)是混淆文件的名字
????????????在studio上面在app gradel里面 設(shè)置minifyEnable true并且設(shè)置自己的混淆規(guī)則文件
????????2 關(guān)于破解apk 需要用到apktool dex2jar jd-gui還有用到的反編譯的apk
????????????????(1)首先把a(bǔ)pk后綴改成zip 然后解壓得到classex.dex文件
????????????????(2)定位到dex2jar包下面 把classex.dex文件放入
????????????????(3)終端執(zhí)行 d2j-dex2jar.bat classes.dex
????????????????(4)把生成的jar包用jd-gui打開(kāi)
????????????????????關(guān)于資源文件的反編譯
????????????????????1 定位到apktool目錄下面
????????????????????2 終端執(zhí)行apktool.bat d -f app.apk
????????????????3 得到對(duì)應(yīng)的app文件夾里面存放的是對(duì)應(yīng)的資源文件
5 關(guān)于android的aop思考和問(wèn)題
????????1 ?首先是aop是能解決什么問(wèn)題或者說(shuō)aop的優(yōu)勢(shì)(解決重復(fù)的代碼判斷,以注解的形式來(lái)簡(jiǎn)潔代碼結(jié)構(gòu))
????????????????1 單一職責(zé),對(duì)應(yīng)相同的功能邏輯對(duì)應(yīng)一個(gè)類,已注解的形式來(lái)實(shí)現(xiàn) 對(duì)內(nèi)隱藏細(xì)節(jié)對(duì)外暴露接口
????????????更符合接口隔離原則揩局,依賴倒置原則毫玖,開(kāi)閉原則。
????????????????2 ?一般核對(duì)登錄 打印方法時(shí)間 權(quán)限核對(duì) 這種重復(fù)的代碼可以減少很多 代碼會(huì)更加的簡(jiǎn)潔 邏輯結(jié)構(gòu)清楚
????????????????3 ?關(guān)于aop的實(shí)現(xiàn)現(xiàn)在一般是依托于aspject框架 因?yàn)樾枰胊jc編譯所有需要配置gradle,這里
? ? ? ? ? ? ? 只講配置gradle插件容易出現(xiàn)問(wèn)題的地方
????????????????????????1 是命名問(wèn)題項(xiàng)目名稱盡量和artfactId一致
? ? ? ? ? ? ? ? ? ? ? ? 2 是groovy下面的包名有的時(shí)候會(huì)出現(xiàn)自動(dòng)隱藏問(wèn)題 比如你創(chuàng)建包名為com.yellow.plugin 里面創(chuàng) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?建Yellow.groovy 在resources下面implementation-class=com.yellow.plugin.Yellow找不到這個(gè)類時(shí) 需要重新 ? ? ? ? ? ? ? ? ? ? ? ? ?再創(chuàng)建
????????????????????????3 編寫groovy插件的時(shí)候一定要保證語(yǔ)法正確(可以下個(gè)groovysdk自己猜測(cè)下) 要不然會(huì)出現(xiàn)插件找不到錯(cuò) ? ? ? ? ? ? ? ? ? ? ? ? ?誤付枫,本地插件更新時(shí) ?要重新上傳一遍
6 關(guān)于項(xiàng)目適配的思考(請(qǐng)先從美工拿到圖的分辨率)
????????????????1 手機(jī)(現(xiàn)在一般是1280*720烹玉,美工出圖一般也是這個(gè))
????????????????????????????????1 可以創(chuàng)建一個(gè)Library比如resource來(lái)專門做適配
????????????????????????????????2 根據(jù)美工給的尺寸分辨率來(lái)生成對(duì)應(yīng)的dimens,drawable
????????????????????????????????3 除了圖標(biāo)關(guān)于圖片都用drawable顯示
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4 weight的使用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?5 關(guān)于margin和padding的區(qū)別(padding是控件本身內(nèi)部距離,意味著點(diǎn)擊范圍增大)
????????????????2 平板(這里只講目前項(xiàng)目使用的方案)
????????????????????????????????發(fā)現(xiàn)使用最低限制符能起到一個(gè)很好的作用 用到的平板尺寸一般是2560*1600*320 這個(gè)就是sw-800
????????????????????????????????平板的尺寸更加多樣 對(duì)于限制最小寬度來(lái)做適配是相對(duì)于其他選擇是更方便和快捷的
7 關(guān)于項(xiàng)目框架的思考MVC和MVP和MVVM的必要
? ? ? ? ?1 MVC 走一步算一步的模式 需求阐滩?加 邏輯變換二打?改
????????????????????????????1承擔(dān)著視圖和邏輯的activity很容易變得臃腫
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2 曾經(jīng)做過(guò)一個(gè)聊天的頁(yè)面,輕輕松松到了2000多行代碼 甚至還有各種回調(diào)和Eventbus的使用掂榔,可讀 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?性和維護(hù)性都很差继效,不過(guò)小項(xiàng)目擼代碼還是很方便的.
????????????????????????????3 后期邏輯的變化,代碼的修改很容易造成代碼,結(jié)構(gòu)層次的混亂装获,拓展性很差瑞信。
????????????2 MVP 青出于藍(lán) 劃分出一個(gè)Present來(lái)掌管邏輯 Contract是具體接口方法的管家,分 ? ? ? ? ? ? ? ?工明確穴豫。后期項(xiàng)目
? ? ? ? ? ? ? ? ? ? ? 維護(hù)起來(lái)相對(duì)于來(lái)說(shuō)更方便凡简,層級(jí)更清楚。但是也有幾個(gè)小缺點(diǎn)
????????????????????????1 代碼量問(wèn)題比起MVC的模式要大很多
????????????????????????2 關(guān)于P持有引用造成內(nèi)存泄漏問(wèn)題
????????????????????????3在比較復(fù)雜的需求下,P的代碼量會(huì)非常大精肃,而且關(guān)于視圖控件的引用會(huì)比較多
????????????3 MVVM不知道各位看官怎么想法秤涩,反正使用過(guò)后第一印象是不需要ButterKnife了
????????????????????1 數(shù)據(jù)的雙重綁定在一定程度上,用起來(lái)是挺方便但是架不住需求的頻繁變更
? ? ? ? ? ? ? ? ? ? ?2 布局變化后需要重構(gòu)才能生成綁定的ActivityBinding
????????????????????3 Model的變化可以體現(xiàn)在ViewModel上,但是容易導(dǎo)致業(yè)務(wù)邏輯不是很明確
? ? ? ? ? ? ? ? ? ? ?4 布局layout里面要注意加上android的熟悉 比如需要在一個(gè)控制一個(gè)控件的visible 需要導(dǎo)
? ? ? ? ? ? ? ? ? ? 入<improt type="android.view.View">