電腦

使用 Android Webview 建立 App

原本 CBETA 有一個很簡單的 Android APP,就是用 WebView 元件開啟 CBETA 網站,就像一個隱藏版的瀏覽器。

 

不過從 Android 9(API級別28)開始,WebView 默認情況下已停用明文支持,所以程式勢必要修改。於是用 Android Studio + Kotlin 做了一個簡單的版本,同時也處理了明文不支持的問題。

 

重要度:
文章分類:

WebKit View 在 Xcode 上的問題

執行環境:MacBook Pro + macOS Mojava 10.14.5 + Xcode 10.2.1

事情是這樣的,我用 Xcode 製作一個單純的 App,只是放入一個 WebKit View 元件(底下簡稱 WKWebView ),在 Xcode 上執行並沒問題。

如下圖,白框是 WKWebView 元件,左邊的 Windows 是執行的畫面。

image

然而,我想直接執行 Build 出來的 App,問題就來了。

如下圖,我先選紅圈 ①,在藍圈 ② 可以看到 App 的位置,點下之後就可以看到綠圈 ③ 的 App 檔案,直接執行它,就看到黃圈 ④ 的錯誤報告。

 

image

我測試過其他簡單的元件如 Label、Button 則沒有這個問題,就 WKWebView 才會如此。

重要度:
文章分類:

PHP 和 Drupal 使用 SMTP 發信

事情的開始

前陣子突然發現承租的主機好像沒有發信給自己。不管是 Drupal 系統的留言通知,或是自己寫的一些 PHP 程式,都沒有寄各種通知信給我,上站一測,果然如此,這可不得了,立刻通知主機商,請他們處理。過去也有類似的經驗,他們通常很快就處理好了。

主機商不久來信,信中說是 GMail 擋了我的信,系統本身並沒有問題,還要我參考這一篇:

https://support.google.com/mail/answer/81126#authentication

我再上站測試,果然寄信到 outlook.com 的信箱沒有問題,寄到 gmail.com 就石沈大海,心中隱隱覺得不妙。

上面那個網址,我看了半天,也不知是怎麼回事。上網查了一些資料,猜想大概是站上的註冊信與廣告信太多,gmail 可能懷疑我的主機有問題,因此要求進一步的認證,否則就不接受這個主機寄出來的信。

於是上網向各方求助,也請主機商再指導一番。他們來信說,我使用的都是 php mail(),建議我改用 smtp 的方式寄信,另外也要我啟用 SPF 和 DKIM,一些朋友也是如此建議,雖然不太懂,但至少有進一步研究的方向了。

 

重要度:
文章分類:

安裝 Embarcadero RAD Studio 10.3 後遇到 Android 無法編譯的問題

昨天 (2018/12/14) 去蓮潭會館參加李維老師主講的 RAD Studio 10.3 產品內容說明。

講座中提到這一版的 Android SDK 安裝有問題,要看 10.3 安裝目錄的 readme 說明,否則無法順利編譯 Android 程式。

回家後就立刻測試,果然一個空白的  Android 編譯都會有錯誤。找到了要看的說明會連到這一頁

http://docwiki.embarcadero.com/RADStudio/Rio/en/Release_Notes

在 Android 那一段,一開始提到要在這個目錄

C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.32429.4364\tools
執行這個動作
android.bat update sdk --no-ui --all --filter platform-tools,build-tools-28.0.2,android-26
不過我的安裝並沒有那個目錄,也就無法順利進行。
 
後來才跳過這一段,直接做底下的動作。也就是到主功能表的
 
Tools > Options > Deployment > SDK Manager
 
把原來的 Android SDK 25.2.5 32-bit 刪除,重新安裝一次。
 
安裝的位置我是選擇 c:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs
 
就成功安裝完成,也順利編譯成功 Android 的程式。
 
重要度:
文章分類:
電腦標籤:

網站搬家記--從怪物之家搬到糖果屋

沒錯,這次是搬網站,不是以前常寫的硬碟轉世記。搬網站的難度真的比搬硬碟困難太多了。
 
我的小站是在 2007 年 9 月15 號建立的,想不到一晃眼也 11 年了,今天也剛好是小站的生日。
 
當年在部落格盛行的年代,我在許多站也都建了部落格,主要都是建好玩的,最後主要在使用的就是 Hinet 的 Xuite 和新浪部落格。
 
不過玩電腦的人,只用現成的部落格實在有點不夠,加上許多網頁的技術也要有地方實作,所以在一番比較之後,選擇 hostmonster 承租了虛擬主機。我也不知道 hostmonster 的官方中文是什麼?怪物之家這名字是我自己隨便叫的。
 
當時在台灣提供的虛擬主機,通常空間小,頻寬有限,價錢又貴。如果自己架站,要二十四小時開機,還要有網路,維護更是麻煩。最後選擇的 hostmonster 價格便宜,空間號稱無限,頻寬也無上限,速度我能接受,後台又有中文的操作界面,這實在是一大賣點,最後我就選在這裡蓋起新家了。
 
重要度:
文章分類:
電腦標籤:

Perl C++ C# 使用 POST GET 存取 JSON 等網路資源

 

前言

因為工作上有需要使用 POST 存取網路上的 JSON 資料,最初得到的方法是使用 CURL,但一開始就失敗了。後來改用程式來測試,希望藉由程式傳回的資料來找出錯誤的原因。結果由 CRUL、Perl、C++、C# 一路用過去,一直都失敗。

最後,在 C# 終於試出一組成功的方法,再利用這個成功的模式一路再試回其他程式,最後只有 CURL 還是失敗,其他都成功了,所以在此記錄結果。

 

初試啼聲:CURL

最初得到的方法是使用 curl ,格式如下:

 

curl -X POST http://localhost/test.php -H "content-Type: application/json" -d '[{"src":"如是我聞"}]'

 

在 Win10 底下也有 curl,測試時卻失敗。使用 Mac 和 Linux 系統的人則告知有得到正確的結果。

首先上網查詢,有人說要把傳出去的字串最外面的單引號改成雙引號,裡面的雙引號要加斜線。

 

"[{\"src\":\"如是我聞\"}]"

 

結果還是失敗。

最後我知道這樣是正確的,只是送出去中文變成亂碼,我改用 code page  65001 送出資料也是不行,但若送英文資料則沒有問題。

 

重要度:
文章分類:

使用 C++ Builder 撰寫 Android 程式

使用 C++ Builder 撰寫 Android 程式

安裝 C++ Builder Android

本篇參考此頁的說明

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Android_Mobile_Application_Development

在安裝 C++ Builder 時,或是在已安裝好的系統上,要安裝 Android 的相關資料。

image

 

重要度:
文章分類:

在 Android 手機安裝莊春江工作站

有人詢問如何在 Android 手機安裝莊春江老師所提供的阿含經與尼柯耶以及其他資料,其實就是整個莊春江工作站的內容。因為在離線時,也希望能隨時查詢站上的資料,所以我就試了一下,並把過程記錄下來,提供有需要的人參考。

莊春江工作站單機版可以在此下載

http://agama.buddhason.org/

image

重要度:
文章分類:
電腦標籤:

自己寫一個 GUI 版 C++ Builder 單元測試

最近在寫一個較大的專案,而且要能在 Windows 和 Mac 上執行(Android 和 iOS 以後再考慮),加上第一次用新版 C++ Builder 跨平台的版本寫大專案,所以凡事起頭難,這也是第一次想加上單元測試,以利後續檢查與驗證。

C++ Builder 上面宣稱已有跨平台版本的 DUnitX,詳見如下:

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/DUnitX

主要方法是在 __published 的宣告範圍內寫下要測試的程式,然後自行把每一個測試程式寫進去,執行時就會逐一執行測試程式,最後把結果列出來,如下圖。

image

重要度:
文章分類:

用 #ifdef 判斷作業系統

在程式中若是要因應不同的作業系統而有不同的內容,則可以用底下的方法來處理。

#ifdef _Windows

….. (windows 下的程式)....

#endif

底下是目前在 C++ Builder 實際試出來的。

Win32 下有

_WINDOWS_
_Windows
WIN32
_WIN32
__WIN32__
(注意 : 這個在 Win64 沒有)

Win64 下有

_WINDOWS_
_Windows
WIN32
_WIN32
_WIN64

後來在這裡有查到一些,但沒有我測試的完整

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/WIN32#win32

看來判斷 Windows 可用 _Windows

Win32 則用 __WIN32__

Win64 則用 _WIN64

Android 則用 __ANDROID__

Mac 和 iOS 則用 __APPLE__

iOS 則用 TARGET_OS_IPHONE

32位元手機則用 __arm__

64位元手機則用 __arm64__

利用以上去組合,應該就可以判斷了。

補充: 後來看到這篇 

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Creating_an_iOS_App

提到 iOS 可以使用  TARGET_OS_IPHONE 來判斷。

還有如下例子:

#if (TARGET_OS_IPHONE)
// Code for iOS devices only.
#endif
 
#if (TARGET_OS_IPHONE) && (__arm__)
// Code for 32-bit iOS devices only.
#endif
 
#if (TARGET_OS_IPHONE) && (__arm64__)
// Code for 64-bit iOS devices only.
#endif

 

重要度:
文章分類:

頁面

借我放一下廣告
訂閱 電腦