android kotlin程式沒有靜態變數
反正kotlin我很弱啦, 簡單的說
class 外面定義變數就可以當作靜態變數屎用了
var iCounter = 0
class MainActivity : AppCompatActivity(), View.OnClickListener {
iCounter++
}
反正kotlin我很弱啦, 簡單的說
class 外面定義變數就可以當作靜態變數屎用了
var iCounter = 0
class MainActivity : AppCompatActivity(), View.OnClickListener {
iCounter++
}
Java
public static boolean isConnected(BluetoothDevice device) {
try {
Method m = device.getClass().getMethod("isConnected", (Class[]) null);
boolean connected = (boolean) m.invoke(device, (Object[]) null);
return connected;
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
Kotlin
fun isConnected(device: BluetoothDevice): Boolean {
return try {
val m: Method = device.javaClass.getMethod("isConnected")
m.invoke(device) as Boolean
} catch (e: Exception) {
throw IllegalStateException(e)
}
}
寫android 藍牙程式, 若需要scan 功能, 在android 10以前, 只要取得ACCESS_COARSE_LOCATION權限即可, 到了android 10則必須取得ACCESS_FINE_LOCATION權限
詳細的寫法就不多著墨了
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
儲存後, 執行wechat.bat 即可雙開
安裝v2ray之前,你必須符合以下基本技術基礎
你也必須準備以下軟硬體
開始安裝
1. 安裝v2ray
到這個神人網站 https://github.com/sprov065/v2-ui/
一鍵安裝
bash <(curl -Ls https://blog.sprov.xyz/v2-ui.sh)
2. 安裝完畢網站預設是 http://ip:65432 預設帳號密碼都是admin , 記得登入修改密碼
3. 以下示範兩種連線, 一種http/2(h2), 另一種透過apache httpd(port 443)代理連到後端websocket
3.1 設定 h2 連線
Server:
client:
v2ray初體驗-使用v2-ui初階安裝
3.2
Server 設定:
Clinet 設定:
websocket , port 用443, 要輸入tls
apache httpd 設定:
ServerName xxx
ErrorLog /var/log/httpd/ssl_error_log1
TransferLog /var/log/httpd/ssl_access_log1
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/letsencrypt/live/xxx/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxx/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/xxx/fullchain.pem
## v2-ui management
RewriteEngine On
ProxyPass / http://localhost:65432/
ProxyPassReverse / http://localhost:65432/
## server
RewriteRule /ray/(.*) ws://localhost:1234/$1 [P,L]
RewriteCond %{HTTP:Upgrade} =websocket [NC]
ProxyPass /ray/ http://localhost:1234/
ProxyPassReverse /ray/ http://localhost:1234/
4. 心得
若是使用3.1 , 使用httpd/2的方式
若是使用3.2可以看起來像是https的存取
5. 額外指令
v2-ui - 显示管理菜单 (功能更多) v2-ui start - 启动 v2-ui 面板 v2-ui stop - 停止 v2-ui 面板 v2-ui restart - 重启 v2-ui 面板 v2-ui status - 查看 v2-ui 状态 v2-ui enable - 设置 v2-ui 开机自启 v2-ui disable - 取消 v2-ui 开机自启 v2-ui log - 查看 v2-ui 日志 v2-ui update - 更新 v2-ui 面板 v2-ui install - 安装 v2-ui 面板 v2-ui uninstall - 卸载 v2-ui 面板
先了解一下so的架構,各個CPU所需的目錄如下, 每個目錄都有一個一樣的so檔案, 這些目錄都放在 libs 的目錄底下.
請在android上加上
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
這樣就可以引用了
通常畫面更新前, 需要背景處理的工作, 有時候會耗掉一些時間, 若使用
runOnUIThread 會造成畫面停頓,好像當掉一樣, 此時可以使用AsyncTask處理
class MyAsyncTask extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... params) { // 這裡處理背景工作 return null; } @Override protected void onPostExecute(Void aVoid) { // 這裡處理畫面元件(這邊會耗時,所以盡量只處理簡單的畫面資料 } }
-dontskipnonpubliclibraryclasses
編輯proguard-rules.pro
-dontobfuscate
-forceprocessing
-optimizationpasses 5
-keep class * extends android.app.Activity
-assumenosideeffects class android.util.Log {
public static *** d(…);
public static *** v(…);
}
buildTypes {
確認 build.gradle 裡面的 buildTypes 屬性
release {
minifyEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
除了設定以下policy外,
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
還需要進行額外設定
try{
Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
m.invoke(null);
}catch(Exception e){
e.printStackTrace();
}