導航:首頁 > 源碼編譯 > 工程清單源碼

工程清單源碼

發布時間:2022-10-15 14:12:04

㈠ 找軟體外包公司做項目,需要注意什麼問題

喜妹把某些外包公司開發App的套路寫出來給大家提個醒!一定要注意以下五點!

套路一、虛假的知名案例

一般來說,客戶和外包公司有三次現實交流的機會。

1.初步交涉:雙方建立聯系,外包公司自我介紹,客戶闡述需求。

2.實地考察:客戶親臨外包公司,看看公司規模、辦公場地、員工架構。

3.達成合作:確認需求,簽署合同,開始研發。

三步環環相扣,內藏殺機。

初步交涉階段,客戶會問外包公司有哪些案例,某些不靠譜的外包公司會用各種成功案例吹噓自己,美團是我們做的,滴滴交給我們外包過,陌陌也是我們的案例......但細問之後卻不能說出產品細節和開發過程。

相比之下,那些敢拿出一些自家真實開發但是不知名的成功案例給客戶看的外包公司更坦誠一些,也更值得信任(畢竟沒有那麼多的案例可以一成而就,很多需要時間的沉澱)。


套路二、需求不明確就直接報價

一般在初步交涉時,客戶就會想了解報價情況。如果外包公司在未了解清楚需求後直接脫口而出一個准確的價格,那就可以直接pass了。

因為開發一個App,小到登錄方式,大到產品信息架構,不同的需求對一個項目的定價就有很大區別。在需求不明確的情況下就直接說出價格的外包公司,純粹就是為了利用低價引誘客戶。

所以,當外包公司在報價前詳細的問了很多需求,這才是對客戶負責的表現,這會是一個好的開始。


套路三、公司全靠銷售撐著

在利用知名案例和低價忽悠之後,就進入了第二步。畢竟客戶還是會持有「眼見為實,耳聽為虛」的懷疑態度,需要進行實地考察,看看他們的員工配置是怎樣的,有幾個工程師,有幾個產品經理和UI,有幾個做銷售的。

某些外包公司只為了多接單,並不注重技術,所以工程師的人員佔比會比較少,可能連產品經理都沒有。

拿最常用的登錄方式這一塊來舉例,如果前期沒考慮周全,只想到用手機驗證碼登錄,而在後期想增加通過微信、QQ登錄。其實只是一個很簡單的小需求,流程邏輯是同樣的,但某些外包公司就會搬出合同來說事,只要增加了需求就要求加錢。

當然也有前期低價競標,中途高價增加需求的;也有消極怠工,粗製濫造的;還有趾高氣昂,求著開發的;更有雇無經驗的實習生,磕磕絆絆開發......這樣開發的App和外包公司完全是個無底洞,你放心嗎?


所以,針對喜妹上面講的那五「陰」真經,客戶該如何擦亮眼去識破這些套路呢?別急,喜望軟體來傳授你天龍八「步」。

第一步、查明真偽

當他們說哪些哪些知名案例是他們做的時,不要光聽,得看他們的案例圖、UI圖,有上線的App就去下載下來實際操作體驗一下,看看邏輯功能有沒有問題、設計風格怎麼樣、會不會突然閃退或崩潰等等。

第一次實地考察後,還可以偷偷去突擊考察,考察員工、場地。畢竟真金不怕火煉,好公司不怕突擊。


第二步、明確需求

只有自己最清楚自己要什麼,你的app到底需要什麼風格、需要什麼功能、不需要什麼功能,一定要有清晰的想法。可以聽聽外包團隊的建議,但不能完全被他們帶著走了。溝通好的細節需求也一定要全部落實到需求文檔還有功能清單或者原型圖上,挨個確認簽字。


第三步、專業產品

外包團隊一定要有產品經理這一個崗位,他是客戶與程序員之間最好的溝通橋梁。當客戶說不清需求,程序員也聽不懂需求的時候,最好的翻譯就是產品經理了。

專業的他們能站在用戶及客戶的角度上把需求掰碎了、捋順了傳達給程序員,可以避免很多溝通和開發問題,能讓app開發更順利。


第四步、跟蹤進度

客戶需要清楚app的開發流程及工期安排,在正式進入項目開發之前,外包團隊會對項目研發周期、提測時間、預發布時間點進行初步的判斷,把項目需求劃分成節點進行迭代開發計劃。每個節點開發且測試完成後給客戶遞交周報或驗收確認,然後再繼續開發下一節點。


第五步、檢查合同

一般都沒有一次就定好的合同,在簽合同之前要考慮好:項目是否按照前期原型圖做、功能是否完善可用、工期安排是否合理和付款方式等。法治社會,大家都是守法的人,正規的外包公司都會跟客戶簽訂正規的開發合同。所以之前提到過的開發方式、需求、UI、工期和款項等,都必須要在合同里有嚴格的規定。


第六步、定製&成品

成品app就是套用其他app的模板,這樣可能就沒有自己的特色,如需增加功能就得另外加錢了。而定製開發就是完全根據客戶自己的需求來做,價格比成品app要高,工期也會更長。

兩者各有各的優劣勢,客戶可以自行分析選擇,但要注意的是,若是直接購買成品,對於功能模塊的增減,外包公司是否能做、價格是否合理,這個需要提前溝通清楚;若選擇定製開發,就要防止外包公司不按前期原型圖來做,而是給你套模板。


第七步、源碼交付

別以為項目開發完就完全放心了,交付也是很重要的一塊。外包團隊需要按照合同規定,將源碼(含源碼)、說明文檔、操作文檔等所有項目的相關資料交付給客戶。

包括但不限於:

1.前後端項目的所有最新源代碼(含注釋)

2.資料庫設計文檔

3.API介面文檔

4.所有的開發者賬號資料

5.原型設計稿

6.UI設計稿

7.項目相關文檔等資料

一定要把源碼拿到自己手上,方便後期進行迭代開發及系統維護。


第八步、完整服務

完整服務是指不僅提供單純的技術服務,同時提供包括產品設計、用戶體驗、技術咨詢及運營維護等一系列服務。外包團隊需要有一條從開發到維護的完整服務鏈,用專業的經驗讓客戶少走彎路。

無論是大型的外包公司,還是小型的外包團隊,凡是不能用「All In」的態度為客戶服務的外包,都不能算是好外包。


魔高一尺道高一丈,喜望軟體傳授了你如何見招拆招的天龍八「步」,可要好好收藏起來。其實對於我們軟體開發服務商來說,我們與客戶都是合作共贏的關系,最終是希望能幫客戶賺到錢。所以在開發過程中,雙方若是能坦誠相待,這是再好不過的啦。

㈡ C++課 沒聽··· 不懂··· 關於什麼類啊 對象的~求詳細解釋

//修改後的程序如下:
#include <iostream>
using namespace std;
class stud
{
public: //增加public 定義,VS2010在未使用此定義時默認為 private
void setscore(int sc);
void inscore();
void getscore();
int score;
};

stud s;
int main()
{
s.setscore(0); // 增加 s. , 調用 s 的成員函數 , 下同
s.inscore();
s.getscore();
}

void stud::setscore(int sc) // 修改 函數類型,與類定義一致,增加stud::, 表示是 stud的成員函數
{ score=sc; }
void stud::inscore()
{ cin>>score; } // 去掉s. , 下同。
void stud::getscore()
{
cout<<score<<endl;
}

// 建議不在類的 成員函數中 使用 CIN,COUT等,否則失去封閉的意義了

㈢ 軟體工程 靜態測試的主要方法有哪些

(1)人工檢測:是指不依靠計算機而是靠人工審查程序或評審軟體,包括代碼檢查、靜態結構分析和代碼質量度量等;

(2)計算機輔助靜態分析:利用靜態分析工具對被測試程序進行特性分析,從程序中提取一些信息,以便檢查程序邏輯的各種缺陷和可疑的程序構造。

靜態測試包括代碼檢查、靜態結構分析、代碼質量度量等。它可以由人工進行,充分發揮人的邏輯思維優勢,也可以藉助軟體工具自動進行。

(3)工程清單源碼擴展閱讀:

代碼檢查包括代碼走查、桌面檢查、代碼審查等,主要檢查代碼和設計的一致性,代碼對標準的遵循、可讀性,代碼的邏輯表達的正確性,代碼結構的合理性等方面;可以發現違背程序編寫標準的問題,程序中不安全、不明確和模糊的部分,找出程序中不可移植部分、違背程序編程風格的問題,包括變數檢查、命名和類型審查、程序邏輯審查、程序語法檢查和程序結構檢查等內容。

在實際使用中,代碼檢查比動態測試更有效率,能快速找到缺陷,發現30%~70%的邏輯設計和編碼缺陷;代碼檢查看到的是問題本身而非徵兆。但是代碼檢查非常耗費時間,而且代碼檢查需要知識和經驗的積累。

代碼檢查應在編譯和動態測試之前進行,在檢查前,應准備好需求描述文檔、程序設計文檔、程序的源代碼清單、代碼編碼標准和代碼缺陷檢查表等。靜態測試具有的發現缺陷早、降低返工成本、覆蓋重點和發現缺陷的概率高的優點以及耗時長、不能測試依賴和技術能力要求高的缺點。

㈣ 如何實現log4cxx日誌輸出方式

Log4cxx是開放源代碼項目Apache Logging Service的子項目之一,用於為C++程序提供日誌功能,以便開發者對目標程序進行調試
和審計。本文對log4cxx的使用及配置進行介紹,並給出一個可以快速開始的實例。最後,針對日誌服務給出一些實踐方面的建議。
1. 介紹
Log4cxx是開放源代碼項目Apache Logging Service的子項目之一,是java社區著名的log4j的c++移植版,用於為C++程序提供日誌
功能,以便開發者對目標程序進行調試和審計。
有關log4cxx的更多信息可以從Apache Loggin Service的網站http://logging.apache.org獲得。當前的穩定版本為0.9.7,本文內
容及示例代碼都是基於此版本。此外,示例代碼的編譯環境為Windows環境中的Microsoft Visual C++ .Net 2003。
本文的示例代碼可以在此下載,其中也包含了預編譯好的log4cxx的庫文件。
2. 集成log4cxx到IDE
要使用log4cxx,首先需要將其集成到你的項目開發環境中。以下針對Windows環境中的Microsoft Visual C++ .Net 2003進行說明
,其他環境的配置信息請參考官方文檔。
要讓log4cxx為你工作,通常情況下需要如下幾個步驟:
l 獲取軟體包:得到log4xx的源代碼;
l 編譯:構建庫文件;
l 項目環境設置:加入log4cxx支持。
2.1 獲取軟體包
請從官方網站獲得合適的版本。也可以從下面這個鏈接中直接獲取(直接的鏈接地址可能不會永遠有效):
http://mirror.vmmatrix.net/apache/logging/log4cxx/log4cxx-0.9.7.tar.gz
下載完成後解壓縮到合適的目錄中,因為我們在下一步中需要使用軟體包,包括編譯和復制必要的文件。
2.2 編譯
原始發行包中不含編譯後的代碼,這個工作需要我們自己來做。打開你的IDE,並載入以下目錄中的工程:
l Msvc\static:該工程產生log4cxx的靜態鏈接庫(lib4cxx.lib和lib4cxxs.lib);
l Msvc\dll:該工程產生log4cxx的動態鏈接庫(lib4cxx.dll)。
通常情況下,工程都可以順利編譯通過。查看輸出目錄,把這些生成的庫文件找出來,以便在下一步驟中使用。
2.3 項目環境設置
請先在IDE中打開一個需要加入日誌功能的工程,或者出於實驗目的,新建一個工程,以便對其進行設置。
首先需要設置log4cxx的include文件。這些文件位於log4cxx軟體包的include\log4cxx目錄內。請查看你的VC++ IDE中「工具->選
項->項目->VC++目錄->包含文件」所列出的內容,以便確定你以何種方式加入這些include文件:
l 將include\log4cxx直接拷貝到已定義的包含文件目錄中。如果將log4cxx看作是一項系統服務的話,這樣做是胡合乎情理
的,因為你可以採用標准庫的方式使用它,例如:#include <log4cxx/logger.h>
l 增加一個包含路徑,以指向位於IDE外部的某一文件目錄。可以簡單的指向在2.1中解壓縮後形成的log4cxx軟體包目錄。
下一步需要對2.2節產生的log4cxx庫進行設置。這取決於你使用該庫的方式:靜態鏈接或者動態鏈接。
l 靜態鏈接情況下需要做如下工作:為預編譯器定義LOG4CXX_STATIC宏,設置位置為「項目->屬性->配置屬性->C/C++->預
處理器->預處理器定義」;為鏈接器指定依賴的庫lib4cxxs.lib和Ws2_32.lib,設置位置為「項目->屬性->配置屬性->鏈接器->輸
入->附加依賴項」。
l 動態鏈接情況下只需要為鏈接器指定依賴的庫lib4cxxs.lib即可,設置方式同上。

3. 示例代碼
本節展示了一個最簡單的log4cxx示例,以便你可以快速的了解它。
該示例在功能上創建了一個日誌服務,該日誌可通過配置文件進行必要控制,並可以同時向文件和控制台輸出信息。
在實現上,我們採用了一個簡單的控制台程序,並使用動態鏈接庫的方式使用log4cxx。
要實現這個目標,請按如下步驟進行:
1)創建一個名為logdemo的空白win32控制台工程,並按照2.3節所述內容對其進行設置。注意,這里我們使用動態連介面的方式。
2)在logdemo.cpp中加入實現日誌功能的代碼。完成後的代碼清單如下:
#include "stdafx.h"
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>

using namespace log4cxx;

int _tmain(int argc, _TCHAR* argv[])
{
//載入log4cxx的配置文件,這里使用了屬性文件
PropertyConfigurator::configure("log4cxx.properties");

//獲得一個Logger,這里使用了RootLogger
LoggerPtr rootLogger = Logger::getRootLogger();

//發出INFO級別的輸出請求
LOG4CXX_INFO(rootLogger, _T("它的確工作了"));
//rootLogger->info(_T("它的確工作了")); //與上面那句話功能相當

return 0;
}

以Debug方式編譯工程,調試程序直到成功為止。
3)新建一個文本文件,命名為log4cxx.properties,並鍵入如下內容:
# 設置root logger為DEBUG級別,使用了ca和fa兩個Appender
log4j.rootLogger=DEBUG, ca, fa

4)復制log4cxx.dll到輸出目錄。在動態鏈接方式下,應用程序需要能夠找到這個庫文件。
5)運行生成的logdemo.exe文件,查看一下運行結果,看看我們工作有沒有取得成效。如果一切順利,無論是在控制台還是在輸出
文件中,都應該能看到類似下面那樣的輸出內容:
2006-06-02 16:09:50,609 [2528] INFO root - 它的確工作了

4. 體系結構
4.1 核心類
Log4cxx有三個關鍵組件,它們是loggers, appenders和layouts。
Logger是log4cxx的核心類,只要執行日誌操作;looger有層次結構,最頂層為RootLogger;logger是有級別的。每個logger可以附
加多個Appender。Appender代表了日誌輸出的目標,如輸出到文件、控制台等等。對於每一種appender,都可以通過layout進行格
式設置。
這三類組件用示意圖表示如下(不代表類關系):
(TODO:在此對三種組件分別進行說明)
4.2 配置類
此外在使用中還會用到的類有BasicConfigurator、PropertyConfigurator和DOMConfigurator等,用於對log4cxx進行配置。其中:
BasicConfigurator提供了一種簡單配置,包括使用ConsoleAppder作為root appender和PatternLayout作為預設布局。
PropertyConfigurator使用properties文件作為配置方式。
DOMConfigurator則使用properties文件作為配置方式。
(TODO:在此對配置內容進行說明)
5. 實踐指導
在項目中是否使用日誌,以及如何使用日誌,對開發者來說都是一個需要做出的技術選擇,這通常會牽扯到系統的性能,使用日誌
的目的等問題。我們使用日誌的方式,有些是這個行業積累了多年的經驗,有些則純粹關乎個人的喜好。
1)何時使用日誌
通常情況下,日誌的作用在於調試和審計,如果你的項目對此有特殊需求,即可考慮使用日誌。
對於調試,通常用於IDE調試器無法達到的地方。一些常見的場景包括:
分布式組件的調試。在伺服器端的組件,需要通過客戶端的調用來驗證其工作是否正確,此時利用日誌的輸出作為輔助工具對錯誤
進行診斷。
鏈接庫調試。在無法跟蹤進外部庫中的情況下,這種方法非常有效。
生產環境下的調試。生產環境通常是指產品在客戶處處於正式運行的狀態,在出現問題時,開發者常常不在現場,藉助日誌的輸出
進行錯誤判斷就是一個非常有效的手段。
對於審計應用,則需要視特定的情況而定,程序級的記錄能力,無疑可以作為業務級審計手段的有效補充。
無論是在哪種場景下,log4cxx都是可以勝任工作的,這取決於它的靈活的配置能力及多種類型的輸出方式。
2)性能問題
關閉日誌,通過配置文件設置日誌的關閉和打開
使用宏代替logger的輸出命令
選擇性輸出日誌。建立logger的層次結構,根據級別選擇性輸出
輸出目標。盡可能減少輸出目標
選擇合適的輸出格式。使用SimpleLayout將達到與std::cout相當的速度。
3)其它
使用類的全限定名對logger命名
6. 結論
Log4cxx具有的一些顯著特性使得C++者可以將其放入自己的工具箱中,這些特性包括靈活的配置能力,多種輸出手段,豐富的格式
控制,出色的性能。如果在你的開發中需要藉助於日誌進行調試和審計,你也許需要log4cxx。最後,重要的一點是,如你所見,
log4cxx的使用是如此的簡單。

㈤ delphi等窗口完全顯示後執行一段代碼

你說的或意思是不是像WORD 啟動時效果

巧用Delphi製作濺射屏幕
(作者:施路)

精心編寫的WINDOWS程序顯示啟動注意事項,稱之為濺射屏幕(splash screen)。利用一點兒小小的內容,即可給程序的顯示添加不少色彩。

由於工程本身創建程序的主窗口,且啟動濺射屏幕必須在創建主窗口之前出現,所以工程文件必須創建自己的啟動屏幕。這意味著用戶必須修改源代碼來創建工程文件,而這通常在DELPHI編程中是不需要的。下面的過程介紹了濺射屏幕的建立過程。

1、開始一個新的工程。將窗體命名為MainForm,同時將其Caption屬性設置為SplashinDemo。把這個工程保存在一個目錄中,如C:\Projects\Splashin。把MainForm的單元命名為Main,把工程文件命名為Splashin。

2、在MainForm中插入一個Button組件。將Button的Name屬性改為ExitButton,而將其Caption屬性改為Exit。為ExitButton的OnClick事件創建一個處理器,在過程的begin和end關鍵詞之間插入Close;語句。

3、選取File|New Form命令,或者單擊New Form速度按鈕。添加一個新的窗體。

4、將這個窗體的Name屬性改變為SplashForm,刪除其Caption屬性。此外,將其BorderStyle屬性改變為bsnone,同時將BorderIcons下的三個子值設置為False。

5、保存這個工程。當Delphi提示讀者提供單元文件名時,要確信當前目錄為正確的目錄。為SplashForm的單元文件名輸入Splash。

6、將SplashForm的Enabled屬性設置為False。這里不想讓用戶能夠給窗口提供鍵盤和滑鼠命令,這是極少見的情況之一。在這個例子中,我們想讓程序對SplashForm的顯示擁有完全的控制權。

7、由於窗口沒有輪廓,所以從Additional組件類中插入一個Bevel組件對象。這有助於定義窗口的邊緣。將Bevel1的Align屬性設置為alClient。同時,將對象的Shape屬性改變為bsFrame,將其Style屬性改變為bsRaised。這些值由使用者來確定。

8、在SplashForm中插入想使用的組件,在這里不要插入任何按鈕或者其他相互作用的控制項。應用程序本身顯示和去除啟動濺射對話框。

9、選擇Project菜單。高亮顯示Splash工程個彈出式菜單。選擇Options命令。在所產生的Project Options對話框中,選取Forms頁標簽。注意,MainForm和SplashForm位於自動創建的窗體列表中。高亮顯示每個窗體並單擊滑鼠右按鈕來將其移動到Available窗體。所有的Delphi窗體在運行時都是在內存中自動創建的,這要消耗內存和系統資源。在這樣的一個案例中,程序是在運行時創建窗體的,讀者應該從自動創建的列表中刪除窗體。關閉ProjectOptions窗口。

10、接下來,修改工程的源代碼,以便在顯示主窗口之前顯示濺射對話框。這里需要在工程文件中插入語句,以便與Splash.dpr工程文件相匹配。工程源代碼如下:

program Project3;

uses

Forms,

main in 'main.pas' {MainForm},

splash in 'splash.pas' {SplashForm};

{$R *.RES}

begin

SplashForm:=TSplashForm.Create(Application);

SplashForm.Show;

SplashForm.Update;

Application.CreateForm(TMainForm,MainForm);

SplashForm.Close;

Application.Run;

end.

11、如果這時編譯和運行程序,它就非常快速地顯示和去除啟動濺射對話框,以至用戶可能沒機會見到它。為了強迫對話框保持幾秒鍾的可見時間,請選取程序的MainForm。為窗體的OnCreate命令創建一個處理器。在關鍵詞的前面添加一個名為stopTime的長整型變數。在begin和end之間插入兩個語句:一個為對Windows GetTickCount函數的調用。來將stopTime設置為Windows已在運行的秒數;另一個語句為while語句,這個語句另外延遲2秒鍾。程序清單如下:

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TMainForm = class(TForm)

Exitbutton: TButton;

procere ExitbuttonClick(Sender: TObject);

procere FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procere TMainForm.ExitbuttonClick(Sender: TObject);

begin

close;

end;

procere TMainForm.FormCreate(Sender: TObject);

var

stopTime:LongInt;

begin

stopTime:=GetTickCount div 1000;

while ((GetTickCount div 1000)<(stopTime+2)) do

Sleep(1);

end;

end.

12、按F9編譯、運行程序。

㈥ 安卓中的data下的文件怎麼用快捷鍵導出到電腦

1. api

安卓官方文檔中已經提供了很多demo,在使用未知的控制項時,可以採用這種方式

2. 系統源碼

系統源碼是最好的老師,通過一步步的點擊,進入系統的源碼.或者我們需要調用系統的某個應用的activity時,都可以直接翻看系統源碼

一般查看源碼有以下的幾種方式

1) 在自己的代碼中直接ctrl+滑鼠右鍵,點進去直接查看,這種方式適合於只是簡單的查看系統在api中所描述的實現邏輯

2) 直接進去源碼翻看,比較適合於對安卓工程文件相當熟悉的工程師,一般查看都是先從資源清單文件開始,系統源碼比較有特點,英語稍微好一點,能夠將自己想表達的意思直接搜索清單文件,比如說要打開系統的主頁面launcher應用程序,那麼路徑是在.../packages/apps/launcher2,最好還是要非常熟悉安卓工程的構成,這樣在翻閱的時候,你想搜索什麼,定位會很清晰的

3) 新建工程,從系統的源碼導入(還是要對安卓工程和安卓系統源碼的組織結構有一定的了解,導入工程後一般會有錯誤的,但是這不是我們所關心的,我們不是在編譯源碼),通過搜索關鍵字,一般我們搜索的方式或者操作步驟如下:(通用搜索在eclipse中直接快捷鍵ctrl+H即可)

i. 查看到系統的某個activity中的內容,這個東東就算用腳丫子想,也是在values/strings.xml中,就是是動態變化的一些值(除了數值),都是在這個裡面(國際化嘛)

ii. 通過查找到vlaues,那麼就看到了對應的name,name的通常情況下,是在布局文件中引用的,也有的是在java代碼中的(這是比較特殊的),那麼直接搜索name

iii. 安卓通用情況,那麼這是看到後台就有values和layout文件下的文件,layout下的文件是我們關心的,打開layout下的這個文件,看到控制項的id,再次搜索id

iv. 搜索到id,打開對應的java文件就看到了,一路ctrl+K,定位到處理的邏輯

v. 代碼邏輯看懂後,復制粘貼,報錯的很有可能是底層隱藏的方法,隱藏的方法,是可望而不可即的嗎?非也,只不過使用的方式特殊一點而已,用反射不就搞定啦?

3. 參照他人的代碼

1) 查看系統後台日誌

一般在看到某個應用在調用系統的activity時,我們好奇他發送了怎麼樣的intent, logcat中會顯示的,想實現這個目的,採用這種方式是比較簡單的

2) 反編譯

反編譯是一種很好的方式,什麼時候需要使用到反編譯呢?

一般如下的幾種場景使用到反編譯

(1) 要參照其他應用的圖片

(2) 要參照其他應用的布局

(3) 要參照其他應用的邏輯處理

針對以上的幾個需求場景,我們的處理方式分別如下:

只是獲取圖片的處理:

圖片在安卓應用中不是隱私的東西,要獲取到的話,很簡單,直接下載到其他應用的apk文件,即安裝包,將後綴名修改為.zip即可,解壓縮開,在res/drawable***的文件下,這就是對應的圖片

參照其他應用的布局

要參照布局,那麼就需要藉助工具了,不能簡單的使用上面獲取圖片的處理方式,可以使用apktool這個工具,操作步驟如下:

進入到apktool的目錄下,打開控制台,輸入如下的命令 apktool d 對應的apk全路徑和文件名即可解壓開,在apktool的文件中發現新多了一個文件夾,名字與apk的名字相同,這就成功了,可以查看布局文件了

參照其他應用的程序邏輯

同樣需要藉助工具,dex2jar和gui

操作步驟:

將apk的文件後綴名修改為zip

解壓縮找到對應的dex文件

將dex文件轉變為jar文件就可以了,使用dex2jar的命令dex2jar classpath.dex 然後文件自動轉換,生成的文件位於dex2jar的目錄下

將文件使用gui打開即可(這只是未加密的文件的處理方式,已經加密的,那麼就需要我們學習學習smali語言了,才能分析文件

㈦ 什麼是 源程序清單

源代碼的集合.

㈧ 如何使用 Pylint 來規范 python 代碼風格

Pylint 在 linux 上的安裝
1. 在 Linux 上,首先安裝 Python 的包(高於版本 2.2),並在環境變數 $PATH 中添加 Python 可執行文件的路徑。
2. 下載 Pylint、logilab-astng (version >= 0.14) 和 logilab-common (version >= 0.13) 的包 , 使用 tar zxvf *.tar.gz解壓縮這些包。
3. 依次進入 logilab-astng、logilab-common 和 Pylint 解開的文件夾中,運行命令 Python setup.py install來安裝。
4. 安裝完成後,就可以通過 pylint [options] mole_or_package來調用 Pylint 了。
Pylint 在 Windows 上的安裝
1. 安裝 Python 的包(高於版本 2.2),右鍵單擊桌面上的我的電腦圖標,選擇屬性,高級,環境變數,在 $PATH 中添加 Python 的安裝路徑,如 C:\Python26\。
2. 使用解壓縮工具解壓縮所有的包。
3. 打開命令行窗口,使用 cd依次進入 logilab-astng、logilab-common 和 Pylint 解開的文件夾中,運行命令 python setup.py install來安裝。
4. 安裝完成後,在 Python 的安裝路徑下出現一個 Scripts 文件夾,裡麵包含一些 bat 腳本,如 pylint.bat 等。
5.
為了使調用 pylint.bat 的時候不需要輸入完整路徑,在 Python 的安裝目錄下創建 pylint.bat
的重定向文件,這是一個純文本文件 pylint.bat,裡麵包含 pylint.bat
的實際路徑,如:C:\Python26\Scripts\pylint.bat。
6. 安裝完成後,可以通過 pylint [options] mole_or_package來調用 Pylint 了。
Pylint 的調用
清單 1. Pylint 的調用命令
pylint [options] mole_or_package

使用 Pylint 對一個模塊 mole.py 進行代碼檢查:
1. 進入這個模塊所在的文件夾,運行 pylint [options] mole.py

這種調用方式是一直可以工作的,因為當前的工作目錄會被自動加入 Python 的路徑中。
2. 不進入模塊所在的文件夾,運行 pylint [options] directory/mole.py

這種調用方式當如下條件滿足的時候是可以工作的:directory 是個 Python 包 ( 比如包含一個 __init__.py 文件 ),或者 directory 被加入了 Python 的路徑中。
使用 Pylint 對一個包 pakage 進行代碼檢查:
1. 進入這個包所在文件夾,運行 pylint [options] pakage。

這種調用方式是一直可以工作的,因為當前的工作目錄會被自動加入 Python 的路徑中。
2. 不進入包所在的文件夾,運行 pylint [options] directory/ pakage。

這種情況下當如下條件滿足的時候是可以工作的:directory 被加入了 Python 的路徑中。比如在 Linux 上,export PYTHONPATH=$PYTHONPATH: directory。
此外,對於安裝了 tkinter 包的機器,可以使用命令 pylint-gui打開一個簡單的 GUI 界面,在這里輸入模塊或者包的名字 ( 規則同命令行 ), 點擊 Run,Pylint 的輸出會在 GUI 中顯示。
Pylint 的常用命令行參數
-h,--help
顯示所有幫助信息。
--generate-rcfile
可以使用 pylint --generate-rcfile 來生成一個配置文件示例。可以使用重定向把這個配置文件保存下來用做以後使用。也可以在前面加上其它選項,使這些選項的值被包含在這個產生的配置文件里。如:pylint --persistent=n --generate-rcfile > pylint.conf,查看 pylint.conf,可以看到 persistent=no,而不再是其默認值 yes。
--rcfile=<file>
指定一個配置文件。把使用的配置放在配置文件中,這樣不僅規范了自己代碼,也可以方便地和別人共享這些規范。
-i <y_or_n>, --include-ids=<y_or_n>
在輸出中包含 message 的 id, 然後通過 pylint --help-msg=<msg-id>來查看這個錯誤的詳細信息,這樣可以具體地定位錯誤。
-r <y_or_n>, --reports=<y_or_n>
默認是 y, 表示 Pylint 的輸出中除了包含源代碼分析部分,也包含報告部分。
--files-output=<y_or_n>

每個 mole /package 的 message 輸出到一個以 pylint_mole/package. [txt|html]
命名的文件中,如果有 report 的話,輸出到名為 pylint_global.[txt|html]
的文件中。默認是輸出到屏幕上不輸出到文件里。
-f <format>, --output-format=<format>
設置輸出格式。可以選擇的格式有 text, parseable, colorized, msvs (visual studio) 和 html, 默認的輸出格式是 text。
--disable-msg=<msg ids>
禁止指定 id 的 message. 比如說輸出中包含了 W0402 這個 warning 的 message, 如果不希望它在輸出中出現,可以使用 --disable-msg= W0402
Pylint 的輸出
Pylint的默認輸出格式是原始文本(raw text)格式 ,可以通過 -f <format>,--output-format=<format> 來指定別的輸出格式如html等等。在Pylint的輸出中有如下兩個部分:源代碼分析部分和報告部分。
源代碼分析部分:
對於每一個 Python 模塊,Pylint 的結果中首先顯示一些"*"字元 , 後面緊跟模塊的名字,然後是一系列的 message, message 的格式如下:
MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE

MESSAGE_TYPE 有如下幾種:
(C) 慣例。違反了編碼風格標准
(R) 重構。寫得非常糟糕的代碼。
(W) 警告。某些 Python 特定的問題。
(E) 錯誤。很可能是代碼中的錯誤。
(F) 致命錯誤。阻止 Pylint 進一步運行的錯誤。
清單 2. Pylint 中的 utils 模塊的輸出結果
************* Mole utils
C: 88:Message: Missing docstring
R: 88:Message: Too few public methods (0/2)
C:183:MessagesHandlerMixIn._cat_ids: Missing docstring
R:183:MessagesHandlerMixIn._cat_ids: Method could be a function
R:282:MessagesHandlerMixIn.list_messages: Too many branches (14/12)

報告部分:
在源代碼分析結束後面,會有一系列的報告,每個報告關注於項目的某些方面,如每種類別的 message 的數目,模塊的依賴關系等等。具體來說,報告中會包含如下的方面:
檢查的 mole 的個數。
對於每個 mole, 錯誤和警告在其中所佔的百分比。比如有兩個 mole A 和 B, 如果一共檢查出來 4 個錯誤,1 個錯誤是在 A 中,3 個錯誤是在 B 中,那麼 A 的錯誤的百分比是 25%, B 的錯誤的百分比是 75%。
錯誤,警告的總數量。
回頁首
使用 Pylint 分析 Python 代碼的具體示例
下面是一個從 xml 文件中讀取一些值並顯示出來的一段 Python 代碼 dw.py,代碼如下:
清單 3. 源碼
import string
#!/usr/bin/env python

import xml.dom.minidom

xmlDom=xml.dom.minidom.parse("identity.xml")
organizations = xmlDom.getElementsByTagName('DW')
for org in organizations:
procts = org.getElementsByTagName('linux')
for proct in procts:
print 'ID: ' + proct.getAttribute('id')
print 'Name: ' + proct.getAttribute('name')
print 'Word Count: ' + proct.getAttribute('count')

清單 4. identity.xml 的內容
<IBM>
<DW>
<linux id="100" name="python" count="3000" />
</DW>
</IBM>

這時候使用 Pylint 的結果(這是從 html 格式的輸出中拷貝的)為:
清單 5. Pylint 的分析結果
************* Mole dw
C:1:Missing docstring
C:5:Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^
C:5:Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:6:Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

Report 部分省略

輸出中第一部分是源代碼分析,第二部分是報告。輸出結果中有這么多信息,從哪裡開始分析呢?首先使用如下的步驟來分析代碼:
1. 因為輸出結果太長,所以可以先不讓它輸出報告部分,先根據源代碼分析部分來找出代碼中的問題。使用選項 "--reports=n"。
2. 使用選項 "--include-ids=y"。可以獲取到源代碼分析部分每條信息的 ID。
清單 6. 使用 pylint --reports=n --include-ids=y dw.py 的結果
************* Mole dw
C0111: 1: Missing docstring
C0322: 5: Operator not preceded by a space xmlDom=xml.dom.minidom.parse("identity.xml") ^
C0103: 5: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 6: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

每個信息前面都會加上一個 id, 如果不理解這個信息的意思,可以通過 pylint --help-msg=id來查看。
清單 7. 使用 pylint --help-msg= C0111 的結果
C0111: *Missing docstring*
Used when a mole, function, class or method has no docstring. Some special
methods like __init__ doesn't necessary require a docstring.
This message belongs to the basic checker.

3. 開始分析每個源代碼中的問題。從上面知道,第一個問題的原因是缺少 docstring,在代碼中增加 docstring, 修改後的代碼如下:
清單 8. 增加 docstring 修改後的源碼
#!/usr/bin/env python

"""This script parse the content of a xml file"""

import xml.dom.minidom

xmlDom=xml.dom.minidom.parse("identity.xml")
organizations = xmlDom.getElementsByTagName('DW')
for org in organizations:
procts = org.getElementsByTagName('linux')
for proct in procts:
print 'ID: ' + proct.getAttribute('id')
print 'Name: ' + proct.getAttribute('name')
print 'Word Count: ' + proct.getAttribute('count')

重新運行 pylint --reports=n --include-ids=y dw.py,結果為:
清單 9. 運行結果
************* Mole dw
C0322: 7: Operator not preceded by a space
xmlDom=xml.dom.minidom.parse("identity.xml")
^
C0103: 7: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 8: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

可以看到源代碼中的第一個問題已被解決。
4. 關於第二個 C0322 的問題,這里的分析結果說明得比較清楚,是代碼第七行中的等號運算符兩邊沒有空格。我們在這里加上空格,重新運行 pylint --reports=n --include-ids=y dw.py,結果為:
清單 10. 運行結果
************* Mole dw
C0103: 7: Invalid name "xmlDom" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C0103: 8: Invalid name "organizations" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

5.
可以看到現在問題只剩下 C0103 了。這里的意思是變數命名規則應該符合後面正則表達式的規定。Pylint
定義了一系列針對變數,函數,類等的名字的命名規則。實際中我們不一定要使用這樣的命名規則,我們可以定義使用正則表達式定義自己的命名規則,比如使用選
項 --const-rgx='[a-z_][a-z0-9_]{2,30}$',我們將變數 xmlDom改為 xmldom, 代碼如下:
清單 11. 將變數 xmlDom 改為 xmldom 後的源碼
#!/usr/bin/env python

"""This script parse the content of a xml file"""

import xml.dom.minidom

xmldom = xml.dom.minidom.parse("identity.xml")
organizations = xmldom.getElementsByTagName('DW')
for org in organizations:
procts = org.getElementsByTagName('linux')
for proct in procts:
print 'ID: ' + proct.getAttribute('id')
print 'Name: ' + proct.getAttribute('name')
print 'Word Count: ' + proct.getAttribute('count')

運行 pylint --reports=n --include-ids=y --const-rgx='[a-z_][a-z0-9_]{2,30}$' dw.py,結果中就沒有任何問題了。
6. 如果希望一個組里的人都使用這些統一的規則,來規范一個部門的代碼風格。比如說大家都使用 --const-rgx='[a-z_][a-z0-9_]{2,30}$'作為命名規則,那麼一個比較便捷的方法是使用配置文件。
使用 pylint --generate-rcfile > pylint.conf來生成一個示例配置文件,然後編輯其中的 --const-rgx選項。或者也可以直接 pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' --generate-rcfile > pylint.conf,這樣生成的配置文件中 --const-rgx選項直接就是 '[a-z_][a-z0-9_]{2,30}$'了。
以後運行 Pylint 的時候指定配置文件:pylint --rcfile=pylint.conf dw.py
這樣 Pylint 就會按照配置文件 pylint.conf中的選項來指定參數。在一個部門中,大家可以共同使用同一個配置文件,這樣就可以保持一致的代碼風格。
7. 如果把 report 部分加上,即不使用 --reports=n,可以看到報告部分的內容。

android開發如何調試

能夠在eclipse上運行調試應用程序之前,你必須為它創建一個啟動項。啟動項指定哪個工程將被啟動,哪個activity開始工作,以及使用哪些模擬器選項等。
按照以下步驟為Eclipse版本的應用程序創建合適的啟動項:
打開啟動項管理工具。
在Eclipse 3.3 (Europa)的版本中,酌情選擇 Run > Open RunDialog... or Run > Open Debug Dialog... 。
在Eclipse3.4 (Ganymede)版本中,酌情選擇 Run > Run Configurations...or Run > Debug Configurations... 。
在左邊的工程類型列表選擇Android Application選擇,雙擊(或者點擊右鍵選擇new),創建一個新的啟動項。
輸入啟動項名稱。
在Android標簽中,瀏覽要開始的工程和Activity 。
在Target標簽中,設置想要顯示的屏幕及網路屬性,以及其他任何模擬器啟動選項。
你可以在Common標簽中設置更多的選項.
按下Apply保存啟動配置,或者按下Run或Debug()。
運行和調試應用程序
一旦你設定了工程和工程啟動配置,你就可以按照以下的說明運行和調試應用程序了。
從eclipse主菜單,根據情況選擇Run>Run 或者 Run>Debug,開始運行或者調試活動啟動項。
注意,這里活動啟動項是在運行配置管理中最最近一次選中的那個。它不一定就是在Eclipse Navigation 面板中選擇的程序(如果有的話)
設置和修改活動啟動項,可以使用啟動項管理工具。如何獲得啟動項管理工具可以參考創建一個啟動項
運行或調試應用程序將觸發以下動作:
啟動模擬器,如果他還沒有開始運行。
編譯工程, 如果在上次編譯的基礎上修改過代碼,將重新編譯。在模擬器上安裝應用程序。
Run選項,開始運行程序。
Debug 在"Wait for debugger "模式下啟動程序,然後打開調試窗口並將Eclipse Java調試器和程序關聯。
利用其他IDEs和工具開發Android應用程序
通常我們使用安裝有ADT插件的eclipse Eclipse with the ADT plugin.來開發Android程序,這個插件將編輯,build和調試功能集成到IDE上。
然而,如果你想在其他的IDE上開發程序,例如IntelliJ,或者使用沒有ADT插件的eclipse也可以。SDK提供了安裝,編譯,調試應用程序所需要的工具。
創建一個android工程
Android SDK包含一個activityCreator的程序,它將為工程產生多個stub文件和一個build文件。你可以用這個程序創建一個新的 Android工程或者在現有代碼上創建工程,如SDK中包含的例子。對於Linux 和Mac系統,SDK提供activityCreator.py,一個 Python腳本,Windows上則是activityCreator.bat一個批處理腳本。無論是哪種平台,用法是一樣的。
按以下步驟運行activityCreator創建Android工程:
在命令行下,切換到SDK下的tools/目錄下,為你的工程文件新建一個目錄。如果你是在現有代碼上創建工程,切換到程序的根目錄下。
運行activityCreator。在命令行下,你必須指定完全合格的類名作為參數。如果你是創建一個全新的工程,這個類代表的與它同名的stub類和腳本文件。如果是在現有代碼上創建工程,必須指定軟體包中其中一個Activity類的名稱。命令選項的腳本包括:
--out <folder> 設定輸出目錄。默認情況下輸出目錄為當前目錄。如果你想為工程文件創建一個新的目錄,可以使用這個選項來指向它。
--ide intellij, 在一個新的項目中生成IntelliJIDEA 工程文件。
這里有個例子:
~/android_linux_sdk/tools $ ./activityCreator.py --out myprojectyour.package.name.ActivityName
package: your.package.name
out_dir: myproject
activity_name: ActivityName
~/android_linux_sdk/tools $
activityCreator腳本生成以下文件和目錄(但是不能重寫已有文件):
AndroidManifest.xml 程序的清單文件,同時為工程指定Activity類。
build.xml 一個Ant文件,用來編譯/打包應用程序。
src/your/package/name/ActivityName.java 你指定的輸入Activity類。
your_activity.iml, your_activity.ipr, your_activity.iws [only with the-ide intelliJ flag] intelliJ工程文件
res/ 資源目錄.
src/ 源代碼目錄.
bin/ build腳本的輸出目錄.
現在你可以將開發文件夾移到任何地方,但是記住,必須使用tool/文件夾下的adb程序將文件發送到模擬器上。因此你需要在你工作環境和tools/文件夾之間活動。
當然你需要避免移動SDK目錄,因為它將打斷編譯腳本。(再重新build之前需要手動更新SDK的映射路徑)
編譯 android應用程序
使用activityCreator生成的Ant文件build.xml來編譯程序
如果你沒有,你可以通過Apache Ant home page得到Ant文件。安裝它,並確定它在你的可執行文件路徑下。
呼叫Ant之前,你需聲明JAVA_HOME環境變數,並將它設置為JDK的安裝路徑。
注 意:在windows上,JDK默認的安裝路徑為"ProgramFiles",這個路徑將會引起Ant失敗,因為路徑中間有空格。解決這個問題,你可以像這樣指定環境變數 JAVA_HOME:JAVA_HOME=c:\Prora~1\Java\ 然而簡單的解決方法是將JDK安裝在沒有空格的目錄下。例如:c:\java\jdk1.6.0_02.
如果你還沒有這么准備好,按照上面創建一個新的工程的介紹建立一個工程。
現在你可以為你的工程運行Ant編譯文件,只需在build.xml同文件夾下輸入ant即可。每次修改原文件或是資源,都需要重新運行ant,它將把最新版的應用程序打包以便deploy.
運行Android程序
運行一個編譯好的程序,你需要用adb工具將.apk文件載入到模擬器的/data/app/目錄下,用法如下面介紹。
啟動模擬器(命令行下運行sdk目錄下的/tools/emulator)。
模擬器切換到主畫面(最好不要在程序運行的時候向模擬器安裝程序,可以按home鍵離開應用程序)。
運 行adb,安裝myproject/bin./<appname>.apk文件。例如,安裝Lunar Lander 示例,命令行下,切換到SDK目錄下的/sample/LunarLander子目錄下,輸入../../tools/adbinstall bin/LunarLander.apk
在模擬器中,打開可執行程序列表,卷動屏幕,選中並啟動你的應用程序。
注意:當你第一次安裝一個Activity時,你可能需要在啟動項顯示之前,或者其它程序調用它之前重新啟動模擬器。因為軟體包管理工具通常只有在模擬器啟動時才能完全的審查manifests。
為程序附加調試器
這一節我們介紹如何在屏幕上顯示調試信息(例如CPU使用率),以及如何將IDE和模擬器上運行的程序關聯起來。
使用eclipse插件可以自動的生成調試器。但你也可以通過配置IDES來監聽調試埠得到調試信息。
啟動Dalvik Debug Monitor Server (DDMS) 工具 ,它在IDE和模擬器之間扮演著埠轉換服務的角色。?
設置模擬器調試配置選項。例如,等到調試信息被載入後才啟動應用程序。注意,很多調試選項無需DDMS也可以使用,例如模擬器上顯示CPU的使用效率,或者屏幕的刷新頻率。
配置IDE,使得調試時IDE與8700埠關聯 .how to set up Eclipse to debug your project. 包含以下信息。
配置IDE附加調試埠
DDMS將為每一個虛擬機分配一個特殊的調試埠,這個埠在模擬器上可以找到。你必須將你的IDE與此埠(虛擬機上信息欄中有列出這些埠)關聯或者是默認的埠8700。這樣可以使IDE 連接到模擬器上程序列表中的任一個程序。
你的IDE需要能夠關聯模擬器上正在運行的程序,顯示它的線程,並允許你掛起它,檢查它的狀態,設置斷點。如果你在開發設置面板選擇了「等待調試」,應用程序將等到Eclipse連接後才運行,所以你需要在連接之前設置斷點。
修改正在調試的程序,或者在當前程序運行時選擇「等待調試」將引起系統殺死這個應用程序。如果你的程序處於一種壞的狀態,你可以使用方式殺死它,方法很簡單,只需要設置和鉤掉復選框。

㈩ C++ int i[233];我直接這樣寫代表了什麼意思

C++ int i[233];直接這樣寫代表了,定義了一個整形的數組,共有233個整形元素,數組的名字叫做i。

閱讀全文

與工程清單源碼相關的資料

熱點內容
編譯程序輸入一個字元串 瀏覽:404
圓命令畫法 瀏覽:305
如果給電腦e盤文件加密 瀏覽:801
javaswing項目 瀏覽:774
androidsdksetup 瀏覽:1003
pdf怎麼設置中文 瀏覽:126
安卓手機用什麼軟體看倫敦金 瀏覽:964
魅族文件夾無名稱 瀏覽:789
蘇黎世無人機演算法 瀏覽:872
核桃編程和小碼王的融資 瀏覽:684
微積分教材pdf 瀏覽:725
寫python給微信好友發消息 瀏覽:336
蚊帳自營米加密 瀏覽:420
學校推薦核桃編程 瀏覽:804
湖南農信app怎麼導明細 瀏覽:473
福特abs編程 瀏覽:509
如何自學安卓手機 瀏覽:439
以太坊源碼共識機制 瀏覽:912
單片機探測器 瀏覽:872
demo編程大賽作品怎麼運行 瀏覽:52