知乎android源碼
『壹』 知乎有官方 Android 的客戶端嗎
有,這個是官方的下載地址,點擊就可以下載了。http://zhstatic.hu.com/pkg/hu/android/hu-android-app-hu-release-2.4.0-240.apk
求採納,謝謝
『貳』 知乎上有哪些 Android 開發的大牛
有興趣就去 Star 下 android-dev-com · GitHub 和 android-dev-cn · GitHub 這里有你耳熟能詳的開源庫作者、博文作者!
收集了 國外著名開發者 25 人,包括 Github 地址、Blog 地址以及重點貢獻介紹
收集了 國內部分開發者 32人,包括 Github 地址、Blog 地址以及重點貢獻介紹
『叄』 如何評價知乎 Android 客戶端 4.0
有種為了加 FAB 而加 FAB 的嫌疑,感覺知乎客戶端真的沒必要加上那樣一個刷新按鈕。我身邊的朋友包括我,上一次知乎客戶端基本只翻一遍時間線,因為答案普遍較長所以每次看完一遍就需要二三十分鍾,一般不會再回頭刷新一遍(畢竟這不是微博,知乎回答內容多,沒什麼時效性)那麼明顯一個刷新 FAB 意義不大。 UPDATE:上面那段除了第一句都是胡說八道了...眼瞎了居然把 FAB 功能看成是刷新,實在抱歉。用加號也不是非常合適,提問應該算是個不大常用的功能,用作 FAB 似乎小題大做。 另外我一直希望每日熱門和話題可以加入主頁,放在 drawer 里可發現性很差(我幾個同學甚至不知道熱門回答是個多麼有意思的地方)。
『肆』 為什麼知乎Android版用的第三方框架有很多重復的
關於 JSON 解析,目測是知乎 Android 用到的一些第三方庫導致的,比如 Leancloud。
沒找到知乎 Android 使用了 retrofit
okhttp,rxjava,roboprice 應該不是一個東西
『伍』 知乎Android客戶端的首次進入引導頁是怎麼製作和實現的
創建一個.java文件(包含.xml布局文件)
用到滑動頁面ViewPager
配置文件里別忘了加上
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
『陸』 什麼是android開發 知乎
Android 是一種基於 Linux® V2.6 內核的綜合操作環境。最初,Android 的部署目標是行動電話領域,包括智能電話和更廉價的翻蓋手機。但是, Android 全面的計算服務和豐富的功能支持完全有能力擴展到行動電話市場以外。Android 也可以用於其他的平台和應用程序。
黑莓和 iPhone 都提供了受歡迎的、高容量的移動平台,但是卻分別針對兩個不同的消費群體。黑莓是企業業務用戶的不二選擇。但是,作為一種消費設備,它在易用性和 「新奇特性」 方面難以和 iPhone 抗衡。Android 則是一個年輕的、有待開發的平台,它有潛力同時涵蓋行動電話的兩個不同消費群體,甚至可能縮小工作和娛樂之間的差別
如今,很多基於網路或有網路支持的設備都運行某種 Linux 內核。這是一種可靠的平台:可經濟有效地進行部署和提供支持,並且可直接作為面向部署的良好的設計方法。這些設備的 UI 通常是基於 HTML 的,可通過 PC 或 Mac 瀏覽器查看。但並不是每個設備都需要通過一個常規的計算設備來控制。
Android 簡史
Android 平台是 Open Handset Alliance 的成果,Open Handset Alliance 組織由一群共同致力於構建更好的行動電話的公司組成。這個組織由 Google 領導,包括移動運營商、手持設備製造商、零部件製造商、軟體解決方案和平台提供商以及市場營銷公司。從軟體開發的觀點看,Android 正處在開源領域的中心位置。
市場上第一款支持 Android 的手機是由 HTC 製造並由 T-Mobile 供應的 G1。這款設備從設想到推出花了大約一年的時間,惟一可用的軟體開發工具是一些實行增量改進的 SDK 發行版。隨著 G1 發行日的臨近,Android 團隊發布了 SDK V1.0,用於這個新平台的應用程序也浮出水面。
為了鼓勵創新,Google 舉辦了兩屆 「Android Developer Challenges」,為優勝的參賽作品提供數百萬美金的獎勵。G1 問世幾個月之後,隨後就發布了 Android Market,它使用戶可以瀏覽應用程序,並且可以將應用程序直接下載到他們的手機上。經過大約 18 個月,一個新的移動平台進入公眾領域。
『柒』 在Android系統上啟動知乎app時會喚醒微信是什麼原因
本回答信息來自針對微信Android客戶端以及知乎Android客戶端的分析。
我手機上裝了一鍵清理的軟體,平時從來不讓微信在後台運行,但是每當打開知乎,不出三秒,微信消息就來了,消息並不固定,只是感覺微信被打開了,我在想知乎是不是跟微信合作,後台打開微信,然後以此來賺錢的呢?
首先針對題主的疑問,准備的回答:不是
實際的情況是,知乎調用微信sdk中分享的相關介面,微信sdk的相關介面裡面,給微信發送了一個廣播,微信app就被喚醒了,這不是知乎的主觀行為,而是微信的(而且結合實際的分析來看,這個應該也算是正常的功能)。
以下是詳細分析:
1 首先說一下app的被喚醒(自啟動)機制。
app自啟動,基本上都是依靠Android的廣播來實現的,而且是靜態注冊的廣播(在AndroidManifest.xml文件中進行配置的廣播),發送廣播的方法在一般情況下是sendBroadcast。
2 按照慣例,反編譯一下微信apk,然後搜索一下它能夠由哪些靜態廣播進行喚醒,同時抓取廣播相關的log。
結合微信的AndroidManifest.xml文件以及抓取的log,可以知道相關的BroadcastReceiver是EntryReceiver,相關的action 為
com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER
com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER
從其名稱上看,是和注冊/注銷相關,具體接收到廣播之後做了哪些處理,這些就不贅述了。
I/ActivityManager( 1107): Start proc com.tencent.mm for broadcast com.tencent.mm/.plugin.base.stub.WXEntryActivity$EntryReceiver: pid=28779 uid=10131 gids={50131, 3003, 1028, 1015, 3002, 3001}
<receiver android:name="com.tencent.mm.plugin.base.stub.WXEntryActivity$EntryReceiver">
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER"/>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_UNREGISTER"/>
</intent-filter>
3 接下來分析知乎的代碼
搜索一下知乎反編譯之後的smali文件(sendBroadcast),其中只有一條是和微信相關的
hu_2.0.3_176/smali/com/tencent/mm/sdk/openapi/j.smali: invoke-virtual {v0, v4, v1}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V
再看一下反編譯的java文件,能夠比較清楚的看到,就是利用com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER
這個action來進行注冊,檢查一些必要的信息。
根據這些信息,結合微信和知乎反編譯之後的文件,已經可以完整的分析具體發生了哪些事情了。
com.tencent.mm.sdk.openapi.j
public final boolean a(String paramString)
{
if (!b("com.tencent.mm"))
{
com.tencent.mm.sdk.platformtools.a.a("MicroMsg.SDK.WXApiImplV10", "register app failed for wechat app signature check failed");
return false;
}
this.b = paramString;
com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.WXApiImplV10", "register app " + this.a.getPackageName());
Context localContext = this.a;
String str1 = "weixin://registerapp?appid=" + this.b;
String str2 = "com.tencent.mm" + ".permission.MM_MESSAGE";
Intent localIntent = new Intent("com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER");
String str3 = localContext.getPackageName();
localIntent.putExtra("_mmessage_sdkVersion", 553910273);
localIntent.putExtra("_mmessage_appPackage", str3);
localIntent.putExtra("_mmessage_content", str1);
localIntent.putExtra("_mmessage_checksum", b.a(str1, str3));
localContext.sendBroadcast(localIntent, str2);
com.tencent.mm.sdk.platformtools.a.b("MicroMsg.SDK.MMessage", "send mm message, intent=" + localIntent + ", perm=" + str2);
return true;
}
4 最後,因為偷懶,所以我只是大概的靜態分析了相關代碼,沒發現知乎和微信做了什麼喪失的事情,然後大概加了段log check了一下,從中也可以看出的確是和分享有關,至於使用時機及頻率是否合適,這個和問題沒什麼關系,不做討論。
D/hillwind( 5766): java.lang.Throwable
D/hillwind( 5766): at com.hillwind.android.util.RLog.printStackTrace(RLog.java:11)
D/hillwind( 5766): at com.tencent.mm.sdk.openapi.j.a(Unknown Source)
D/hillwind( 5766): at com.hu.android.util.af.b(WeChatHelper.java:43)
D/hillwind( 5766): at com.hu.android.widget.a.b(ActivityChooserModel.java:721)
D/hillwind( 5766): at com.hu.android.widget.ShareActionProvider.setShareIntent(ShareActionProvider.java:98)
D/hillwind( 5766): at com.hu.android.ui.fragment.bx.a(QuestionViewerFragment.java:221)
D/hillwind( 5766): at android.support.v4.app.j.a(FragmentManager.java:1973)
D/hillwind( 5766): at android.support.v4.app.g.onCreatePanelMenu(FragmentActivity.java:226)
D/hillwind( 5766): at android.support.v7.a.b.a(ActionBarActivity.java:233)
D/hillwind( 5766): at android.support.v7.a.g.a(ActionBarActivityDelegateICS.java:146)
D/hillwind( 5766): at android.support.v7.a.b.onCreatePanelMenu(ActionBarActivity.java:200)
D/hillwind( 5766): at android.support.v7.a.g$a.onCreatePanelMenu(ActionBarActivityDelegateICS.java:293)
D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:472)
D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:878)
D/hillwind( 5766): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:257)
D/hillwind( 5766): at android.os.Handler.handleCallback(Handler.java:733)
D/hillwind( 5766): at android.os.Handler.dispatchMessage(Handler.java:95)
D/hillwind( 5766): at android.os.Looper.loop(Looper.java:136)
D/hillwind( 5766): at android.app.ActivityThread.main(ActivityThread.java:5140)
D/hillwind( 5766): at java.lang.reflect.Method.invokeNative(Native Method)
D/hillwind( 5766): at java.lang.reflect.Method.invoke(Method.java:515)
D/hillwind( 5766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
D/hillwind( 5766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
D/hillwind( 5766): at dalvik.system.NativeStart.main(Native Method)
『捌』 怎樣從零開始學習安卓軟體開發
1、Java se基礎
1).Java基本數據類型與表達式,分支循環。
2).String和StringBuffer的使用、正則表達式。
3).面向對象的抽象,封裝,繼承,多態,類與對象,對象初始化和回收;構造函數、this關鍵字、方法和方法的參數傳遞過程、static關鍵字、內部類。
4).對象實例化過程、方法的覆蓋、final關鍵字、抽象類、介面、繼承的優點和缺點剖析;對象的多態性:子類和父類之間的轉換、抽象類和介面在多態中的應用、多態帶來的好處。
5).Java異常處理,異常的機制原理。
6).常用的設計模式:Singleton、Template、Strategy模式。
7).JavaAPI介紹:種基本數據類型包裝類,System和Runtime類,Date和DateFomat類等。
8).Java集合介紹:Collection、Set、List、ArrayList、LinkedList、Hashset、Map、HashMap、Iterator等常用集合類API。
9).JavaI/O輸入輸出流:File和FileRandomAccess類,位元組流InputStream和OutputStream,字元流Reader和Writer,以及相應實現類,IO性能分析,位元組和字元的轉化流,包裝流的概念,以及常用包裝類,計算機編碼。
10).Java高級特性:反射和泛型。
11).多線程原理:如何在程序中創建多線程(Thread、Runnable),線程安全問題,線程的同步,線程之間的通訊、死鎖。
2、android UI編程
1)、Android開發環境搭建:Android介紹,Android開發環境搭建,第一個Android應用程序,Android應用程序目錄結構。
2)、Android初級控制項的使用:
TextView控制項的使用
Button控制項的使用方法
EditText控制項的使用方法
ImageView的使用方法
RadioButton的使用方法
Checkbox的使用方法
Menu的使用方法
3)、Android高級控制項的使用:
ListView的使用方法
GridView的使用方法
Adapter的使用方法
Spinner的使用方法
Gallary的使用方法
ScrollView的使用方法
RecyclerView
4、對話框與菜單的使用:
Dialog的基本概念
BlockquoteAlertDialog的使用方法
DatePickerDialog的使用方法
Menu的使用方法
自定義Menu的實現方法
5.控制項的布局方法:
線性布局的使用方法
相對布局的使用方法
6.多Acitivity管理:
AndroidManifest.xml文件的作用
Intent的使用方法
使用Intent傳遞數據的方法
啟動Activity的方法
IntentFilter的使用方法
Activity Group的使用方法
7、自定義控制項實現方法:
自定義ListView的實現方法
可折疊ListView的使用方法
自定義Adapter的實現方法
自定義View的實現方法
動態控制項布局的上實現方法
上拉刷新下拉載入更多
3、android網路編程與數據存儲
1).基於Android平台的HTTP通訊:
Http協議回顧
使用Get方法向伺服器提交數據的方法
使用POST方法向伺服器提交數據的實現方法
使用Http協議實現多線程下載
使用Http協議實現斷點續傳
2).Android數據存儲技術:
SQLite3資料庫簡介
SQL語句回顧
SQLite3編程介面介紹
SQLite3事務管理
SQLite3游標使用方法
SQLite3性能分析
訪問SDCard的方法
訪問SharedPreferences的方法
初級工程師
技術要求:
基本知識點
比如四大組件如何使用、如何創建Service、如何進行布局、簡單的自定義View、動畫等常見技術書籍推薦
《第一行代碼 Android》、《瘋狂Android》稍微深入的知識點
AIDL、Messenger、Binder、多進程、動畫、滑動沖突、自定義View、消息隊列等書籍推薦
《Android開發藝術探索》、《Android群英傳》AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別;
Binder:從Java層大概理解Binder的工作原理,懂Parcel對象的使用;
多進程:熟練掌握多進程的運行機制,懂Messenger、Socket等;
事件分發:彈性滑動、滑動沖突等;
玩轉View:View的繪制原理、各種自定義View;
動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理;
懂性能優化、熟悉mat等工具
懂點常見的設計模式
搞懂view的滑動原理
搞懂如何實現彈性滑動
搞懂view的滑動沖突
搞懂view的measure、layout和draw
然後再學習幾個已有的自定義view的例子
最後就可以搞定自定義view了,所謂萬變不離其宗
稍微深入的知識點
系統核心機制
基本知識點的細節
設計模式和架構
書籍推薦
《Android開發藝術探索》、《Android 源碼設計模式解析與實戰》、《Android內核剖析》繼續加深理解」稍微深入的知識點「中所定義的內容
了解系統核心機制:
了解SystemServer的啟動過程
了解主線程的消息循環模型
了解AMS和PMS的工作原理
能夠回答問題」一個應用存在多少個Window?「
了解四大組件的大概工作流程
…
基本知識點的細節
Activity的啟動模式以及異常情況下不同Activity的表現
Service的onBind和onReBind的關聯
onServiceDisconnected(ComponentName className)和binderDied()的區別
AsyncTask在不同版本上的表現細節
線程池的細節和參數配置
…
熟悉設計模式,有架構意識學習方法
中級工程師
技術要求:
高級工程師
技術要求:
-----------------------------------------------------------------
作者:小碼同學
鏈接:https://zhuanlan.hu.com/p/163528281
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
『玖』 為什麼知乎上好多人強調「安卓」和「Android」的區別
最近剛剛接觸到RobotFramework,發現這個工具倒是可以滿足我的要求,而且可以結合seleniumLibrary,用來做web的自動化測試相當不錯。之前我也接觸過selenium,不過感覺那個工具更貼近開發人員使用,有了robotFramework之後,感覺這個工具相當強大,而且是貼近測試人員的。之所以說強大,主要是這些測試腳本都可以用文本格式保存(如txt/html等)
==安裝篇==
如果有想學的朋友可以自己下載以下文件安裝(Google-code里可以找到大部分的安裝文件):
這篇文章的內容比較舊了,最新的安裝指南請查看 更新篇
python-2.7.1.msi(首先要有python,請選擇將Python加入Path)
wxPython2.8-win32-unicode-2.8.11.0-py27.exe(wxPython,必須要的)
robotframework-2.6.0.win32.exe(然後裝robot的Framework)
robotframework-ride-0.38.1.win32.exe(robotFramework的IDE,很不錯)
robotframework-seleniumlibrary-2.8.win32.exe(seleniumLibrary)
安裝成功後
執行[PythonDir]\Scripts\ride.py
看到界面就是安裝成功了。
如果需要AutoIt支持就下載下面2個東東。
AutoItLibrary-1.1
pywin32-216.win32-py2.7.exe
==入門篇==
安裝完成了,這個框架可以說是基於keyword的操作,按F5可以看到所有載入的keyword。
首先新增一個project
然後新增suite
然後新增test case,接著在suite層級add library,把selenium library加進來,添加後按F5檢驗是否添加成功,如圖
OK,繼續在suite的setting里設置suite啟動和結束的keyword,即Start Selenium Server和Stop Selenium Server,他會在運行時幫助我們自動啟動seleniumserver。
接下來在test case里添加一個步驟,open browser(一般用selenium做web測試都要用這個方法來打開瀏覽器),添加後關鍵字變成藍色表示找到關鍵字了,否則可能是拼寫錯誤或者沒有載入相應的library。紅色表示有一個必選參數要給定輸入值,具體參數可以看F5里的keyword說明。
輸入參數,第二個參數默認是firefox,不過我沒裝,就用ie吧。
以上只是一個簡單的例子,沒有詳細說明每個步驟的操作,只是初步介紹。後續再詳細介紹
『拾』 哪位知乎大神 懂android廣告sdk的開發
1、去廣告渠道下載SDK
點金:http://mjoy.91.com/
2、解壓縮包,一般會有demo項目,doc文檔還有庫文件
3、將lib目錄下的dianjin.jar復制到項目的libs目錄
4、查看doc文檔,按照步驟接入,配置Androidmanifext.xml文件
5、在代碼進行sdk初始化、方法調用等
6、運行到模擬器或者真機查看廣告效果