目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、灤州網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
成都創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元無錫做網(wǎng)站,已為上家服務(wù),為無錫各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
1,如何在列表頁中直接獲取文章內(nèi)容
這個(gè)要解析數(shù)據(jù)取,一般都是解析HTML2,php獲得網(wǎng)頁源代碼抓取網(wǎng)頁內(nèi)容的幾種方法
最簡單的是用 file(URL); 函數(shù),把整個(gè)網(wǎng)頁讀入到一個(gè)數(shù)組中。還可以用 file_get_contents(URL); 函數(shù),把整個(gè)網(wǎng)頁讀成一個(gè)字符串。3,源代碼的版權(quán)取得途徑
一、獨(dú)創(chuàng)性計(jì)算機(jī)源代碼作品著作權(quán)實(shí)行自愿登記,不論是否登記,作者或其他著作權(quán)人依法取得的著作權(quán)不受影響。自愿登記制度的在于維護(hù)作者或其他著作權(quán)人和作品使用者的合法權(quán)益,有助于解決因著作權(quán)歸屬造成的著作權(quán)糾紛,并為解決著作權(quán)糾紛提供初步證據(jù)?! 《?、獨(dú)創(chuàng)性計(jì)算機(jī)軟件著作權(quán)歸屬自動(dòng)取得和登記取得。在中國,按照著作權(quán)法規(guī)定,作品完成就自動(dòng)有版權(quán)。所謂完成,是相對(duì)而言的,只要?jiǎng)?chuàng)作的對(duì)象已經(jīng)滿足法定的作品構(gòu)成條件,既可作為作品受到著作權(quán)法保護(hù)?! ∪?、計(jì)算機(jī)軟件著作權(quán)可以通過中國版權(quán)保護(hù)中心和各省直轄市主管部門備案部門傳統(tǒng)方式申請(qǐng)登記,源代碼歸屬權(quán)也可以通過各種協(xié)會(huì)自辦的第三方登記中心或有可信第三方支撐的能夠證明作品備案存證時(shí)間的機(jī)構(gòu), 四、源代碼留證版權(quán)保護(hù),可選擇融合和集成各種數(shù)字版權(quán)技術(shù)和權(quán)威時(shí)間戳公證處公證郵箱等可信第三方群支撐的支持的大眾版權(quán)保護(hù)平臺(tái)進(jìn)行自主存證和首次發(fā)布智能認(rèn)證,取得作品留證和歸屬權(quán)初步證明,預(yù)防版權(quán)糾紛,需要時(shí),可通過司法鑒定,增強(qiáng)證據(jù)的法律效率是核心保障。4,如何從github獲取源代碼
如何從github獲取源代碼github是當(dāng)前流行的開源項(xiàng)目托管網(wǎng)站,里面有成千上萬的項(xiàng)目值得學(xué)習(xí)和借鑒,可以把項(xiàng)目源代碼下載到本地研究。本文介紹獲取github的源代碼的方法: 方法1 - 克隆(Clone)源代碼到本地 克隆之后會(huì)把源代碼下載到本地,創(chuàng)建一個(gè)本地的代碼庫,可以任意在本地修改代碼并使用git所提供的命令操作代碼,有代碼對(duì)應(yīng)的歷史記錄和分支。 方法2 - 下載源代碼Zip包 只是最新源代碼的打包,沒有g(shù)it對(duì)象信息,不能查看代碼的分支和歷史記錄。 方法3 - 直接在線瀏覽代碼并復(fù)制想要的代碼段 項(xiàng)目的源代碼可以直接在代碼瀏覽窗口查看,感興趣的話可以直接復(fù)制或者下載。先說明一下,我是在 windows 7 環(huán)境下,采用 visual studio 2010 來調(diào)試的。(當(dāng)然你要用其他環(huán)境也完全沒問題) 第一步,從 github 上把源碼 clone 到本地(或者直接下載壓縮包也行) 第二步,通過其中自帶的 vcbuild.bat 腳本生成完整的 vs 項(xiàng)目解決方案文件 第三步,用法visual studio 2010 打開上一步生成的 node.sln 解決方案文件將其中的 node 設(shè)為主項(xiàng)目,然后就可以開始編譯和調(diào)試了 就這么簡單。 可以探索的問題很多,但是也應(yīng)當(dāng)有所側(cè)重。在這個(gè)過程里,你會(huì)發(fā)現(xiàn)一個(gè)嶄新的世界。通過學(xué)習(xí)頂尖的開發(fā)人員的作品可以幫助你更快的提升自己的技能。但是很顯然,你付出的努力和汗水也是成倍的。 我是在一年半前開始接觸 node.js 的?,F(xiàn)在我最主要的項(xiàng)目基本都是依賴它來完成的。分析 node.js 的實(shí)現(xiàn)機(jī)制讓我收獲頗豐。但是回顧我的學(xué)習(xí)過程,最初卻并沒有考慮先從實(shí)現(xiàn)機(jī)制入手自底向上進(jìn)行學(xué)習(xí)。而是站在“快樂傻瓜”的角度自頂向下先學(xué)習(xí)各項(xiàng) api 的使用方法,適當(dāng)?shù)目匆稽c(diǎn)點(diǎn)代碼。這樣學(xué)習(xí)起來會(huì)比較有方向性,和需求貼合的比較緊密,也容易有成就感,容易堅(jiān)持。
5,如何調(diào)試跟蹤Android Framework源代碼
1. 首先,得到Android 源代碼(可參考之前的文章--如何獲取Android源代碼并編譯.doc),并且編譯,得到output file,在(Android source)/out目錄下,也可通過別的途徑獲取Android source code (以androidsrc.tgz為例) 和別人編譯好的 output file(out.tgz)2. 解壓縮這兩個(gè) tgz 文件,并把解壓出來的out 目錄放到 myandroid 目錄下,如下圖所示。 3. 拷貝 myandroid\development\ide\eclipse\.classpath 到 myandroid\.classpath. 4. 拷貝 myandroid\out\target\product\generic\*.img 到 {Android SDK}\tools\lib\images 并且覆蓋源文件. 5. 運(yùn)行{Android SDK}\tools目錄下的 emulator.exe. 6. 運(yùn)行{Android SDK}\tools目錄下的 ddms.bat。你可以看到下面的窗口,里面會(huì)列出當(dāng)前emulator里跑的進(jìn)程開發(fā)、調(diào)試android程序的時(shí)候有時(shí)候需要看一下android sdk的源代碼,并實(shí)時(shí)斷點(diǎn)查看變量,goolge在發(fā)布sdk時(shí)沒有把源代碼包含進(jìn)去著實(shí)有點(diǎn)讓人費(fèi)解,對(duì)很多人來說 git無疑是個(gè)生澀的東西,而 framework中所有java代碼加起來打個(gè)包也就是20多mb。更要命的是,android eclipse plugin (adt)不允許我們?cè)陧?xiàng)目屬性中attach源代碼到android.jar上。好在eric burke找到了把source加入到sdk中的辦法 ,通過分析adt的源代碼我們知道adt是從sdk目錄下的“sources” 目錄來查找class對(duì)應(yīng)的源代碼,這樣我們只要把源代碼放到sources目錄中adt就可以自動(dòng)找到對(duì)應(yīng)的源代碼了?! ∠螺d源代碼后,在/android-sdk-windows/platforms/android-xx下新建一個(gè)sources目錄,將源文件放在sources目錄下,然后在編寫的android的class中就可以看到引用文件的源代碼了, 如下所示: sdk_path | android.jar +--docs/... +--samples/... +--sources +--android | ...accounts, annotation, app, bluetooth, etc... +--com/android/etc... +--dalvik/... +--java/... +--javax/... 其實(shí)我們并不需要所有android的源代碼。比方說我們把binder相關(guān)的文件copy到sources/android/os目錄下。我們使用adt調(diào)試的時(shí)候就可以直接看到binder的源代碼. 增加sources目錄后記得重新啟動(dòng)eclipse! 有時(shí)通過某個(gè)項(xiàng)目點(diǎn)右鍵,運(yùn)行debug as/android application,調(diào)試app時(shí),可查看framework class的源碼。public static ListreadCommandOutput(String command) { Runtime rt =Runtime.getRuntime(); java.lang.Processproc; try { proc =rt.exec(command); if (proc.waitFor() != 0) { return null; } LinkedListlist = new LinkedList(); InputStreamReader ir = new InputStreamReader(proc.getInputStream()); BufferedReader in = new BufferedReader(ir); String line = null; while ((line = in.readLine()) != null) { list.add(line); } return list; } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public static String getPackageName(){ String strPid =Integer.toString(android.os.Process.myPid()); String cmd = "ps"; Listresult = readCommandOutput(cmd); if(result == null){ return ""; } for(String info:result){ if(info.contains(strPid)){ int index = info.lastIndexOf(" "); if(index >=0){ StringsubStr = info.substring(index+1); Log.i(TAG,subStr); return subStr; } } } return ""; } public static boolean needDebug(String packageName){ String debugProcess = android.os.SystemProperties.get("persist.sys.debug"); Log.i(TAG,debugProcess); if(debugProcess.equals(packageName)){ return true; } return false; } public static void main(Stringargv[]) { try { // Start profiling the zygote initialization. SamplingProfilerIntegration.start(); registerZygoteSocket(); EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START, SystemClock.uptimeMillis()); preload(); EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END, SystemClock.uptimeMillis()); // Finish profiling the zygote initialization. SamplingProfilerIntegration.writeZygoteSnapshot(); // Do an initial gc to cleanup after startup gc(); // If requested, start system server directlyfrom Zygote if (argv.length != 2) { throw new RuntimeException(argv[0] + USAGE_STRING); } if (argv[1].equals("start-system-server")) { startSystemServer(); } else if (!argv[1].equals("")) { throw new RuntimeException(argv[0] + USAGE_STRING); } Log.i(TAG, "Accepting command socket connections"); if (ZYGOTE_FORK_MODE) { runForkMode(); } else { runSelectLoopMode(); } closeServerSocket(); } catch (MethodAndArgsCaller caller) { String packageName = getPackageName(); if(needDebug(packageName)){ android.ddm.DdmHandleAppName.setAppName(packageName,UserHandle.myUserId()); android.os.Debug.waitForDebugger(); } caller.run(); } catch (RuntimeException ex) { Log.e(TAG, "Zygote died with exception", ex); closeServerSocket(); throw ex; } } 6 readCommandOutput:用于執(zhí)行命令并獲取命令的輸出 7 getPackageName()有于獲取當(dāng)前進(jìn)程的包名 這里默認(rèn)進(jìn)程名稱即為包名 獲取ps的輸出 然后通過pid找到本程序所在的輸出行。 提取出本程序所在的輸出行包名 8 needDebug()用于判斷當(dāng)前進(jìn)程是否需要調(diào)試,原理是這樣的: 使用者通過setprop persist.sys.debug 包名來設(shè)置包的名稱 needDebug獲取 persist.sys.debug 再與本進(jìn)程的包名進(jìn)行比較,以判斷是否要調(diào)試 9 接下來的動(dòng)作就和《Android實(shí)現(xiàn)開機(jī)調(diào)試system_process》一樣了: 設(shè)置App在DDM中的名稱: android.ddm.DdmHandleAppName.setAppName(packageName,UserHandle.myUserId()); 等待調(diào)試器來連接: android.os.Debug.waitForDebugger(); 10 接下來重新編譯和燒錄,mmm...,一個(gè)漫長的過程,但是結(jié)果將會(huì)證明一確都是值得的。 11 接下來,創(chuàng)建一個(gè)偽工程,修改Manifest中的package為需要調(diào)試的程序包名 12 再在工程中將需要調(diào)試的framework層代碼引進(jìn)來 13 接下來,adb shell連接到android,進(jìn)行命令行 14 執(zhí)行命令: setprop persist.sys.debug 包名 15 在需要調(diào)試的代碼上設(shè)置斷點(diǎn) 16 接下來,啟動(dòng)應(yīng)用程序,注意,是直接啟動(dòng)程序,而不是通過eclipse啟動(dòng)調(diào)試!
當(dāng)前文章:如何獲取文章源碼,如何在列表頁中直接獲取文章內(nèi)容
標(biāo)題路徑:http://www.rwnh.cn/article48/egheep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、微信公眾號(hào)、軟件開發(fā)、用戶體驗(yàn)、App開發(fā)、電子商務(wù)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)