最近公司 APP 完工發(fā)布了,可是對于安全性很擔(dān)憂。
世上沒有絕對安全的保護(hù)手段,但肯定有性價比最優(yōu)秀的方案。
主要擔(dān)心被反編譯,重新打包。
對于應(yīng)用加固的產(chǎn)品,大家有什么推薦嗎?
大家都再用什么加固方案?
另外,我很好奇,全網(wǎng)都是 360 的加固的脫殼和修復(fù)教程,難道 360 的加固真這么不堪?感覺隨隨便便個阿貓阿狗都能破解 360 的加固,怎么會有這種現(xiàn)象呢,是因?yàn)榇蟛糠秩擞玫亩际?360 免費(fèi)的基礎(chǔ)加固嗎?
大家對此有什么建議的?
讓斷點(diǎn)不停下來,而是打印一行 log: https://chriszou.com/2020/08/06/androidstudio-debug-tips/
當(dāng)選擇網(wǎng)站語言為中文-簡體時不提供下載https://developer.android.google.cn/studio 只有切換語言為 English 的時候才可以,這是為何? 萬一有一天 github 和 stackover 都不行了(無法登錄,限制 ip )我就轉(zhuǎn)行了
別說 x5 內(nèi)核還是穩(wěn)的一逼,比原生的 webview 好多了,寫個 h5 頁不用太操心不同 Android 版本的兼容問題。
普通的 app 用他們動態(tài)集成就 ok 了,共享微信、QQ 的 x5 內(nèi)核。不過有些 app 可能就沒有那么幸運(yùn),需要把用另外一個瀏覽器內(nèi)核來抹平掉低版本系統(tǒng)里面的 webview,并且必須可靠的運(yùn)行(不可能裝全家桶),那就只能靜態(tài)集成把內(nèi)核打包進(jìn) apk 了。
坑爹的是 x5 官網(wǎng)很多年前提供了靜態(tài)集成的 SDK 和文檔,后面不知什么原因刪除了,渣也不剩,還故意留點(diǎn)只言片語勾引你的欲望??
昨天沒辦法,研究了一下,還好找到了集成的方法,并且順利加載到了最新版的 X5 內(nèi)核,可以用上前沿的 H5 特性??
研究不易,相關(guān)文章幾乎沒有,特意分享一下,供有需要的人使用。
博客園: https://www.cnblogs.com/xiangyuecn/p/13450916.html
從 Iphone 11 到華為 P40,再到 note20,商家想拉大中杯和超大杯的差距。明知道中杯口碑不好還這么做,匪夷所思。
請問以后蘋果出的 arm 芯片的 macbook pro 能安裝現(xiàn)在的 mac 版的 android studio 嗎?或者 android studio 會不會適配 arm 芯片版的 macbook 呢?現(xiàn)在買 Intel 版的 macbook Pro 會不會過兩年又得換了?
通過 WifiManager.getScanResults()獲得到的 ScanResult,里面有個屬性 capabilities,打印出來以后有以下幾個值:WPA 、WPA2 、RSN 、PSK 、TKIP 、CCMP 、ESS 、WFA-HT 、WFA-VHT 等,我列舉的可能不全。 百度后了解到 wifi 的安全策略是由認(rèn)證算法+加密算法組成的。 1 、認(rèn)證機(jī)制:認(rèn)證機(jī)制用來對用戶的身份進(jìn)行驗(yàn)證,以限定特定的用戶(授權(quán)的用戶)可以使用網(wǎng)絡(luò)資源。 2 、 加密機(jī)制:加密機(jī)制用來對無線鏈路的數(shù)據(jù)進(jìn)行加密,以保證無線網(wǎng)絡(luò)數(shù)據(jù)只被所期望的用戶接收和理解。 其中 WPA 、WPA2 、RSN 是認(rèn)證算法,PSK 、TKIP 、CCMP 是加密算法。 下面幾個我沒查到是什么意思,有沒有大神解答一下? ESS 、WFA-HT 、WFA-VHT ( WFA 好像是指 wifi 聯(lián)盟?) 參考: 1 、 https://blog.csdn.net/eydwyz/article/details/65448171 2 、 https://www.pianshen.com/article/6471706473/
什么是人臉匿名( Face Anonymization )
隨著人臉識別技術(shù)的普及,人臉數(shù)據(jù)的隱私問題也得到越來越多關(guān)注,針對隱私保護(hù)的研究也陸續(xù)出現(xiàn)。目前大致有下面幾個方向 篡改輸入人臉識別系統(tǒng)的圖像。 生成式對抗網(wǎng)絡(luò)(GAN)來匿名某人的照片或視頻。 直接模糊人臉識別到的人臉
本文主要講第 3 點(diǎn),講講怎么使用移動端人臉關(guān)鍵點(diǎn)算法實(shí)現(xiàn)人臉匿名功能。這種方法對設(shè)備要求低,代碼簡單易懂,修改后就可直接落地。
下圖就是最終想實(shí)現(xiàn)的功能
什么是人臉關(guān)鍵點(diǎn)算法( Face Landmarks )
人臉關(guān)鍵點(diǎn)檢測是人臉相關(guān)算法中的關(guān)鍵一環(huán),它是人臉識別、表情分析、3D 人臉重建,表情驅(qū)動 3D 動畫等一系列人臉相關(guān)問題的前提。
我們將使用 TengineKit 來實(shí)現(xiàn)人臉匿名功能
TengineKit
免費(fèi)移動端實(shí)時人臉 212 關(guān)鍵點(diǎn) SDK 。是一個易于集成的人臉檢測和人臉關(guān)鍵點(diǎn) SDK 。它可以在各種手機(jī)上以非常低的延遲運(yùn)行。
https://github.com/OAID/TengineKit
TengineKit 效果圖
實(shí)現(xiàn)
配置 Gradle
Project 中的 build.gradle 添加 repositories { ... mavenCentral() ... } allprojects { repositories { ... mavenCentral() ... } }
主 Module 中的 build.gradle 添加 dependencies { ... implementation 'com.tengine.android:tenginekit:1.0.3' ... }
配置 manifests
初始化 Android Camera
為 App 創(chuàng)建自定義攝像頭界面的步驟如下: 檢測和訪問 Camera 創(chuàng)建預(yù)覽 TextureView 構(gòu)建預(yù)覽 TextureView 布局 將 Camera 和 TextureView 綁定 啟動預(yù)覽
我們先 new 一個 TextureView.SurfaceTextureListener,在里面完成 camera 的初始配置,當(dāng) TextureView 可用的時候,onSurfaceTextureAvailable 中的代碼將被調(diào)用 private final TextureView.SurfaceTextureListener surfaceTextureListener = new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(final SurfaceTexture texture, final int width, final int height) { int index = getCameraId(); camera = Camera.open(index); try { Camera.Parameters parameters = camera.getParameters(); List focusModes = parameters.getSupportedFocusModes(); if (focusModes != null && focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); } List cameraSizes = parameters.getSupportedPreviewSizes(); Size[] sizes = new Size[cameraSizes.size()]; int i = 0; for (Camera.Size size : cameraSizes) { sizes[i++] = new Size(size.width, size.height); } Size previewSize = CameraConnectionFragment.chooseOptimalSize(sizes, desiredSize.getWidth(), desiredSize.getHeight()); parameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight()); camera.setDisplayOrientation(90); camera.setParameters(parameters); camera.setPreviewTexture(texture); } catch (IOException exception) { camera.release(); } camera.setPreviewCallbackWithBuffer(imageListener); Camera.Size s = camera.getParameters().getPreviewSize(); camera.addCallbackBuffer(new byte[ImageUtils.getYUVByteSize(s.height, s.width)]); textureView.setAspectRatio(s.height, s.width); camera.startPreview(); } @Override public void onSurfaceTextureSizeChanged(final SurfaceTexture texture, final int width, final int height) { } @Override public boolean onSurfaceTextureDestroyed(final SurfaceTexture texture) { return true; } @Override public void onSurfaceTextureUpdated(final SurfaceTexture texture) { } };
此處將 textureView 和 camera 聯(lián)系起來 textureView.setSurfaceTextureListener(surfaceTextureListener);
當(dāng) camera 啟動預(yù)覽,textureView 得到真實(shí)的 size 后。我們得到了 camera 的輸出視頻流的寬高和預(yù)覽 textureView,將其保存起來,后續(xù)有用到。 textureView.setRealSizeListener(new AutoFitTextureView.RealSizeListener() { @Override public void onRealSizeMeasure(int w, int h) { if(!isReady){ isReady = true; Camera.Size s = camera.getParameters().getPreviewSize(); cameraReadyListener.onCameraReady( s.width, s.height,w, h ); } } });
處理 Camera 傳過來的視頻流
首先我們先初始化 TengineKit: 選用 camera 處理模式 打開人臉檢測和人臉關(guān)鍵點(diǎn)功能 設(shè)置視頻流格式為 YUV_NV21 ( Android camera 默認(rèn)格式) 設(shè)置輸入視頻流的寬高,此處為 camera 的預(yù)覽寬高 設(shè)置輸出視頻流的寬高,此處為 textrureView 的寬高 設(shè)置輸入視頻流來自前置攝像頭 com.tenginekit.Face.init(getBaseContext(), AndroidConfig.create() .setCameraMode() .openFunc(AndroidConfig.Func.Detect) .openFunc(AndroidConfig.Func.Landmark) .setInputImageFormat(AndroidConfig.ImageFormat.YUV_NV21) .setInputImageSize(previewWidth, previewHeight) .setOutputImageSize(outputWidth, outputHeight) ); com.tenginekit.Face.Camera.switchCamera(false);
處理數(shù)據(jù) 得到手機(jī)旋轉(zhuǎn)角度,將其設(shè)置到 TengineKit 開始檢測,當(dāng)檢測到人臉數(shù)目大于 0 的時候,調(diào)用 faceDetect.landmark2d(),得到人臉關(guān)鍵點(diǎn)鏈表 int degree = CameraEngine.getInstance().getCameraOrientation(sensorEventUtil.orientation); com.tenginekit.Face.Camera.setRotation(degree - 90, false, outputWidth, outputHeight); com.tenginekit.Face.FaceDetect faceDetect = Face.detect(data); faceLandmarks = null; if(faceDetect.getFaceCount() > 0){ faceLandmarks = faceDetect.landmark2d(); }
高斯模糊和繪制
這里使用 Android 的 bitmap 來實(shí)現(xiàn)功能,這種做法比較粗糙,性能差,但是簡單易懂,如果讀者有興趣可以使用 OpenGLES 來實(shí)現(xiàn)此功能。 將從攝像頭中得到的 yuv 數(shù)據(jù)通過 TengineKit 的圖片幫助函數(shù)轉(zhuǎn)化為 Bitmap 通過人臉關(guān)鍵點(diǎn)的外接框,裁剪 bitmap 得到人臉的 bitmap 數(shù)組 將得到的人臉 bitmap 進(jìn)行高斯模糊 if(testBitmap != null){ testBitmap.recycle(); } testBitmap = Face.Image.convertCameraYUVData( data, previewWidth, previewHeight, outputWidth, outputHeight, - 90, true); for(Bitmap bitmap : testFaceBitmaps){ bitmap.recycle(); } testFaceBitmaps.clear(); if(testBitmap != null && faceDetect.getFaceCount() > 0){ if(faceLandmarks != null){ for (int i = 0; i < faceLandmarks.size(); i++) { Bitmap face = BitmapUtils.getDstArea(testBitmap, faceLandmarks.get(i).getBoundingBox()); face = BitmapUtils.blurByGauss(face, 50); testFaceBitmaps.add(face); } } } runInBackground(new Runnable() { @Override public void run() { trackingOverlay.postInvalidate(); } });
trackingOverlay 為定制的 view,將 canvas 暴露出來用于畫 bitmap trackingOverlay.addCallback(new OverlayView.DrawCallback() { @Override public void drawCallback(final Canvas canvas) { if(testBitmap != null){ canvas.drawBitmap(testBitmap, 0,0, circlePaint); } if(faceLandmarks != null){ for (int i = 0; i < faceLandmarks.size(); i++) { Rect r = faceLandmarks.get(i).getBoundingBox(); canvas.drawRect(r, circlePaint); canvas.drawBitmap(testFaceBitmaps.get(i), r.left, r.top, circlePaint); } } } });
效果
Demo
參考
https://github.com/OAID/TengineKit
源碼
https://github.com/jiangzhongbo/TengineKit_Demo_Identity_Protection
知乎
https://zhuanlan.zhihu.com/p/161038093
dialer beta 有手動錄音了,會跟雙方通知開始錄音了
錄音檔的管理一貫?zāi)蛐宰龀闪艘慧缡?
這點(diǎn)好像和 pc 上的瀏覽器不一樣.起因是: https://github.com/claudiodangelis/qrcp 這個項(xiàng)目, 默認(rèn)不加-k 選項(xiàng),下載完成后服務(wù)端就斷開了,用 android 手機(jī)上自帶的瀏覽器發(fā)現(xiàn)總是下載失敗和 PC 上的瀏覽器的差異在于, PC 上半天不點(diǎn)擊 Ok 的話,其實(shí)瀏覽器已經(jīng)給你下下來了(可以通過 response 看到),這個時候服務(wù)端即使斷開,你再點(diǎn)擊保存是成功的. android 上的瀏覽器,我的理解沒有點(diǎn)擊"確定"按鈕也應(yīng)該下載了的,因?yàn)榉?wù)端是把數(shù)據(jù)傳輸完畢才關(guān)閉的,但是都是顯示下載失敗... 不知道為啥
各位兄弟,剛?cè)肓藗€ mi10,去 google play 上下載了一些應(yīng)用,大家都知道 play 版本,一般版本號比國內(nèi)要小,所以一大早醒來發(fā)現(xiàn)全被應(yīng)用商城更新成國內(nèi)最新版本了。
請問大家一般怎么處理這種情況的?
之前收藏過,但是好多壓縮包都損壞打不開了,最主要的是缺少視頻里面提到的 sql 文件
我試過的 windows 安卓模擬器都是先啟動模擬器再啟動 app 。有沒有安卓模擬器是可以在 windows 上生成 app 的快捷方式,直接點(diǎn)擊就能啟動 app ?之前試過 Chrome ARC Welder,能實(shí)現(xiàn),但問題 ARC 支持的 app 太少了,很多 app 都不能正常運(yùn)行。google 了很久,都沒有找到。不過,了解到這種操作方式應(yīng)該就是跟 Parallels Coherence 模式差不多。 或者類似 linux anbox,貌似 andbox 也是要先啟動 andbox,再打開 app,只是只是每個 app 都是獨(dú)立運(yùn)行在一個窗口中。
有這個奇葩需求的原因是:國內(nèi)特色銀行 APP (但是國內(nèi) Android 不 Magisk 簡直一言難盡。
拔掉網(wǎng)線。完。歡迎補(bǔ)充。 小時候遇到想看的電視節(jié)目,總是拼命的跑回家,氣喘吁吁,就守在電視機(jī)旁,認(rèn)認(rèn)真真地看,讓畫面深深地印在腦海里 現(xiàn)在的電視節(jié)目可以用硬盤保存下來,電影可以反復(fù)觀看,一切看來便利之極,可是比較最近看的電視電影,還是小時候看的那些記得牢 以前為了看到一個節(jié)目,不放棄任何機(jī)會,每次都認(rèn)認(rèn)真真地看,才能久久無法忘懷那些曾經(jīng)的感動,臺詞、畫面、效果音、背景音樂、人物表情,如果錯過了就再沒有機(jī)會補(bǔ),越是這樣想,越能看到更多的細(xì)節(jié),它們就像波浪源源不斷地進(jìn)入腦海 摘自Keroro 297話
有的時候,從類似 Demonoid 這樣的網(wǎng)站下載資源時,就算是迅雷離線也不會讓速度快很多。我的辦法是:SSH Tunnel 打開,然后用 Vuze 下,因?yàn)?Vuze 支持用 SOCKS Proxy 來進(jìn)行 Peer Communication。
印象中三星的國行 ROM 一直對 Google 有不錯的支持。
手持三星 S9+港行 SM-G9650 (已刷國行 One UI ROM ),Google 賬號在美區(qū),通過下載 Google 開啟了系統(tǒng)內(nèi)置的 google 服務(wù),之前一直可以從 Google play 正常下載使用 Netflix,然而在最近某次系統(tǒng)更新后,play 商店開始搜索不 Netflix 和 sky 光遇等 APP,并在打開頁面提示“已不再兼容您的設(shè)備”。
這個現(xiàn)象顯然是 SafetyNet 沒過引發(fā)的,但檢查之后發(fā)現(xiàn),機(jī)器依然是:未 Root 、Knox 未觸發(fā)、Widevine CDM security level L1 、SafetyNet 四項(xiàng)全部 success (通過 SafetyNet Test app 測試)、Google play 顯示“設(shè)備已認(rèn)證”, 之前安裝的 Netflix 可以正常觀看 。
嘗試過清空 cache 和 data,更新 Google play service 和 Google play store 到最新,問題依舊。
求助各位:我漏掉了哪一點(diǎn)才導(dǎo)致了 Google 不認(rèn)可手中的設(shè)備?試著跟三星反饋問題,得到的回答是千篇一律的:Google 在中國無法使用,Netflix 還不支持中國大陸……簡直有毒。
作為普通平民,在目前 5G 網(wǎng)絡(luò)還沒完善,流量資費(fèi)還沒下降,5G 手機(jī)價格普遍較高的情況下,明顯入手 5G 手機(jī)不合適。如果入手 4G 手機(jī),又好像有點(diǎn)倒退。
但是剛好要換手機(jī)的話,現(xiàn)在入手 5G 手機(jī)是否合適?或者說,5G 網(wǎng)絡(luò)會在多久以后可以替代目前的 4G ?
早上開機(jī)還沒廣告圖,開機(jī)過了半小時。廣告圖出現(xiàn)了,很久前就已經(jīng)設(shè)置關(guān)閉廣告壁紙!但是然并卵?。?
現(xiàn)在的廠家實(shí)在太惡心人了
各位大神,安卓加固,關(guān)于 Android 加固,有沒有什么好的 APP 加固方案?可以分享一下嗎?
很高興見到你!我是 《 Jetpack MVVM Best Practice 》 作者 KunMinX 。
今天我們介紹的 “數(shù)據(jù)倒灌” 一詞,是我為了方便理解和記憶 “頁面在 ‘二進(jìn)宮’ 時收到舊數(shù)據(jù)推送” 的情況 ,而在 2019 年 自創(chuàng)并在網(wǎng)上傳播的 對此類現(xiàn)象的概括 。
它主要發(fā)生在:通過 SharedViewModel + LiveData 的組合來解決頁面通信的問題時。
關(guān)于 為什么會存在這個現(xiàn)象、為什么要使用 SharedViewModel + LiveData 等問題,可詳見 《 LiveData 數(shù)據(jù)倒灌》 篇對背景緣由的解析。
現(xiàn)有解決方案及各自缺陷
在 《 Jetpack MVVM 精講》 中我分別提到了 Event 事件包裝器、反射方式、SingleLiveEvent 這三種方式來解決 “數(shù)據(jù)倒灌” 的問題。它們分別來自上文我們提到的 外網(wǎng) 、 美團(tuán) 的文章,和官方最新 demo 。
但正如我在 《 Jetpack MVVM 精講》 介紹的,它們分別存在如下問題:
Event 事件包裝器:
對于多觀察者的情況,只允許第一個觀察者消費(fèi),這不符合現(xiàn)實(shí)需求;
而且手寫 Event 事件包裝器,在 Java 中存在 null 安全的一致性問題。
反射干預(yù) Version 的方式:
存在延遲,無法用于對實(shí)時性有要求的場景;
并且數(shù)據(jù)會隨著 SharedViewModel 長久滯留在內(nèi)存中得不到釋放。
官方最新 demo 中的 SingleLiveEvent:
是對 Event 事件包裝器 一致性問題的改進(jìn),但未解決多觀察者消費(fèi)的問題;
而且額外引入了消息未能從內(nèi)存中釋放的問題。
UnPeekLiveData 特點(diǎn)
UnPeekLiveData 通過 獨(dú)創(chuàng)的 “延時自動清理消息” 的設(shè)計(jì) ,來滿足:
1.消息被分發(fā)給多個觀察者時, 不會因第一個觀察者消費(fèi)了而直接被置空
2.時限到了, 消息便不再會被倒灌
3.時限到了, 消息自動從內(nèi)存中清理釋放
4.使非入侵的設(shè)計(jì)成為可能,并最終結(jié)合官方 SingleLiveEvent 的設(shè)計(jì)實(shí)現(xiàn)了 遵循開閉原則的非入侵重寫 。
并且 UnPeekLiveData 提供了構(gòu)造器模式,可通過構(gòu)造器組裝適合自己業(yè)務(wù)場景的 UnPeekLiveData 。
License
本文以 CC 署名-非商業(yè)性使用-禁止演繹 4.0 國際協(xié)議 發(fā)行。
Copyright ? 2019-present KunMinX
文中提到的 對 “ 數(shù)據(jù)倒灌 ” 一詞及其現(xiàn)象的概括、對 Event 事件包裝器、反射方式、SingleLiveEvent 各自存在的缺陷 的理解,以及對 UnPeekLiveData 的 “ 延遲自動清理消息 ” 的設(shè)計(jì), 均屬于本人獨(dú)立原創(chuàng)的成果 ,本人對此享有最終解釋權(quán)。
任何個人或組織在引用上述內(nèi)容時, 須注明原作者和出處 。未經(jīng)授權(quán)不得用于洗稿、廣告包裝等商業(yè)用途。
GitHub
https://github.com/KunMinX/UnPeekLiveData
b 站鏈接:https://b23.tv/BV1FC4y1h7fN 榮耀 30pro 和紅米 k30 pro 一直是 3000 元上下 性價比旗艦 5G 手機(jī)里無法忽視的力量,我們右手網(wǎng)上周剛剛做了一期榮耀 30pro 的視頻,有興趣的朋友可以在我們的微博或者 B 站頻道查看,今天我們要給大家說道說道紅米 K30 pro 這個手機(jī),并在一些地方對比一下這兩個機(jī)器,希望給您一些購機(jī)上的決策,兩個機(jī)器都是右手網(wǎng)自費(fèi)購買,沒有恰飯因素。本視頻文本腳本 https://www.uso.cn/post/view/56023
字節(jié)跳動,應(yīng)該大家比較熟了,不過多介紹。抖音創(chuàng)作工具部門,主要是負(fù)責(zé)抖音內(nèi)的拍攝、視頻編輯、發(fā)布整個流程,是 app 內(nèi)的核心業(yè)務(wù)之一。前不久,部門在杭州開設(shè)了 Office,目前需要大量的客戶端研發(fā),尤其急需 Android 研發(fā)人員。具體的 JD 如下:
職位描述
1 、負(fù)責(zé)負(fù)責(zé)字節(jié)跳動互娛的 Android 手機(jī)軟件的開發(fā)及設(shè)計(jì),包括但不限于抖音等產(chǎn)品的研發(fā);
2 、根據(jù)產(chǎn)品的需求進(jìn)行 Android 產(chǎn)品的開發(fā),對相關(guān)模塊做重構(gòu)和優(yōu)化;
3 、對 Android 平臺開發(fā)技術(shù)進(jìn)行研究,定位和解決一些技術(shù)上的疑難問題;
4 、根據(jù)項(xiàng)目需求進(jìn)行學(xué)習(xí)并快速掌握技巧,有良好的溝通力和協(xié)作能力加強(qiáng)團(tuán)隊(duì)的建設(shè)。
職位要求
1 、本科及以上計(jì)算機(jī)相關(guān)專業(yè)畢業(yè),至少兩年以上 Android 開發(fā)經(jīng)驗(yàn);
2 、熟練掌握 git,熟練掌握 android studio 開發(fā)工具及各種性能調(diào)優(yōu);
3 、熟悉 Android 平臺的開發(fā)技術(shù),如 UI,網(wǎng)絡(luò),性能和內(nèi)存優(yōu)化等;
4 、熟悉面向?qū)ο笤O(shè)計(jì),代碼風(fēng)格良好;
5 、有一定的承壓能力,良好的團(tuán)隊(duì)合作意識;
6 、有大型互聯(lián)網(wǎng) app 開發(fā)經(jīng)驗(yàn)優(yōu)先。
如何投遞
感興趣的朋友,可以直接聯(lián)系我(微信:ZouXiaoChuang ),也可以直接點(diǎn)擊鏈接 https://job.toutiao.com/s/JFUd7hS 用這個鏈接投遞,也算內(nèi)推投遞。
幾個常見的問題:
Q:是不是會考算法?
A: 編程題是幾輪技術(shù)面都必須的一環(huán)。有的會涉及到算法知識,有的不一定涉及到算法知識。如果比較擔(dān)心這塊的話,可以多刷刷 LeetCode 。
Q:公司是大小周嗎?
是的,公司目前默認(rèn)是大小周,不過加班的那天是額外算工資的,而且那天的工資比正常的工作日要高。具體可以到時候跟 HR 了解。如果不在乎那天的工資,完全可以請假,不占用年假天數(shù)。
Q:杭州辦公地點(diǎn)是哪里?
杭州研發(fā)部門主要有兩個辦公地點(diǎn),EFC (歐美金融城)和西溪八方城,目前抖音創(chuàng)作工具線在 EFC,9 月份左右會搬到八方城。
Q:字節(jié)跳動杭州那么多部門,為什么我要去創(chuàng)作工具線?
說點(diǎn)我個人的想法。年輕的時候,比較最求所謂的技術(shù)是否酷炫,是否先進(jìn),更注重所謂技術(shù)的成長。慢慢的,年紀(jì)大了,你會意識到,你做的事情是否真正能落地,是否有業(yè)績產(chǎn)出,是否對團(tuán)隊(duì)、對公司、對用戶有真正的貢獻(xiàn),這才是最重要的。而這也是公司內(nèi)部升職加薪、跳槽時對方公司給你 Offer 最重要的指標(biāo)。
從這點(diǎn)出發(fā),考慮一個業(yè)務(wù)方向,主要看兩點(diǎn),一是業(yè)務(wù)是否穩(wěn)定,是否核心,而是二是否跟用戶直接相關(guān)。
說回創(chuàng)作工具線,首先,創(chuàng)作工具模塊是抖音 app 內(nèi)部不可或缺的一個模塊,因?yàn)樗苯佑绊懙接脩舻呐臄z、發(fā)布體驗(yàn)。如果視頻編輯、發(fā)布體驗(yàn)不好,那么發(fā)視頻的人就少,發(fā)布的人少了,自然看的人也少??上攵?公司對這方面是非常重視的,在這方面的業(yè)務(wù)投入只會多不會少。再次,你的工作,無論是做的特效,做的貼紙或其他處理,都直接體現(xiàn)在用戶的視頻拍攝、編輯流程中,因此,工作的產(chǎn)出也是顯而易見的。
最后還想說一句,隨著 5G 慢慢鋪開,可以預(yù)想到各個公司會更加在視頻上投入力度,把視頻玩出更多的花樣來。因此,現(xiàn)在來抖音這邊,在視頻處理上面的積累,可以保證未來幾年的職業(yè)競爭力。
因此,不是說其他業(yè)務(wù)線不好,這個每個人可以有自己的判斷。我只是想說,如果你想法跟我一樣的話,那么抖音創(chuàng)作工具線,是一個不會錯的選擇。
Q:給我一個理由,為什么要去字節(jié)跳動?
作為工作八年多的老司機(jī),算上實(shí)習(xí),經(jīng)歷了小紅書、蘑菇街、微策略、阿里、創(chuàng)新工場、英特爾、還有其他一些不那么知名的,總共將近 10 個公司的人,想說一句,拋開工作內(nèi)容(因?yàn)檫@點(diǎn)跟個人喜好相關(guān)較大,比較主觀),綜合薪資待遇、技術(shù)氛圍、公司氛圍、員工關(guān)懷等多個客觀因素來說,字節(jié)跳動是我覺得最好的公司,也是我迄今為止呆的最久的公司。
在這里,大家都是想干事實(shí)的人,沒有那么多的勾心斗角。公司鼓勵坦誠清晰,不設(shè)邊界,哪怕是一個剛畢業(yè)的同學(xué),你也可以跟老同學(xué)去討論你的想法,你的技術(shù)方案。工作或許繁忙,但你的心不會委屈。你說,多少年以后,公司會不會變成跟 XX 一樣,這個我沒法回答,但是至少這幾年,公司總體來說還是處于一個很好的氛圍的。
在員工關(guān)懷方面,說一個細(xì)節(jié),很多公司都會說,我們有下午茶,有零食水果,然后你會發(fā)現(xiàn),全是一些沒人吃的零食,擺在某一個地方吃灰。然而字節(jié)跳動的下午茶,是每天下午,有阿姨推著車子送到你座位上的,有可能是水果拼盤,有可能是雞腿雞翅,有可能是蛋糕蛋撻等等,每天不一樣。但基本上不會是那種讓人沒有食欲的東西。
一個公司的氛圍怎么樣,很大程度取決于創(chuàng)始人怎么樣。結(jié)合這段時間在公司的經(jīng)歷,一鳴同學(xué)的全員會,讓我對公司還是比較有信心的。
最后,來不來,當(dāng)然取決于你,畢竟每個人 Value 的東西不一樣。
我經(jīng)常跟同事或非同事朋友都說,除非發(fā)生意外,否則我不會跳槽到別的公司,這也是真心話。
如題,網(wǎng)上查的方法基本都過時了。
小米應(yīng)用商店老是代替 PLAY 商店跳出來,然后說沒有這個應(yīng)用,好坑。
xiaomi.eu 的版本也用過了,干凈是干凈,不過缺失了好多東西,也是不方便。
使用 android studio 開發(fā) android 項(xiàng)目,新建一個項(xiàng)目,有一個 Mixnum API Level 下拉選項(xiàng),猜測是安卓開發(fā)的最小 sdk 版本。
各位建議是選哪個?我憑感覺,應(yīng)該選 7.0
請教大家一個問題,類似閱讀器仿真紙張翻頁 有什么好的思路。 <使用 1 個 view 多個 bitmap 交替繪制思路,無法應(yīng)對復(fù)雜的子 view 布局,view 廣告引入,復(fù)雜的點(diǎn)擊區(qū)域處理,所以后來放棄了> ios 的解決方案很優(yōu)秀,人家 view 就能卷曲,android 的一言難盡[Facepalm]
目前使用 recyvlerview 作為 view 緩存管理,利用 layoutmanager 制作了,平移,y 軸翻轉(zhuǎn)動畫 詳細(xì)可看這里: https://www.jianshu.com/p/1992d49e5fbf 現(xiàn)在想引入卷曲動畫(俗稱仿真動畫)
目前方案 A:基于根 view 緩存整體渲染效果到 bitmap 在根布局 onDrawForeground 繪制卷曲動畫,view 接受滑動事件,繪制效果,并將平移距離傳遞給 recyclerview 更新坐標(biāo) 優(yōu)點(diǎn):單頁 view 依然保持解耦,無需關(guān)系事件 缺點(diǎn)盲點(diǎn):上一頁怎么辦?如何處理上一頁效果呢,子 view 刷新了呢?
/:8*希望大家多多幫忙,分析可行我都嘗試下
為了便于在 Google Play 上買買買,這幾天,我尋思著要給我的谷歌賬號充值。網(wǎng)上查了一下,最方便的,似乎是購買 Google Play 禮品卡進(jìn)行兌換。 很多人提醒,如果買到黑卡進(jìn)行兌換,則谷歌賬號可能會被封號。 據(jù)說,谷歌也不支持跨區(qū)購買應(yīng)用,若綁定國內(nèi)的信用卡,則谷歌賬號也有可能會被封號。 思量再三,我決定,購買禮品卡,但不在淘寶購買,而是在 amazon.com (注意,不是amazon.cn )網(wǎng)站購買。注冊 amazon.com 賬號,選禮品卡,填寫金額,寄送郵箱等等,提交訂單,填寫信用卡,賬單地址等,提交結(jié)算。約半分鐘左右,我收到訂單確認(rèn)郵件。 又過了 4 分鐘左右,我收到了訂單被暫停,以及 amazon.com 賬戶被封停的郵件。現(xiàn)正在申請解封。 感覺腦袋有點(diǎn)暈。
偶然發(fā)現(xiàn)一個 app 在手機(jī)上和 TV 上布局不一樣。 能找到的 app 判斷是否運(yùn)行在 TV 上的代碼只有這么一段: UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE); if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { 是 tv } else { 不是 tv }
但是從網(wǎng)上搜索編譯安卓 TV 的資料寥寥無幾,想問一下哪些編譯參數(shù)會決定編譯出來的安卓是 TV 還是手機(jī)
根據(jù) Google Developer 的描述我在 proguard-rules.pro 里面添加"-printusage usage.txt"
最終 usage.txt 文件會出現(xiàn)在"app/usage.txt"中
我希望最終生成的文件在目錄"app/build/outputs/mapping//"中
就像 mapping.txt 和 resources.txt 一樣
這樣多特性構(gòu)建時就可以區(qū)分開了
請問有什么辦法做到么?比如有什么環(huán)境變量或者 gradle 腳本的配置
我用 r8/proguard printusage 等關(guān)鍵字搜索過,看到的都是基礎(chǔ)用法,不知道是不是姿勢不對
學(xué)習(xí) kotlin,看這一篇就夠了,對比著 java 學(xué)習(xí) kotlin,事半功倍:https://github.com/JeremyLiao/kotlin-compare-to-java 一文讀懂 Android Gradle: https://github.com/JeremyLiao/android-gradle-study 史上最好用的 Android 跨進(jìn)程接口調(diào)用框架: https://github.com/JeremyLiao/InterfaceLoader 一個 Android 平臺的高性能 key-value 組件,讀寫性能遠(yuǎn)超 SharedPreferences: https://github.com/JeremyLiao/FastSharedPreferences
苦于各種預(yù)裝軟件垃圾還不給卸載,這邊文章被寫了出來。(雖然后來我發(fā)現(xiàn)有很多)
首先, 從 Android 4.2 開始,設(shè)備可以支持多用戶 ,說到這里其實(shí)聰明的小朋友已經(jīng)知道怎么實(shí)現(xiàn)了:
卸載當(dāng)前用戶的預(yù)裝 APP 這種方法用 adb shell 的命令就可以實(shí)現(xiàn),所以你需要提前準(zhǔn)備 ADB 工具。具體只需要一行簡單的命令: adb shell pm uninstall --user 0 應(yīng)用包名
APP 的包名你需要到系統(tǒng)設(shè)置->軟件設(shè)置->具體的軟件頁面去尋找,MIUI 是在右上角的嘆號里(或者 MIUI11 之后的版本,你可以長安桌面圖標(biāo),然后點(diǎn)擊彈窗上的小嘆號,再點(diǎn)擊右上角的小嘆號查看)。其他不同的系統(tǒng)不多說明。如果你需要安裝回來,只需要使用 adb shell pm install --user 0 應(yīng)用包名
說一下:
實(shí)際上是卸載掉了,但是只是針對當(dāng)前用戶。如果你切換用戶,需要卸載其他用戶的 APP 。這個 APP 實(shí)際還存在你的 prev-app(預(yù)裝軟件) 區(qū)域內(nèi),但他不同于系統(tǒng)的停用操作,是真實(shí)卸載掉了的。
原文: https://yigekaifa.com/post/unroot-device-uninstall-prv-apps.html
原文有總結(jié)好的 MIUI 和 EMUI 一鍵卸載的腳本
剛才擴(kuò)展了 C 盤,在 C 盤重裝了一遍 AS (以前是 E 盤),下載 SDK 的速度沒有異常,就是下載 gradle 的時候不到 100kb/s,之前幾秒就下載完了,是被墻了嗎?還是我擴(kuò)展 C 盤的時候出問題了
各位大神好,安卓系統(tǒng)誰有隱藏系統(tǒng)應(yīng)用圖標(biāo)(如谷歌應(yīng)用圖標(biāo))的好方法,請您幫忙提供一下,多謝啦!
分享 Android 代碼混淆,安卓加固。高效、專業(yè)、兼容好。5 分鐘極速加密,輕松集成 Dex 加密、反調(diào)試、防盜版等多重安全防護(hù) 產(chǎn)品介紹:安卓加固 https://www.kiwisec.com/product/app-encrypt.html 云平臺在線使用: https://cloud.kiwisec.com/login#login
最近寫一個測試機(jī)頂盒的 APK,需求是播放外置 SD 卡中的視頻。現(xiàn)在有的手機(jī)用 Environment.getExternalStorageDirectory().getAbsolutePath();這個方法獲取到的是內(nèi)置存儲的路徑。 private static String getStoragePath(Context mContext, boolean is_removale) { StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); Class> storageVolumeClazz = null; try { storageVolumeClazz = Class.forName("android.os.storage.StorageVolume"); Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList"); Method getPath = storageVolumeClazz.getMethod("getPath"); Method isRemovable = storageVolumeClazz.getMethod("isRemovable"); Object result = getVolumeList.invoke(mStorageManager); final int length = Array.getLength(result); for (int i = 0; i < length; i++) { Object storageVolumeElement = Array.get(result, i); String path = (String) getPath.invoke(storageVolumeElement); boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement); if (is_removale == removable) { return path; } } } catch (Exception e) { e.printStackTrace(); } return null; } 我百度了這個獲取外置 SD 卡的方法,放在手機(jī)上面測試可以獲取到外置 SD 卡的路徑,但是放在機(jī)頂盒就獲取不到了! 機(jī)頂盒下了一個 es 文件管理器也是可以看到外置 SD 卡的路徑的,所以說應(yīng)該是可以獲取到的。 但是**的就是不知道怎么獲取了,折騰了一天了。 求大神指點(diǎn)!
微博問了一大圈確定 oppo 不行,小米華為呢?
另外能支持心率更好,NFC 倒是無所謂,感覺手機(jī)也挺方便的。
在線的就免了,測試涉及到藍(lán)牙功能需要實(shí)機(jī)順便問下市面手機(jī)型號占比有沒有比較權(quán)威的可查數(shù)據(jù),搜索引擎找到的怎么看怎么像廣告
我安裝了煉妖壺這個 app,據(jù)稱,它利用的是 Android for Work,可以創(chuàng)建一個獨(dú)立的工作空間,里面可以安裝 app,和外界是隔離的。實(shí)際上這個機(jī)制貌似還是基于 Android 的多用戶管理的。 不知道是不是因?yàn)槲已b了煉妖壺(它里面的黃帝之名之類的我以前開過,現(xiàn)在應(yīng)該是沒開),最近我發(fā)現(xiàn)一個奇怪的現(xiàn)象: 通過 adb 安裝的一個 app,在啟動器上長按圖標(biāo)->應(yīng)用信息->卸載,然后發(fā)現(xiàn)實(shí)際上沒卸載(安裝另一個重簽名同包名 apk 會報(bào)錯),貌似只是對當(dāng)前用戶卸載了,必須 pm uninstall 才是真正的卸載。 所以,我有點(diǎn)暈了……我感覺似乎應(yīng)該有另一個獨(dú)立的“全局應(yīng)用管理”,用來在全局層面上卸載 /更新 app ?
求推薦比較好的安卓模擬器 測試了幾個游戲模擬器 支付寶 東航之類的都會閃退