Android 開發時正常,上架卻異常
真真氣死人,也不知什麼原因,搞了快兩天,後來發現不要減肥,上架就ok了
後續我推測使用自己的java library,系統納入時判斷錯誤,刪去一些應該納入的函式,導致使用時出現invoke virtual method錯誤
minifyEnabled false
shrinkResources false
真真氣死人,也不知什麼原因,搞了快兩天,後來發現不要減肥,上架就ok了
後續我推測使用自己的java library,系統納入時判斷錯誤,刪去一些應該納入的函式,導致使用時出現invoke virtual method錯誤
minifyEnabled false
shrinkResources false
原來不是這麼簡單
private static final String[] VALID_IP_HEADER_CANDIDATES = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP", "HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR" }; public static String getClientIpAddress(HttpServletRequest request) { for (String header : VALID_IP_HEADER_CANDIDATES) { String ipAddress = request.getHeader(header); if (ipAddress != null && ipAddress.length() != 0 && !"unknown".equalsIgnoreCase(ipAddress)) { return ipAddress; } } return request.getRemoteAddr(); }
我們從github拉乾貨下來的時候,一般只有兩種方式,一種是直接下載zip檔案,另一種是克隆;這兩種方式差在克隆可以全部版都(甚至連分支branch)都有,而下載只有最新版的檔案,不含其他版本。
這裡介紹第三種方式,克隆指令加上–bare
git clone --bare <git http url>
會出現原始版本紀錄,但不會出現檔案.
未加–bare
我因為系統設計需要寫程式,只需抓出專案標籤名稱以及該標籤所屬的所有檔案名稱,但不需要使用實際檔案;考慮jgit函式庫還是需要克隆下來才能做事情,但我又不需要把真的檔案都拉下來,因此選擇–bare的方式拉貨,就能達到我的目標了。
好久沒寫java程式了,最近要寫「機構3D圖git版控」之後整合程式,編譯沒問題,在eclipse執行時居然出現這個錯誤
Error occurred during initialization of boot layer java.lang.module.ResolutionException: Modules xxx and yyy export package zzz to module kkk.web
原來是有些jar檔案,並不是使用module方式,但是設定卻在module裡面,只要將該jar檔案從「Modulepath」移到「Classpath」就好了。
公司電子表單為鼎新的easyflow GP版, 需安裝支援java web start版本的java, 但我寫程式, 電腦只安裝java11, 不支援java web start怎辦? 我們可以下載IcedTea-Web , 安裝後就可以屎用了.
javaws xxx.jnlp
若出現unsigned jar 問題, 可以找到jdk或是jre , 修改conf\security\java.security這個檔案(安全風險請自行評估), 跳過安全驗證.
jdk.jar.disabledAlgorithms=MD2, RSA keySize < 1024, DSA keySize < 1024
我用過幾種GIT客戶端程式, 從tortoiseGit, GitEye, gitkraken,SourceTree,GitHub Desktop, 都長期用過, 但老實說我只用基本功能,因此看不出來差異在哪, 也不在意哪種用戶端程式好或不好.
直到最近,公司有個需求,要版控”機構部門的圖檔”,這原本是PLM宏大系統的功能(整合ERP,文件管制), 但…廠商報價後,就GG了.
於是我想自己找解決方案, 能滿足版控, 又要能滿足檔案鎖定功能, 也參考過網路力推,能管控圖檔的 https://www.perforce.com,
perforce 能版控,也能鎖檔案, 甚至細心列出git,svn,與自身產品的差異(當然是老王賣瓜了)
https://www.perforce.com/blog/vcs/git-vs-svn-what-difference
如果有預算, 我也建議圖檔管控應當要用perforce.
但我個人還是想要用git這個比較熟悉,簡單,無複雜系統的工具.
那問題來了,雖說git的LFS可以進行大檔案版本控管與鎖定,但客戶端工具程式還沒找到好用上手的,
直到SmartGit(20.1版以上)現世,這工具能針對檔案進行直覺的”鎖定”, 就好像用檔案總管一樣,能讓麻瓜容易上手.
雖說tortoiseGit也可以在客戶端就鎖定檔案,但整合度實在差太多了, 很不推薦.
不囉唆,寫心得
#執行cmd, 到專案Repository目錄執行
git lfs install
git lfs locks --local
git lfs locks --verify
## 設定那些檔案需要進行LFS管控
git lfs track *.exe --lockable
git lfs track *.zip --lockable
...
#修改.git\config 以下設定若沒有就自行新增
[lfs "https://server/repo.git/info/lfs"]
...
locksVerify = true
#"https://server/repo.git/info/lfs" 為 remote URL,加上/info/lfs
SmartGit->Edit->Preference->Low-level Properties
設定
status.lfs.locks=true
status.lfs.locks=true
background.fetch.delay=30
background.periodicalRefresh.delay=30
backgroundTasks.idleDelay=30
SmartGit->Edit->Preference->Backgroup Command->detect remote changes
設定
當專案Repository沒使用的時候, 或是已設定我的最愛的專案Repository 需要定期檢查LFS狀態
#若沒有設定,則不會自動更新狀態, 會無法得知其他人是否鎖定檔案
**SmartGit 一套單機版最便宜約100美金左右
結論,這樣的設定很複雜,目前還不好用,若能安裝時就一件設定,那就很好了
3年前我實作一個Git文字筆記app, 使用jgit套件, 可將github clone到android手機上, 然後進行編輯, 編輯完畢,直接版控到github上面,
最近play store要求target api在2022年11月前, 至少要設定31 , 於是我就編輯了一下, 實在有夠麻煩, 一大堆套件要升級, android studio也是大改版要求舊的專案也要跟著升級.
升級升級, 想說之前jgit只使用4.5.7版本, 趁這機會,改用jgit 6.3.x版, 後來發現6.3.x 使用outputstream類別中的一個函式”transferTo”, 造成android app 找不到該method,程式跳掉.
最後我發現 android 13才支援”transferTo”
另外我開發的這支app, 當初硬改成可以接受未正式簽章的SSL網站, 現在變成資安問題,上架失敗, 原因是X509相關類別,被我繼承改成一律安全 , 只好再改成原本的檢查方式,
也就是說以後這支app要使用遠端git網站, 必須是正式簽章HTTPS, 否則是不能使用的.
為何我的app要使用jgit 6.3.x , 因為jgit終於支援shallow(depth)功能, 可以讓我clone的時候快一點, 不然有些commit數量太多, 要clone很久,很麻煩, 而app本身只想用來做文字筆記, 不用clone太多commit版本下來,不然使用者會嫌棄的.
公司有pixel手機, 趕緊升級到android 13
之前寫過 用戶端github commit需要改用token密碼 才可以使用,
(或是web browser認證),
也就是說, 使用程式例如 JGIT套件, 帳號密碼,也需要使用token密碼, (ps. 我有時候久了就會忘記,真是糟糕)
Setting->Developer setting
點選Personal access tokens -> 點選 Generate new token , 產生新的token密碼
輸入相關資料, 過期時間(可選永不過期), 與該token權限
將token密碼複製,就可以使用了
java
public static boolean isPlayStoreInstalled(Context context){
try {
context.getPackageManager()
.getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
kotlin
fun isPlayStoreInstalled(context: Context): Boolean {
return try {
context.packageManager
.getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0)
true
} catch (e: PackageManager.NameNotFoundException) {
false
}
}
build.gradle
implementation 'com.google.android.gms:play-services-base:18.0.1'
多年前自己寫一個函式, 透過poi 讓資料庫的資料匯出excel, 但是無法搞定中文排版, 最後終於找到解法, 罩門如下:
sheet.setRandomAccessWindowSize(-1);
sheet.autoSizeColumn(iCurrentCol);
sheet.trackAllColumnsForAutoSizing();
有興趣的可以參考我的函式
https://github.com/WilliamFromTW/Jakarta/blob/master/src/inmethod/jakarta/excel/CreateXLSX.java
裡面的 buildExcel()