[持續(xù)更新] 程序猿(主要偏Android)有用的大雜燴

垃圾Oracle,下個JDK還需要登錄,并且下載還超慢,還是國內(nèi)下載鏡像地址爽!(from qingliang4321,Thks!)
TUNA鏡像,HUAWEI鏡像,injdk,編程寶庫,jdk下載

最新下載的jdk壓縮包,解壓后都沒有jre目錄了,需要執(zhí)行命令bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre生成jre目錄

在Windows系統(tǒng)中,如果兩個項(xiàng)目需要不同版本的Java,可以通過以下方式來解決:
使用環(huán)境變量設(shè)置不同的JAVA_HOME:
為每個項(xiàng)目創(chuàng)建一個批處理文件(.bat)或shell腳本(.sh)。
在腳本中,設(shè)置特定版本的JAVA_HOME環(huán)境變量,然后再運(yùn)行項(xiàng)目。
例如,創(chuàng)建一個名為project1.bat的批處理文件:
set JAVA_HOME=C:\Java\jdk1.8.0_xxx
java -jar project1.jar
對于另一個項(xiàng)目,創(chuàng)建一個名為project2.bat的批處理文件:
set JAVA_HOME=C:\Java\jdk11.0.xxx
java -jar project2.jar
通過運(yùn)行相應(yīng)的批處理文件來啟動每個項(xiàng)目。

相對路徑按如下設(shè)置:
:: 假設(shè)你的 Java 安裝在當(dāng)前腳本所在目錄的上一級目錄的 "jdk" 文件夾中
set RELATIVE_PATH=jdk\temurin_17.0.13_11_windows_x86_64\jdk-17.0.13+11
:: 將相對路徑轉(zhuǎn)換為絕對路徑(使用%~dp0獲取當(dāng)前腳本的目錄)
for %%i in ("%~dp0.") do set ABSOLUTE_PATH=%%~dpi%RELATIVE_PATH%
:: 設(shè)置 JAVA_HOME 環(huán)境變量
set JAVA_HOME=%ABSOLUTE_PATH%
:: 驗(yàn)證 JAVA_HOME 設(shè)置是否正確
echo JAVA_HOME is set to: %JAVA_HOME%

程序員網(wǎng)址導(dǎo)航https://www.coderutil.com/

讓瀏覽器快速變成文本編輯器,地址欄輸入:data:text/html, <html contenteditable>
臨時(shí)文件上傳快速分享好網(wǎng)站:奶??靷?/a>

談?wù)?a target="_blank">Android下App的安全性問題,寫好強(qiáng)壯代碼

Android部分手機(jī)崩潰了后會自動重啟應(yīng)用,導(dǎo)致logcat的崩潰日志被刷掉,很是苦惱,拔線都來不及,這個時(shí)候可以用adb logcat >> log.txt命令在要崩潰的時(shí)候趕緊執(zhí)行記錄日志到文件,崩潰后及時(shí)停止記錄,然后進(jìn)去搜索FATAL EXCEPTION就可以愉快看報(bào)錯了

Android逆向:
Android脫殼實(shí)質(zhì)就是dumpDexhttps://www.cnblogs.com/jiaoxiake/p/6818786.html
在手機(jī)上dump運(yùn)行app的dex工具https://github.com/CodingGay/BlackDex
Android逆向工具集合https://pan.baidu.com/s/14LvxsYv4O_vTm4IWaGHnjQ?pwd=t3y3

Android 7.0之后系統(tǒng)如何抓包
Android 7.0 (API 24) 之后,使得系統(tǒng)安全性增加了,導(dǎo)致APP 默認(rèn)不信任用戶域的證書,之前把Charles的ssl證書,安裝到 受信任的憑據(jù) -> 用戶 就沒用了,因?yàn)椴皇苄湃瘟?,只信任(安裝到)系統(tǒng)域的證書,導(dǎo)致抓出來的https的請求,都是加了密的,無法看到原文了
對此,相關(guān)解決思路和方案:
1.(努力想辦法)讓系統(tǒng)信任Charles的ssl證書,作為app的開發(fā)者自己:改自己的app的配置,允許https抓包,重要提醒:前提是得到或本身有app的源碼,新建:res/xml/network_security_config.xml,內(nèi)容:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> <debug-overrides> <trust-anchors> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
2.把證書放到受系統(tǒng)信任的系統(tǒng)證書中去,重要提示:前提是手機(jī)已root
??1).計(jì)算證書名:openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate_saved.pem,算出數(shù)值,比如3a1074b3
??2).證書文件改名,然后把原Charles證書charles-ssl-proxying-certificate_saved.pem改名為3a1074b3.0
??3).放到系統(tǒng)分區(qū),放到/system/etc/security/cacerts/
3.繞開https不去校驗(yàn),借助于其他(JustTrustMe等)工具繞開https的校驗(yàn),重要提示:需要借助其他XPosed等框架配合才可以
??Android用可以繞開/禁止SSL pinning的插件JustTrustMe,IOS基于CydiaAndroid-SSL-TrustKiller/SSL Kill Switch 2/iOS SSL Kill Switch
??
限制:JustTrustMe只能支持Android 7.0之前的安卓,超過Android 7.0就不工作了*

gradle自定義task命令行執(zhí)行時(shí)帶參及獲取參數(shù)方法

task testTask {//任務(wù)定義及參數(shù)解析
   doFirst {
      def aarTaskStr = null
       def projectStr = null
       def commandParam = project.gradle.startParameter.projectProperties>
       if(null != commandParam){
           aarTaskStr = commandParam.aarTask
           projectStr = commandParam.projectPath
       }//end of if
       println "=======命令行參數(shù)==>aarTask:${aarTaskStr}==>projectPath:${projectStr}"
   }
   doLast {
       println "=========>Finish"
   }
}
執(zhí)行任務(wù)及帶參(用-P標(biāo)識):  ./gradlew aAutoPkgTest -PaarTask=assembleReleaseXX -PprojectPath=.../xxxxxx/.../app

android讀取AndroidManifest中meta-data值為長數(shù)字讀取成科學(xué)計(jì)數(shù)法的問題,在純數(shù)字前面添加\轉(zhuǎn)義符即可

<meta-data android:name="TEST_KEY" android:value="\\3112212603" />不加的話讀取出來是:3.11221248E9

AndroidTv相關(guān)https://gitee.com/kumei/AndroidTvDev

crx Chrome插件下載地址https://crxdl.com/

layui最新網(wǎng)址http://bmxpx.com/

灰常不錯的Linux命令查詢https://wangchujiang.com/linux-command/hot.html

灰常不錯的正則表達(dá)式網(wǎng)站https://regex101.com/

JSON/SQL的格式化/校驗(yàn)等各種工具集合https://www.bejson.com/json/format/;https://www.freeformatter.com/

牛皮好用的markdown編輯器:https://github.com/marktext/marktext/
牛皮好用的markdown編輯及簡單手動轉(zhuǎn)PDF器:https://md2pdf.netlify.com/https://realdennis.github.io/md2pdf/,對應(yīng)項(xiàng)目https://github.com/realdennis/md2pdf
在線markdown轉(zhuǎn)換pdf器https://cloudconvert.com/md-to-pdf

命令行或代碼實(shí)現(xiàn)markdown轉(zhuǎn)換pdf器:
https://github.com/alanshaw/markdown-pdf,安裝命令:npm install -g markdown-pdf --ignore-scripts,執(zhí)行轉(zhuǎn)換命令:markdown-pdf -p /home/xxx/bin/phantomjs test.md;轉(zhuǎn)換出來效果一般,勉強(qiáng)能用,需要執(zhí)行安裝:npm install -g phantomjs
https://github.com/simonhaenisch/md-to-pdf,安裝命令:npm i -g md-to-pdf,執(zhí)行轉(zhuǎn)換命令:md-to-pdf test.md;轉(zhuǎn)換出來效果非常接近,推薦使用
https://github.com/kxxoling/markdown2pdf,安裝命令:pip install markdown2pdf,執(zhí)行轉(zhuǎn)換命令:md2pdf test.md;轉(zhuǎn)換出來效果非常接近,推薦使用

牛B的矢量小圖標(biāo)網(wǎng)站:https://www.iconfont.cn/,矢量大圖標(biāo)網(wǎng)站:https://undraw.co/

非常棒的在線轉(zhuǎn)換網(wǎng)站,比如m4r轉(zhuǎn)mp3,https://onlineconvertfree.com/zh/

mac有時(shí)候ssh訪問的時(shí)候需要證書

ssh -i xxx.pem root@192.168.8.1 -p 60022
如果遇到報(bào)錯:Permissions 0644 for 'xxx.pem' are too open.說明這個pem文件的權(quán)限太大了,需要給小點(diǎn), 所以執(zhí)行修改哈權(quán)限:sudo chmod 600 xxx.pem
最方便的還是使用ssh-add 添加一下鍵文件,以后訪問方便點(diǎn) ssh-add -k key.pem, 執(zhí)行完上面的命令后下次就只需要像普通ssh那樣訪問就可以了,如下:ssh root@192.168.8.1 -p 60022
如果報(bào)錯:Unable to negotiate with 192.168.8.1 port 60022: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au
就sudo vi /etc/ssh/ssh_config文件,在最末尾加入wq保存即可
KexAlgorithms +diffie-hellman-group14-sha1
KexAlgorithms +diffie-hellman-group1-sha1
# KexAlgorithms +kexguess2@matt.ucc.asn.au
注:有時(shí)ssh帶端口方式是:ssh root@192.168.8.1:60022,根據(jù)執(zhí)行結(jié)果來看選哪種

非常牛批,操作簡單,平臺齊全的內(nèi)網(wǎng)穿透https://www.ngrok.com/

ngrok authtoken 2322b*********************FP
ngrok http 80
ngrok http https://localhost:8080

查看linux、mac支持某個命令,比如nvm:command -v nvm,其他ll,ls,node同理

linux中“sudo 運(yùn)行 npm或node時(shí),出現(xiàn)找不到命令”,通過建立軟連接可以解決

先執(zhí)行whereis node和whereis npm找到位置,然后分別執(zhí)行
sudo ln -s 找到/bin/node位置 /usr/bin/node
sudo ln -s 找到/bin/npm位置 /usr/bin/npm

關(guān)于Mac的環(huán)境變量問題
mac 一般使用bash作為默認(rèn)shell
Mac系統(tǒng)的環(huán)境變量,加載順序?yàn)椋?code>/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
其中/etc/profile和/etc/paths是系統(tǒng)級別的,系統(tǒng)啟動就會加載,后面幾個是當(dāng)前用戶級的環(huán)境變量。后面3個按照從前往后的順序讀取,如果~/.bash_profile文件存在,則后面的幾個文件就會被忽略不讀了,如果 ~/.bash_profile文件不存在,才會以此類推讀取后面的文件。 ~/.bashrc沒有上述規(guī)則,它是bash shell打開的時(shí)候載入的!
其中OS X 和 Linux 都有 ~/.bash_profile~/.bashrc 這兩個配置文件。但是,有時(shí)在OS X里會遇到~/.bashrc不生效的情況:
兩系統(tǒng)規(guī)則是當(dāng)打開的shell是login shell,~/.bash_profile才會加載,而~/.bashrc正好相反。
而真正的區(qū)別是在linux下,當(dāng)用戶登錄到一個圖形界面,然后打開一個終端terminal,那些shell是non-login shell。
然而,在OS X登錄的時(shí)候,并沒有運(yùn)行著一個shell,所以,在運(yùn)行Terminal.app的時(shí)候,其實(shí)那是一個login shell。
你還是可以在~/.bashrc下寫一些配置,只要在~/.bash_profile里加一條source ~/.bashrc就是了。
對于Mac的login shell,確實(shí)在終端的配置中找到了相關(guān)答案: 點(diǎn)擊終端的"偏好設(shè)置"選項(xiàng),在通用一欄中可以看到shell的打開方式 "默認(rèn)登錄Shell"。剛開始時(shí)發(fā)現(xiàn)選擇的是"命令(完整的路徑)",在這種方式下并不會先加載".bash_profile"文件,改過后發(fā)現(xiàn)可以保證.bash_profile文件在打開時(shí)就加載。
而有時(shí)改 ~/.bash_profile~/.bashrc 這兩個配置文件還是不行,這個時(shí)候還可能就是shell使用的~/.zshrc了,具體測試方法是向懷疑的配置文件最開始寫一句 echo "測試打印"之類的打印文字保存source一下,然后新開shell打開新標(biāo)簽,看打印這句話沒!

Mac安裝swig
安裝swig(下載地址,密碼:ftn4)之前一定要先安裝pcre(下載地址,密碼:d99z)
下載完pcre 和swig 之后,把解壓后的pcre 文件夾放到swig 文件夾根目錄下,然后建議對pcre和swig目錄執(zhí)行sudo chmod -R 777進(jìn)行授權(quán),避免下面命令不能執(zhí)行或權(quán)限不足
打開終端,先cd進(jìn)解壓后的pcre根目錄,輸入./configure,回車執(zhí)行;再輸入make,回車執(zhí)行;最后輸入sudo make install回車執(zhí)行
退回swig 根目錄,和上述一樣,依次執(zhí)行./configure、make、sudo make install
全部執(zhí)行完后,輸入swig -version,能出來swig版本說明成功安裝swig

Mac開啟自帶的Apache服務(wù)器
1、開啟 sudo apachectl start
2、關(guān)閉 sudo apachectl stop
3、重啟 sudo apachectl restart
默認(rèn)的網(wǎng)站根目錄在/Library/WebServer/Documents ,訪問地址:127.0.0.1

Mac壓縮文件且分包:
zip - jeb-demo-4.2.0.zip | split -b 90m -d -a 3 - jeb-demo-4.2.0.zip.
這個命令注意短杠都是必要的,且有空格,命令執(zhí)行后生成的分包名:jeb-demo-4.2.0.zip.000,jeb-demo-4.2.0.zip.001....,為了通用的軟件能自動識別分包文件到時(shí)可實(shí)行自動合包解壓,需要把分包后綴改成從.001開始的哈

JD-GUI打開的時(shí)候可能彈框報(bào)錯: No suitable Java version found on your system! This program requires Java 1.8+ Make sure you install the required Java version.這個解決方法直接去Application里面找到JD-GUI,右鍵>顯示包,找到打開universalJavaApplicationStub.sh,然后找到這句報(bào)錯,注釋掉這句報(bào)錯和下面的exit 3,然后添加一句:JAVACMD="/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/bin/java",換成你自己的jdk版本即可

降級 node: wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
或者
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
source ~/.bashrc (linux) touch ~/.bash_profile(MacOs)
列出所有版本:nvm ls-remote
安裝指定版本:nvm install v8.11.3
使用指定版本:nvm use v8.11.3
將 8.11.3版本設(shè)為默認(rèn)版本:nvm alias default 8.11.3
查看當(dāng)前使用版本:nvm ls 或者 node -v

Mac Chrome 谷歌瀏覽器跨域問題解決:open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/stephen/Public google-chrome --disable-web-security

Mac 命令行打開Android Stduio并且打開一個項(xiàng)目:open -a /Applications/Android\ Studio.app/ android-xx-ptoject-name/ 其他軟件類推

Mac精品軟件下載https://www.macwk.com/

windows的bat腳本觸發(fā)請求
1、curl http://***.****.com 直接請求網(wǎng)址
2、start iexplore http://IP?username=xx&password=xx 打開ie瀏覽器GET請求

windows開機(jī)執(zhí)行bat腳本:把xxx.bat文件放入C:\Users\root\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup目錄下,其中AppData為隱藏目錄【還可以直接右鍵“開始”圖標(biāo),在“運(yùn)行”輸入框里面輸入命令shell:startup快捷進(jìn)入這個目錄】,就能夠開機(jī)時(shí)自動執(zhí)行腳本里的內(nèi)容了

windows的bat腳本if語法限制總結(jié):
bat的if語句要注意,有很多限制,要不然執(zhí)行后輸入后回車cmd直接閃退;
1.里面()不能包含(),否則異常斷句:
error example: if %test% == a (echo 成(功)啦) else (echo 失敗啦)
2.不能在if語句里面輸入獲取,得用goto語句新建塊來操作:
error example: if %test% == a ( set /p input=請輸入: echo %input% ) else (echo 失敗啦)
3.不能在if語句里面執(zhí)行mkdir等操作,得用goto語句新建塊來操作:
error example: if %test% == a (mkdir testFolder ) else (echo 失敗啦)

Ubuntu PearOS官網(wǎng) https://pearos.xyz/

linux 查看大文件并排序(這樣找到就可以針對性刪除大文件釋放空間):

sudo du -a /home/stephen | sort -n -r | head -n 100
或
find . -type f -size +800M  -print0 | xargs -0 du -hm | sort -n

mac 查看大文件并排序(這樣找到就可以針對性刪除大文件釋放空間):

du -h -d 100 | sort -nr
其中,-h參數(shù)表示把大小用人可以閱讀的格式顯示出來,達(dá)到 MB 級別就用 M,達(dá)到 GB 級別就用 G。如果不加這個參數(shù),那么大小會以比特的方式顯示,于是你會看到很多你數(shù)不清多少位的數(shù)字; 參數(shù)-d 1表示只統(tǒng)計(jì)1層文件夾的大小,如果一個文件夾有多層,那么它只會統(tǒng)計(jì)到第1層,內(nèi)部的文件夾無論有多少個,它只會返回一個總大小。你也可以把數(shù)字1改成2或者3

Windows 顯示文件占用大小好用的軟件(這樣找到就可以針對性刪除大文件釋放空間): FolderSize wizTree

linux apt-get相關(guān)命令:

sudo apt-get -f install   
apt --fix-broken install
sudo apt-get install aptitude 
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF0E1940624A220 #此處6AF0E1940624A220需要是錯誤提示的key

安裝rpm包
1 #rpm -i example.rpm 安裝 example.rpm 包;
2 #rpm -iv example.rpm 安裝 example.rpm 包并在安裝過程中顯示正在安裝的文件信息;
3 #rpm -ivh example.rpm 安裝 example.rpm 包并在安裝過程中顯示正在安裝的文件信息及安裝進(jìn)度

dpkg命令進(jìn)行安裝deb包
1、使用dpkg命令進(jìn)行安裝:sudo dpkg -i deb文件名
2、根據(jù)經(jīng)驗(yàn),通常情況下會報(bào)依賴關(guān)系的錯誤,我們可以使用以下的命令修復(fù)安裝:sudo apt-get install -f
3、如果要卸載安裝的應(yīng)用我們通過“sudo dpkg -l”查看已經(jīng)安裝的軟件,并找到自己的安裝的軟件名。
4、最后使用"sudo dpkg -r 軟件名"進(jìn)行卸載

linux構(gòu)建python別名
echo alias python=python3 >> ~/.bashrc
source ~/.bashrc
python

linux給一個文件中的每一行開頭插入字符的方法:awk '{print "xxx"$0}' test.txt
shell給一個文件中的每一行結(jié)尾插入字符的方法:awk '{print $0"xxx"}' test.txt
shell給一個文件中的每一行的指定列插入字符的方法:awk '$O=$O" xxx"' test.txt

vi常用命令:
按ESC后輸入“:”進(jìn)入命令行;清空文件內(nèi)容輸入“%d”回車;保存輸入“wq”回車;強(qiáng)制保存輸入“wq!”回車;退出輸入“q”回車;搜索內(nèi)容:“/string” 從光標(biāo)處開始向后尋找字符串 string,“?string” 從光標(biāo)處開始向后前尋找字符串 string,n 命令重復(fù)上一條檢索命令,N 命令重復(fù)上一條檢索命令,但檢索方向改變。例如上次的檢索命令是向前檢索,那么此次檢索的方向是向后;如果上次的檢索命令是向后檢索,那么此次檢索的方向是向前,g/string 使光標(biāo)停止在第一個檢索到的 string 串的行首

windows上讓python執(zhí)行報(bào)錯后不關(guān)閉窗口,首先需確保將python.exe全路徑添加到Windows系統(tǒng)環(huán)境變量PATH中,并且命令行執(zhí)行方式為:python.exe xxx.py

mac/linux根據(jù)端口查找殺死進(jìn)程

lsof -i:8081
kill -9 xxx

netstat -aon|findstr "8081"
tasklist|findstr "7216"
taskkill /pid 7216 /F

PowerShell因?yàn)樵诖讼到y(tǒng)中禁止執(zhí)行腳本的解決方法: win菜單->找到powershell->右鍵管理員運(yùn)行->執(zhí)行命令:set-executionpolicy remotesigned,選全是【A】回車即可

Mac系統(tǒng)禁用Gatekeeper,開啟任意安裝,否則報(bào)錯:macOS cannot verify that this app is free from malware
sudo spctl --master-disable

Mac上裝軟件好的網(wǎng)站:https://www.macwk.com/

可以在線打開pdm數(shù)據(jù)表文件的網(wǎng)站:http://www.dmanywhere.cn/

黑蘋果 MacOS 10.15 Catalina安裝教程 http://www.itdecent.cn/p/2fa8458378df

websocket測試 http://coolaf.com/tool/chattest

手動安裝Android aab 包方法(也可用這個項(xiàng)目我修改過的腳本直接安裝https://github.com/didikee/AndroidAppBundleIntaller/issues/15
安裝aab包需要將aab的包轉(zhuǎn)化成apks格式后進(jìn)行安裝
總體需要一個必要條件:bundletool.jar
1.命令安裝或手動下載bundletool
brew install bundletool
2.aab包導(dǎo)出apks(簽名后的包需要加上后面的--ks部分)
bundletool build-apks --bundle=app-googleplay.aab --output=./app-googleplay.apks --ks=/Users/xxx/Documents/AndroidProjects/xxxx_android_app/app/xxxx_key.jks --ks-pass=pass:xxxx --ks-key-alias=xxx --key-pass=pass:xxxx
3.安裝apks
bundletool install-apks --apks=/Users/xxx/Downloads/app-googleplay.apks
注:如果是下載的jar,前綴命令為:java -jar bundletool-all-0.15.0.jar build-apks --bunlde=xxxxx....

用aapt命令可查看apk清單文件信息: ./aapt dump badging xxxx.apk
1.aapt 命令下載地址: https://androidaapt.com/ ; 此命令A(yù)ndroidSdk的build-tools目錄下具體版本下也有
2.如果是xapk格式請先做zip解壓,然后對里面的apk執(zhí)行此命令
3.如果是apks也先做zip解壓,然后去里面splits目錄找到base-master.apk執(zhí)行此命令
4.如果是aab格式需先執(zhí)行上一條備注里面的 <aab包導(dǎo)出apks>命令 將aab包導(dǎo)出apks,再對結(jié)果apks做zip解壓,然后對里面的apk執(zhí)行此命令

openssl生成公鑰和私鑰
openssl genrsa -out rsa_private_key.pem 1024 //生成私鑰
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem //根據(jù)私鑰生成對應(yīng)公鑰
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt //根據(jù)私鑰生成pkcs8

Android還原混淆的代碼
將mapping.txt復(fù)制到 \Sdk\tools\proguard\bin\ 目錄下
將 crash 信息保存到 \Sdk\tools\proguard\bin\crash.txt中
打開終端,進(jìn)入 \Sdk\tools\proguard\bin\目錄 執(zhí)行 retrace.bat -verbose mapping.txt crash.txt > out.txt

更好看的git log
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置了這個之后,使用git lg簡直眼前一亮

Android media project 聲音源常量
MediaRecorder.AudioSource.DEFAULT 默認(rèn)音頻源
MediaRecorder.AudioSource.MIC
設(shè)定錄音來源為主麥克風(fēng)。
MediaRecorder.AudioSource.VOICE_CALL
設(shè)定錄音來源為語音撥出的語音與對方說話的聲音
MediaRecorder.AudioSource.VOICE_COMMUNICATION
攝像頭旁邊的麥克風(fēng)
MediaRecorder.AudioSource.VOICE_DOWNLINK
下行聲音
MediaRecorder.AudioSource.VOICE_RECOGNITION
語音識別
MediaRecorder.AudioSource.VOICE_UPLINK
上行聲音
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
// recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
// recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);//通話中,對方、自己聲音都會錄下來
// recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK);//只錄取揚(yáng)聲器、聽筒聲音
// recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_UPLINK);
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION);//跟MIC一樣,只錄取麥克風(fēng)聲音,但揚(yáng)聲器太大聲的話也會錄到

AndroidAPI等級對照圖


API等級對照圖

終端解壓命令集合大全
tar解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是壓縮!)
———————————————
.gz解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName
.tar.gz 和 .tgz解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
———————————————
.bz2解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName
.tar.bz2解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知
.tar.bz解壓:tar jxvf FileName.tar.bz
壓縮:未知
———————————————
.Z解壓:uncompress FileName.Z
壓縮:compress FileName
.tar.Z解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName
———————————————
.zip解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
———————————————
.lha解壓:lha -e FileName.lha
壓縮:lha -a FileName.lha FileName
———————————————
.rpm解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb解包:ar p FileName.deb data.tar.gz | tar zxf -
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea解壓:sEx x FileName.*
壓縮:sEx a FileName.* FileName
sEx只是調(diào)用相關(guān)程序,本身并無壓縮、解壓功能,請注意!
gzip 命令減少文件大小有兩個明顯的好處,一是可以減少存儲空間,二是通過網(wǎng)絡(luò)傳輸文件時(shí),可以減少傳輸?shù)臅r(shí)間。gzip 是在 Linux 系統(tǒng)中經(jīng)常使用的一個對文件進(jìn)行壓縮和解壓縮的命令,既方便又好用。
語法:gzip [選項(xiàng)] 壓縮(解壓縮)的文件名該命令的各選項(xiàng)含義如下:
-c 將輸出寫到標(biāo)準(zhǔn)輸出上,并保留原有文件。-d 將壓縮文件解壓。-l 對每個壓縮文件,顯示下列字段: 壓縮文件的大?。晃磯嚎s文件的大??;壓縮比;未壓縮文件的名字-r 遞歸式地查找指定目錄并壓縮其中的所有文件或者是解壓縮。-t 測試,檢查壓縮文件是否完整。-v 對每一個壓縮和解壓的文件,顯示文件名和壓縮比。-num 用指定的數(shù)字 num 調(diào)整壓縮的速度,-1 或 --fast 表示最快壓縮方法(低壓縮比),-9 或--best表示最慢壓縮方法(高壓縮比)。系統(tǒng)缺省值為 6。指令實(shí)例:
gzip *% 把當(dāng)前目錄下的每個文件壓縮成 .gz 文件。gzip -dv *% 把當(dāng)前目錄下每個壓縮的文件解壓,并列出詳細(xì)的信息。gzip -l *% 詳細(xì)顯示例1中每個壓縮的文件的信息,并不解壓。gzip usr.tar% 壓縮 tar 備份文件 usr.tar,此時(shí)壓縮文件的擴(kuò)展名為.tar.gz。

裝B名詞:
復(fù)盤,賦能,沉淀,倒逼,落地,串聯(lián),協(xié)同,反哺,兼容;
包裝,重組,履約,響應(yīng),量化,發(fā)力,布局,聯(lián)動,細(xì)分;
梳理,輸出,加速,共建,支撐,融合,聚合,解藕,集成;
對齊,對標(biāo),對焦,抓手,拆解,拉通,抽象,摸索,提煉;
打通,打透,吃透,遷移,分發(fā),分層,分裝,穿梭,輻射;
圍繞,復(fù)用,滲透,擴(kuò)展,開拓,漏斗,中臺,閉環(huán),打法;
拉通,紐帶,矩陣,刺激,規(guī)模,場景,聚焦,維度,格局;
形態(tài),生態(tài),話術(shù),體系,認(rèn)知,玩法,體感,感知,調(diào)性;
心智,戰(zhàn)役,合力,心力,賽道,因子,模型,載體,橫向;
通道,補(bǔ)位,鏈路,試點(diǎn);
顆粒度,感知度,方法論,組合拳,引爆點(diǎn),點(diǎn)線面,精細(xì)化,差異化,平臺化,結(jié)構(gòu)化,影響力,耦合性,易用性,一致性,端到端,短平快。
生命周期,價(jià)值轉(zhuǎn)化,強(qiáng)化認(rèn)知,資源傾斜,完善邏輯,抽離透傳,復(fù)用打法,商業(yè)模式,快速響應(yīng),定性定量,關(guān)鍵路徑,去中心化,結(jié)果導(dǎo)向,垂直領(lǐng)域,如何收口,歸因分析,體驗(yàn)度量,信息屏障

admob高級技巧如下:
1.多申請幾個admob賬號,以免雞蛋都放在一個籃子里,因?yàn)槭湛钜?個月,夜長夢多,萬一被封號,2個月內(nèi)的錢就付之東流了。一個賬號用一個月,第二個月,去開一個新號。確保每個賬號下的錢2個月后能進(jìn)賬。
2.應(yīng)用程序必須支持動態(tài)更換admob賬號的能力,也就是說app每次登陸會訪問服務(wù)器,服務(wù)器分配一個admob賬號給app,app使用該賬號。優(yōu)點(diǎn),可以動態(tài)的調(diào)整廣告的展示,免得每次換admob賬號要重新發(fā)布app
3.admob點(diǎn)擊率最好控制在3%以下。過高會封號
4.單個admob賬號,每日收入控制在50美金以下,過高會查你的app
5.使用一定手段鼓勵用戶點(diǎn)擊廣告,我自己寫了一個類似積分墻的東西,點(diǎn)廣告賺積分,用積分去做一些高級的事情。比如點(diǎn)一次廣告送5個積分,每天最多30積分(點(diǎn)6個廣告),下載一段視頻需要15個積分。當(dāng)然積分的配置也是服務(wù)器動態(tài)下傳給app的。如果用戶點(diǎn)擊少了,可以提高每天積分的上限,如果用戶點(diǎn)擊多了,就減少點(diǎn)擊上限。所以服務(wù)器很重要。

1.admob有一個累計(jì)效應(yīng),也就是說,如果你每天廣告展示次數(shù)(CPC)都在逐步增加,說明你是一個可靠的,穩(wěn)健的廣告展示商,那么admob給的CPM的比重也會增加。CPM(按照展示次數(shù)收費(fèi))的量這個是可遇不可求的,是admob根據(jù)你CPC的量來合理分配的。
2.admob我設(shè)置1分鐘換一個廣告,過快沒有意義
3.不要自己去點(diǎn)擊廣告,不要自己搞兩臺機(jī)器一直展示廣告。
admob不是傻子,他根據(jù)ip,機(jī)型,時(shí)間,有無用戶操作,很容易判斷用戶的類型。如果一個ip,一個機(jī)器,長時(shí)間展示廣告,或者大量的點(diǎn)擊,可能會封號。如果一臺機(jī)器,沒有用戶操作,長時(shí)間展示廣告,也是無效的展示類型。
4.admob的內(nèi)容過濾,你不要小看admob的功能,它異常的強(qiáng)大,他可以自動掃描你的app內(nèi)容。比如是否有色情,賭博內(nèi)容,是否有違法內(nèi)容,是否有不良字眼。
所以如果你的某個廣告頁上有admob廣告,一定要看看該頁面有無admob禁止的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容