Android Studio 語法快捷鍵設定

1. 簡介

寫程式時,常常會發生同樣的東西要輸入好幾次,在設定語法快捷鍵後,相同的程式碼,可以改成快捷鍵,這樣在撰寫程式時,可以省下不少時間

2. 新增快捷鍵的方法

File -> Setting -> Editor -> Live Templates

如果是Kotlin設定在AndroidKotlin裡面

如果是Java設定在Java裡面即可

本文以Kotlin為主

所以設定在Android Kotlin裡面

假設我要的固定格式如下

/**
* @param 引數資訊
* @return 返回資訊
* @throws 丟擲異常資訊
* @see 有的函式需要藉助其他類或者函式或者屬性,就用該標籤標識
* @Description 函式不建議使用,原因是
* @since 自哪個版本開始
* @author John
*/
新增一個專屬自己配置的群組
幫群組命名
在群組上新增Live Template
Abbreviation是輸入的快捷鍵
Description是描述
Template text是輸入快捷鍵後產生的文字
快捷鍵選擇使用的程式語言
輸入快捷鍵時,顯示的提示
按下Enter後直接跑出剛才設定的

還有一個快速引入參數的用法,如下

private const val KEY_$value$ = "$value$"

使用時,$value$是可以手動輸入的,當$value$輸入時,前後都會一起改變

如下圖

$value$可以自己設定,任何名字都可以

相同的名字輸入時,就會同時改變

這樣快速指令就設定完囉


Android Studio

Android Studio運行main編譯錯誤問題?

問題 當執行public static void main(…

u66f4u591au5167u5bb9…

正在載入…

執行時發生錯誤。請重新整理頁面後再試一次。


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Swift JSON解析

JSON原始資料

假如原始資料如下

{
  "coord": {
    "lon": -0.1257,
    "lat": 51.5085
  },
  "weather": [
    {
      "id": 803,
      "main": "Clouds",
      "description": "broken clouds",
      "icon": "04d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 284.07,
    "feels_like": 283.18,
    "temp_min": 282.35,
    "temp_max": 285.93,
    "pressure": 1008,
    "humidity": 75
  },
  "name": "Taipei"
}

解析方式

繼承Decodable

假設還需要Encodable時

繼承Codable

因為Codable = Decodable & Encodable

本文章只需要Decodable

struct WeatherData: Decodable {
    let name: String
    let main: Main
    let weather: [Weather]
}

struct Main: Decodable {
    let temp: Double
    let feels_like: Double
    let temp_min: Double
    let temp_max: Double
    let pressure: Int
    let humidity: Int
}

struct Weather: Decodable {
    let id: Int
    let main: String
    let description: String
    let icon: String
}

解析方式如下

func parseJSON(data: Data) {
    let decoder = JSONDecoder()
    do {
        let decoderData = try decoder.decode(WeatherData.self, from: data)
        print(decoderData.name)
    } catch {
        print(error)
    }
}

Swift


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Swift Network讀取

步驟

  1. 建立URL
  2. 建立URLSession
  3. 讀取Session task
  4. 啟動Task

guard let url = URL(string: urlString) else {
    return
}
let urlSession = URLSession(configuration: .default)
let task = urlSession.dataTask(with: url) { data, response, error in
    handler(data: data, response: response, error: error)
}
func handler(data: Data?, response: URLResponse?, error: Error?) {
    if error != nil {
        print(error!)
        return
    }
    if let safeData = data {
        //資料分析在此
    }
}
task.resume()

Swift


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Sourcetree 使用GitHub版本管控

1. 簡介

Sourcetree是一個提供版本管控GUI介面,包含Git

提供Windows與MacOS兩個版本

Sourcetree網站下載:

https://www.sourcetreeapp.com/

本文章以Windows來介紹,他與GitHub之間如何使用

需準備GitHub帳號

GitHub網站:

https://github.com/

無法Push的問題,參考:
Sourcetree GitHub不接受帳戶密碼驗證解決方法

2. 建立GitHub專案

Repository name是這個Git的名稱

Description是描述專案內容

public是指公開的意思

Private是指私有的意思,使用必須登入帳號

Add a README file新增一個說明文件

Add .gitgnore新增一個過濾文件

Choose a license如果有用到License可以在此新增

都好了以後,按下Create repository

複製Git網址

將專案使用Sourcetree開啟

有兩個方法

  1. 使用上面複製的Git網址
  2. 連接GitHub帳號

使用Git網址方法如下

備註:此方法無法使用Private專案,會要求Login,密碼為Token

申請Token的方法,參考:

Sourcetree GitHub不接受帳戶密碼驗證解決方法

按下上方Clone -> 輸入網址以及存放位置 -> 按下下方Clone
按下左方History就會顯示與GitHub一樣的資訊囉
並且檔案也已經下載至剛才指定的本地路徑

連接GitHub帳號

注意: 密碼是Token
成功後會出現綠色勾勾
帳號連接成功後,按下Refresh即可刷新
並會出現GitHub所有專案(包含Private)
滑鼠右鍵->Clone

Sourcetree介面

左側的BRANCHES是指本地的分支名稱

左側的REMOTES是指遠端的代表名字

中間的main代表本地這個版本main持有

中間的origin/main代表遠端這個版本origin/main持有

origin/HEAD代表遠端起始HEAD,一般不會去動他,保持遠端有最初始的版本

中間main左邊的空心球,代表本地的HEAD,指本地當前使用的版本

可以使用滑鼠右鍵Checkout…或雙擊兩下切換本地HEAD

中間的Inital commit是此版本的描述

下方的+ .gitgnore代表此版本新增了這個檔案

滑鼠右鍵,可以針對這個版本做一些動作

Tag…代表為此新增標記

打勾Push tag可以同步origin遠端
沒勾代表只有本地新增Tag
新增Tag後
GitHub跟著同步Tag

Archive…代表備份當前選擇的

Archive file代表儲存的檔案路徑
Folder prefix代表打包後,包起來的資料夾名稱

Branch…代表新增分支

new Branch代表新分支名稱

Checkout New Branch代表新增後以他為準做控制

有資料夾內有檔案變化時

Staged files代表準備要Commit的檔案,可以點右邊的-號,就會自動跑至Staged files

Unstaged files代表尚未加入要Commit的檔案,可以點右邊的+號,就會自動跑至Staged files

對檔案右鍵->Remove會從資料夾中被刪除

對檔案右鍵->Discard會從資料夾中被還原成未修改前的檔案(檔案本身就存在,但內容被修改時)

打勾下方的Push代表,Commit後會把當前檔案Push至遠端,並新增新的版本

不勾只會本地新增新的版本,遠端依然是舊的

當Staged files有檔案後,可以按左上角Commit,會轉到此畫面

切換分支

這樣本地和遠端都成功同步版本囉


Sourcetree


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Sourcetree GitHub不接受帳戶密碼驗證解決方法

1. 問題

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.

2. 官方訊息

裡面其中一項,不受此更改影響
如果帳戶啟用了雙重身份驗證,使用基於令牌或 SSH 的身份驗證

本文章以此方法來解決

申請雙重認證

GitHub官網:

https://github.com/

手機App下載 Google Authenticator,然後用此App掃描QRCode

之後會在此生成一組限時的密碼,將此輸入

成功後的畫面
避免手機App被移除或手機遺失
在此新增一組自己的電話,收簡訊認證

接下來又符合雙重認證的條件了

申請Token令牌

按下Generate new token
新增Note註解,設定Token存活時間
根據自己的需求勾選權限,之後按Generate token
完成後會出現一組Token,請妥善保管,只會顯示這一次
如果忘記,需要重新申請,這組就必須要刪除了

到此GitHub前置作業就完成囉

Sourcetree使用方法

有兩種方式可以使用

方法1(較不推薦)

Clone的時候格式如下

https://<token>@<git_url>.git

例如

網址為https://xxxx.git

toekn為ghp_ZGGGGqXi2nyRRRRRRRRw0qw1KKKK

clone時

https://ghp_ZGGGGqXi2nyRRRRRRRRw0qw1KKKK@xxxx.git

此方法有一個缺陷,必須要提供給別人token才能夠正常Push檔案

方法2(推薦)

曾經已經安裝過sourcetree,且已經有Login過帳號的人

就算移除Sourcetree重新安裝,依然會有問題,解決方案如下

先關閉Sourcetree

至C:\Users\<使用者帳號>\AppData\Local\Atlassian\SourceTree

刪除passwd檔案

重新打開Sourcetree,此時Push檔案時,會跳出下圖

Username是帳號
Password是剛才申請的Token

Login後就可以正常使用囉

如果還是不行,刪除passwd檔案,重新Clone,再測一次


Sourcetree


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Windows 使用Visual Studio Code方法

1. 簡介

Visual Studio Code簡稱VSCode

是用來閱讀源碼的好工具,跨平台Windows、macOS、Linux都可以使用

2. 環境設定

以下介紹如何編譯MinGW、Clang、LLVM的環境設定

首先下載本體:

https://code.visualstudio.com/

MinGW與Clang環境設定

再來下載編譯環境的工具(以下網址為Windows編譯工具):

https://winlibs.com/

此文章使用黃色選取的版本
下載後解壓縮,像此圖一樣

接下來設定環境變數

Windows旗子右鍵
->設定
點擊進階系統設定
Path雙擊兩下
新增C:\mingw64\bin

設定好後,打開Windows PowerShell輸入

g++ –version
clang –version

此時會返回版本號,如果沒有注意環境變數與解壓縮的路徑是否一致

到此MinGW、Clang已經建立好環境了

MSVC環境設定

下載Visual Studio 2022,下載社群版,免費的就好

https://visualstudio.microsoft.com/zh-hant/downloads/

安裝時,開發桌面C++要打勾

安裝後,打開Developer Command Prompt for VS 2022

輸入cl.exe

如果此指令可以使用,代表環境也建立好了

到此

MinGW、Clang LLVM、MSVC三個環境皆建立完成

3. VSCode環境設定

打開VSCode,並且按下左邊第五個(Ctrl+Shift+X)

安裝Chinese (Traditional) Language Pack for Visual Studio Code VSCode工具就會變成繁體中文

繁體中文(可安裝可不安裝)

安裝C/C++ Extension Pack

到此環境就安裝好了

4. VSCode編譯C++

這裡會使用MinGW、Clang LLVM、MSVC這三個編譯C++

MinGW編譯

label是幫這個task命名,可以不改
-std=c++20是把版本設定成C++20


到此MinGW就可以運行囉

Clang LLVM編譯

與MinGW設定方式一樣

唯一不一樣,這裡選擇clang++.exe

MSVC編譯

此處比較不一樣

先把VSCode關掉

打開Developer PowerShell for VS 2022

切換到要編譯的資料夾

輸入: dir (檢查一下,是否是自己要的路徑)

確定後輸入: code .

(.要記得輸入)

此時他會"自動"運行VSCode,並且導入MSVC的環境變數

“/std:c++latest"是設定為最終版本的C++

訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Windows WSL如何開啟?

WSL是Windows Subsystem for Linux的縮寫,就是在Windows環境下使用Linux

WSL在Windows存在一段時間了,目前算是穩定

此文章以Windows 11環境下開啟

對開始的旗子點擊右鍵->設定,顯示如下圖

拉至最下方,會有此選項

開啟這兩個選項後,系統會要求重開機

重開機後,開啟Microsoft Store -> 搜尋Ubuntu 20.04(也可以下載自己想要的版本)

安裝後,運行時,會發生錯誤,此時到Microsoft下載更新檔,網址如下

https://docs.microsoft.com/zh-tw/windows/wsl/install-manual

下載更新後,再次運行就可以正常使用WSL囉,自己在設定一下帳號及密碼

安裝後,會出現Ubuntu的資料夾囉

訂閱Codeilin的旅程,若有最新消息會通知。

廣告

macOS編譯FFmpeg for Android

  1. NDK編譯環境建置
  2. 下載FFmpeg Source最新版本
  3. 編譯FFmpeg

1. NDK編譯環境建置

至https://developer.android.com/ndk/downloads?hl=de下載最新版本的NDK

此文章使用版本為:android-ndk-r21e

此文章路徑放置:/Users/xxx/android_ndk/android-ndk-r21e

此文章當時使用的MacOS版本:11.5.2

2. 下載FFmpeg Source最新版本

下載FFmpeg Source最新版本,如以下指令

打開終端機

cd ~/

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg_source_v1

此文章下載的FFmpeg version 4.4

3. 編譯FFmpeg

編譯FFmpeg

a. cd ~/ffmpeg_source_v1

b. ./configure 

完成後會出現License版本(此文章編譯License -> LGPL 2.1)

c. 將下方文字儲存成build_android.sh

./build_android.sh


NDK_PATH=/Users/xxx/android_ndk/android-ndk-r21e

HOST_PLATFORM=darwin-x86_64
API=29

TOOLCHAINS="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM"
SYSROOT="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/sysroot"
CFLAG="-D__ANDROID_API__=$API -Os -fPIC -DANDROID "
LDFLAG="-lc -lm -ldl -llog "

PREFIX=android-build

CONFIG_LOG_PATH=${PREFIX}/log
COMMON_OPTIONS=
CONFIGURATION=

build() {
  APP_ABI=$1
  echo "----> Start build $APP_ABI"
  case ${APP_ABI} in
  armeabi-v7a)
    ARCH="arm"
    CPU="armv7-a"
    MARCH="armv7-a"
    TARGET=armv7a-linux-androideabi
    CC="$TOOLCHAINS/bin/$TARGET$API-clang"
    CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"
    LD="$TOOLCHAINS/bin/$TARGET$API-clang"
    CROSS_PREFIX="$TOOLCHAINS/bin/arm-linux-androideabi-"
    EXTRA_CFLAGS="$CFLAG -mfloat-abi=softfp -mfpu=vfp -marm -march=$MARCH "
    EXTRA_LDFLAGS="$LDFLAG"
    EXTRA_OPTIONS="--enable-neon --cpu=$CPU "
    ;;
  arm64-v8a)
    ARCH="aarch64"
    TARGET=$ARCH-linux-android
    CC="$TOOLCHAINS/bin/$TARGET$API-clang"
    CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"
    LD="$TOOLCHAINS/bin/$TARGET$API-clang"
    CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"
    EXTRA_CFLAGS="$CFLAG"
    EXTRA_LDFLAGS="$LDFLAG"
    EXTRA_OPTIONS=""
    ;;
  x86)
    ARCH="x86"
    CPU="i686"
    MARCH="i686"
    TARGET=i686-linux-android
    CC="$TOOLCHAINS/bin/$TARGET$API-clang"
    CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"
    LD="$TOOLCHAINS/bin/$TARGET$API-clang"
    CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"
    EXTRA_CFLAGS="$CFLAG -march=$MARCH -mtune=intel -mssse3 -mfpmath=sse -m32"
    EXTRA_LDFLAGS="$LDFLAG"
    EXTRA_OPTIONS="--cpu=$CPU "
    ;;
  x86_64)
    ARCH="x86_64"
    CPU="x86-64"
    MARCH="x86_64"
    TARGET=$ARCH-linux-android
    CC="$TOOLCHAINS/bin/$TARGET$API-clang"
    CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"
    LD="$TOOLCHAINS/bin/$TARGET$API-clang"
    CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"
    EXTRA_CFLAGS="$CFLAG -march=$CPU -mtune=intel -msse4.2 -mpopcnt -m64"
    EXTRA_LDFLAGS="$LDFLAG"
    EXTRA_OPTIONS="--cpu=$CPU "
    ;;
  esac

  echo "----> Start make clean"
  make clean
  echo "----> Start build configuration"
  CONFIGURATION="$COMMON_OPTIONS"
  CONFIGURATION="$CONFIGURATION --logfile=$CONFIG_LOG_PATH/config_$APP_ABI.log"
  CONFIGURATION="$CONFIGURATION --prefix=$PREFIX"
  CONFIGURATION="$CONFIGURATION --libdir=$PREFIX/libs/$APP_ABI"
  CONFIGURATION="$CONFIGURATION --incdir=$PREFIX/includes/$APP_ABI"
  CONFIGURATION="$CONFIGURATION --pkgconfigdir=$PREFIX/pkgconfig/$APP_ABI"
  CONFIGURATION="$CONFIGURATION --cross-prefix=$CROSS_PREFIX"
  CONFIGURATION="$CONFIGURATION --arch=$ARCH"
  CONFIGURATION="$CONFIGURATION --sysroot=$SYSROOT"
  CONFIGURATION="$CONFIGURATION --cc=$CC"
  CONFIGURATION="$CONFIGURATION --cxx=$CXX"
  CONFIGURATION="$CONFIGURATION --ld=$LD"
  CONFIGURATION="$CONFIGURATION $EXTRA_OPTIONS"

  echo "----> Start config makefile with $CONFIGURATION --extra-cflags=${EXTRA_CFLAGS}"
  echo "--extra-ldflags=${EXTRA_LDFLAGS}"
  ./configure ${CONFIGURATION} 
  --extra-cflags="$EXTRA_CFLAGS" 
  --extra-ldflags="$EXTRA_LDFLAGS"

  echo "----> Start make $APP_ABI"
  make -j10

  echo "----> Start make install $APP_ABI"
  make install
  echo "----> complete."

}

build_all() {
  #下方可自行定義,./configure -h可以查看選項內容
  COMMON_OPTIONS="$COMMON_OPTIONS --target-os=android"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-static"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-shared"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-protocols"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-cross-compile"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-optimizations"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-debug"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-small"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-doc"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-programs"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-ffmpeg"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-ffplay"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-ffprobe"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-symver"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-network"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-x86asm"
  COMMON_OPTIONS="$COMMON_OPTIONS --disable-asm"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-pthreads"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-mediacodec"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-jni"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-zlib"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-pic"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=h264"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mpeg4"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mjpeg"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=png"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=vorbis"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=opus"
  COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=flac"

  echo "COMMON_OPTIONS=$COMMON_OPTIONS, PREFIX=$PREFIX, CONFIG_LOG_PATH=$CONFIG_LOG_PATH"

  mkdir -p ${CONFIG_LOG_PATH}

  #編譯成四個平台
  build "armeabi-v7a"
  build "arm64-v8a"
  build "x86"
  build "x86_64"
}

echo "Start build"
build_all
echo "End build"

d. 編譯完成後,在build_android下會生成如此圖

備註:編譯過程中出現,無法打開「arm-linux-androideabi-ranlib」,因為無法驗證開發者。

1. 按打開,如果沒有打開選項,按取消後,就必須至安全性與隱私權->一般->強制允許

2. 只要有按取消,就必須至終端機control+c取消編譯,重頭來,直到沒按取消為止

否則會編譯失敗,因為android-ndk-r21e是網路上下載的


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

macOS 格式app轉iso方法

  1. 打開終端機

備註:此處檔案以appStore 下載的macOS Big Sur.app做範例

  1. 輸出iso指令

前置作業,下載的Install macOS Big Sur.app會放置/Applications

cd ~/ &&
mkdir macOSFolder &&
hdiutil create -o /tmp/bigSur.cdr -size 13000m -layout SPUD -fs HFS+J &&
hdiutil attach /tmp/bigSur.cdr.dmg -noverify -mountpoint /Volumes/install_build &&
sudo /Applications/Install macOS Big Sur.app/Contents/Resources/createinstallmedia --volume /Volumes/install_build &&
mv /tmp/bigSur.cdr.dmg InstallSystem.dmg &&
hdiutil detach /Volumes/Install macOS Big Sur &&
hdiutil convert InstallSystem.dmg -format UDTO -o InstallSystem.iso

最後生成的
InstallSystem.iso.cdr改名為InstallSystem.iso即可

注意:
-size 13000m是生成的預留的檔案大小
不可以比檔案小
但也不要設太大
造成不必要的空間浪費


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Windows 安全性無法開啟?

問題

您需要新的應用程式才能開啟此windows defender連結

解決方法

打開 PowerShell 輸入
Get-AppxPackage Microsoft.SecHealthUI -AllUsers | Reset-AppxPackage


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

透過 WordPress.com 建置的網站.

向上 ↑