原创 【Java】【IDE】解決IntelliJ Idea控制檯亂碼問題

打開idea/bin/idea64.exe.vmoptions文件,添加以下配置 -Dfile.encoding=UTF-8

原创 【Java】【註解】獲取字段上的註解爲空

註解只有聲明瞭RetentionPolicy.RUNTIME,纔可以在運行時通過Field.getDeclaredAnnotations()等方法獲取到,否則只相當於一個普通的標記,註釋而已 @Retention(Retent

原创 【Java】Java代碼自動化的三個階段

代碼封裝,模塊封裝 註解處理器,通過編寫註解處理器,掃描代碼中的註解,自動根據註解完成任務 IDE插件,編寫IDE插件與註解配合工作,在編譯期間改變源碼

原创 【Java】在設計Callback功能時,如何巧妙迴避Java的強制異常處理機制

有這樣一句話:衡量Java設計師水平和開發團隊紀律性的一個好方法,就是讀讀他們應用程序裏的異常處理代碼 異常處理雖然不是什麼高難度的技術點,但要是想要整個工程,所有的異常都考慮得周到,又處理得到,還要儘量少的使用try-catch

原创 【Android】安卓環境變量配置

這篇博客沒啥技術含量,主要是記錄下一些小細節,防止新手走彎路,有時很久不碰自己也會忘了 變量 值 功能 JAVA_HOME D:\dev\jdk JDK位置 ANDROID_HOME D:\dev\sdk And

原创 【NDK】【009】通過CMake編譯Native代碼

前面我們已經介紹過,通過Gradle/命令行來編譯Native代碼,通過JNI/JNA來調用Native代碼 這裏我們再介紹一種新的方法,Gradle+CMake編譯Native代碼,很適合從C語言轉過來的開發人員 其實CMake

原创 【Java】java.lang.reflect.Type詳解

Type簡介 Type是Java反射中框架中的一個核心接口,用於獲取類型信息,它的定義很簡單 package java.lang.reflect; public interface Type { defau

原创 【NDK】【008】NDK編譯Lame庫

什麼是Lame Lame是一個C語言MP3編碼庫 Lame源碼本身是運行在PC平臺的,我們對其進行了稍加修改,使其適用於Android平臺 PCM轉MP3是安卓開發中常見的需求,PCM是未經處理的原生音頻數據,安卓錄音得到

原创 【Android】【NDK】目標文件,靜態庫,動態庫

目標文件 目標文件是由源代碼編譯而成的二進制文件 源代碼是供開發者閱讀的文本文件,它的體積大,而且本質上都是文本,無法直接被機器使用,所以需要先編譯爲目標文件 一個源代碼文件,經過編譯就會對應生成一個目標文件 靜態鏈接庫 供主程序

原创 【Android】【NDK】解決Lame庫編碼MP3聲音速度變快的問題

這個問題可能是由於把單聲道PCM作爲雙聲道PCM來編碼造成的 這樣就有一半的數據從左聲道被編到了右聲道,於是播放速度快了一倍,總時長短了一半 我看網上大多Lame庫的Demo都默認是雙聲道,沒有考慮到單聲道的問題 解決方法:單聲道

原创 【Android】【NDK】JNA解決java.lang.UnsatisfiedLinkError: Error looking up function錯誤

cpp中的公開方法需要用extern "C"修飾 extern "C" int sum(int a, int b){ return a + b; } extern "C"表示使用C編譯器規則編譯此方法 C編譯器

原创 【Android】【IDE】AndroidStudio導出工程代碼

通過【File】-【Export to Zip File】可以直接將項目代碼導出爲Zip文件 這個功能會自動幫我們去除不相關的文件,比如idea配置,gradle配置,編譯緩存等 一個工程目錄下的大多文件都是編譯後產生的,源碼本身

原创 【Android】華爲和小米手機後臺進程防殺策略

原生安卓系統和國產定製系統區別 原生安卓系統只有在內存不夠用時,纔會回收後臺進程,並不會像國內系統一樣,嚴重影響後臺應用使用 由於國內應用開發商,包括BAT這個級別的,爲了讓自己的應用啓動更快,可以後臺接收消息和廣告,大多都

原创 【Android】【代碼調試】多進程情況下進行調試

多進程情況下,可以通過【Attach to Process】來綁定輔助進程進行調試 但這樣有一個問題就是,無法對輔助進程的onCreate方法進行調試 因爲只有在進程啓動後纔可以綁定進程進行調試,而輔助進程啓動時執行onCrea

原创 【Android】【UI】EditText高級特性

設置報錯信息 EditText edit; edit.setError("輸入內容不能爲空"); 限制輸入字符 通過digital屬性可以限制輸入字符 android:digits=".0123456789ABCD