PS: 最近沒工作,沒工作就沒需求,沒需求就沒什麼技術總結的靈感,那就沒更新什麼。但是兩個月不更新了,要是三個月不更新就會出大事,所以這次打算做一件有意思又不難的事。
之前有發文章寫過反編譯,今天就來試試反編譯之正編譯,開玩笑的,就是試試手動編譯的過程, 平時我們在項目中編譯出包都是使用Gradle直接執行assemble任務就能解決,我打算試試手動模擬整個過程。當然我也是第一次這樣搞,所以如果有寫得不對的地方,還望指出。
眾所周知,apk實質上就是一個壓縮包。復習一下,我們寫個最簡單的Demo,然後打包,然解壓,注意是解壓,不是反編譯,意義是不同的。
注意我這個Demo很簡單,什麼都不引入
然後我們看看整個出包的過程,隨便從網上拿張圖
然後這里我們用Android SDK給我們提供的工具來完成整個流程,工具在sdk文件夾下的build-tools文件夾下,有什麼aapt.exe、dx.bat,用的就是這些
這步應該是整個流程最簡單的吧,我感覺,所以從最簡單的開始。
我們先看看生成的dex有什麼
對比項目,我是一開始最基本的項目,什麼都沒動,所以只有一個MainActivity.clas,所以這里肯定是要先想辦法得到BuildConfig.class和R.class。
輸入命令:
aapt p -f -m -J <輸出路徑> -S <res路徑> -I <android.jar路徑> -M <Manifest路徑>
下一步,我們需要BuildConfig.class
這個BuildConfig.java是由gradle在我們配置好gradle之後自己幫我們生成的,所以我們直接拿來用,然後再javac就得到class文件了
然後我們再編譯我們的MainActivity.java並將它們放到同一個文件夾下, MainActivity因為引用了Android.jar和R文件,所以編譯時注意點,我為此被動好好的復習了一遍javac,都是淚
最後一步,我們用dx工具就能打出dex文件了
然後執行命令就得到一個Dex文件,看看這個文件裡面和上面直接打出的apk中的Dex文件有什麼不同:
看圖,我們上一步已經生成.dex了,那麼我們需要和compiled Resource 還有 Other Resource 一起生成APK。
我們先來生成compiled Resource,也就是resources.arsc
發現之前使用aapt生成R文件的時候沒寫完整,當時可以加一個-F參數直接生成arsc和Manifest
導出的abc.zip裡面就有resources.arsc和AndroidManifest.xml。
因為之前寫漏了,所以肯定要重新編一次MainActivity.java和Dex
我們把剛才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一個文件夾裡面。
PS:res文件夾也是上面aapt的命令生成的
然後我們對比這個文件夾和之前apk解壓的文件夾
最後運行
看來是成功了。
再說說遇到的還有兩個問題,並說下我解決問題的思路
(1)我把它們都放到一個文件夾之後,我壓縮成壓縮包,然後改後綴成.apk,然後發現安裝不了,我就直接反編譯,發現發編譯失敗,提示包有問題,以我多點玩包的經驗,我感覺就是壓縮工具出了問題,然後我去下個「好壓」(這不是廣告啊),然後就能正常反編譯了。
(2)但是還是安裝不了,再根據我多年的玩包經驗,我感覺是簽名問題,然後我隨便給這個包上一個簽名,就能正常安裝得到上圖的結果了。
總體來說,還真挺好玩的,這整個過程,就是翻車了幾次。做完之後感覺非常牛逼,為什麼這樣說,因為我知道這整個過程,我就可以做到,我不經過gradle來打包,我自己寫個python腳本來調用aapt和dx來打包也是能做到的。
當然上面純屬異想天開,因為這是個什麼都沒有的Demo所以覺得簡單,要是一個真實的項目,我感覺肯定要有很多坑,別的先不說,一個項目那麼多依賴關系,我這javac要搞死人。
最後如果有不對的地方,希望有大佬能夠指出,畢竟能運行也不能證明完全沒問題。然後我使用的build-tools是28的,不敢保證其它版本包括以後版本的玩法都一樣。
2. 編譯文章跟翻譯有區別嗎 是原版嗎看編譯的文章好嗎
編譯文章跟翻譯是有區別的。
編譯是在翻譯的基礎上根據需要進行內容選擇,選取一部分構成一篇文章,而翻譯多數是中英翻譯。
3. 什麼是編譯文章,和翻譯有區別嗎編譯會構成侵權嗎
有區別,編譯是在翻譯的基礎上進行內容選擇,最夠選取一部分構成一篇文章,而翻譯就是中英翻譯
4. 報刊上,文章旁的作者名字有編譯字樣是什麼意思
指的是該文是作者從外國的相關文章中翻譯過來的。所謂「編」字,可以對應於「編著」,是指這個翻譯,是經過作家的一些處理的,包括文字上或者編輯上的處理,總體和原文的中心思想是一致的,但不是百分百的翻譯過來的。
5. 機器之心編譯的文章「線性回歸的局限性」如何
原文鏈接:http://tecdat.cn/?p=20882
1導言
這篇文章探討了為什麼使用廣義相加模型是一個不錯的選擇。為此,我們首先需要看一下線性回歸,看看為什麼在某些情況下它可能不是最佳選擇。
2回歸模型
假設我們有一些帶有兩個屬性Y和X的數據。如果它們是線性相關的,則它們可能看起來像這樣:
a<-ggplot(my_data, aes(x=X,y=Y))+geom_point()+
10它比線性模型好嗎?
讓我們對比具有相同數據的普通線性回歸模型:
我們的方差分析函數在這里執行了f檢驗,我們的GAM模型明顯優於線性回歸。
11小結
所以,我們看了什麼是回歸模型,我們是如何解釋一個變數y和另一個變數x的。其中一個基本假設是線性關系,但情況並非總是這樣。當關系在x的范圍內變化時,我們可以使用函數來改變這個形狀。一個很好的方法是在「結」點處將光滑曲線鏈接在一起,我們稱之為「樣條曲線」
我們可以在常規回歸中使用這些樣條曲線,但是如果我們在GAM的背景中使用它們,我們同時估計了回歸模型以及如何使我們的模型更光滑。
上面的示例顯示了基於樣條的GAM,其擬合度比線性回歸模型好得多。
12參考:
NELDER, J. A. & WEDDERBURN, R. W. M. 1972. Generalized Linear Models. Journal of the Royal Statistical Society. Series A (General), 135, 370-384.
HARRELL, F. E., JR. 2001. Regression Modeling Strategies, New York, Springer-Verlag New York.
最受歡迎的見解
1.R語言多元Logistic邏輯回歸 應用案例
2.面板平滑轉移回歸(PSTR)分析案例實現
3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)
4.R語言泊松Poisson回歸模型分析案例
5.R語言回歸中的Hosmer-Lemeshow擬合優度檢驗
6.r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現
7.在R語言中實現Logistic邏輯回歸
8.python用線性回歸預測股票價格
9.R語言如何在生存分析與Cox回歸中計算IDI,NRI指標
6. 專著、編著、編書、教材如何來區分和界定
一、專著、編著、編書、教材的區別和界定
1、含義:專著指的是針對某一專門研究題材的,是著作的別稱;編著,一種著作方式,基本上屬於編寫;編書是指對一門科目進行的論述;教材是依據課程標准編制的、系統反映學科內容的教學用書。
2、對象:專著的對象是某一專門研究的題材;編著的對象是獨自見解的陳述,或補充有部分個人研究、發現的成果;編書的對象是某一科目,某一知識編輯成冊;教材的對象是目錄,課文、習題、實驗、圖表、注釋和附錄等部分構成,課文是教材的主體。
3、形式:專著可以分為單篇學術論文、系列學術論文和學術專著三種;編著、教材、編書大致是以書的形式展現出來。
二、專著、學術專著、個人學術專著的區別和界定
1、含義:專著指的是針對某一專門研究題材的,是著作的別稱;學術專著是指作者根據在某一學科領域內科學研究的成果撰寫成的理論著作,該著作應對學科的發展或建設有重大貢獻和推動作用,並得到國內外公認;個人專著是指由個人完成的一項研究成書的專著。
2、范圍:,專著的范圍包含學術專著,也就是學術專著是專著中的一種,同時個人學術專著有是學術專著中的一種。
3、完成人數:專著和學術專著都可以由多人完成,個人專著只能由一個人完成。
(6)自己編譯的文章擴展閱讀
專著深層解析
1、學術論文
學術論文,學術通常是指專深而系統的學問,而論文則是指研究、討論問題的文章。因此,所謂學術論文就是在科學領域內表達科學研究成果的文章。從這一意義上理解,學術論文一般也可以稱為科學論文。
其一,學術論文的范圍限制在科學研究領域,非此領域的文章,不能算學術論文,如新聞報道、報告文李、散文和雜文等就不能算學術論文。
其二,我們說學術論文限制在學術領域,但並非說,科學領域的所有的文章都是學術論文,而只有表達科學研究新成果的文章才是學術論文。照這樣理解,科幻和科普作品就應被排除於學術論文之外了。
2、投稿論文
研究人員寫給學術期刊、雜志或學術出版社要求發表的文章。
3、命題論文
上級領導部門根據社會的需要提交給科研人員的研究項目文章,或者由指導教師提交給研究生、大學生的研究課題文章。
4、畢業論文
大學生畢業時編撰的論文。
5、學位論文
授予學位的人(碩士或博士)撰寫的論文。
6、計算機軟體論文