ブログ・コラム
技術情報
2020.03.30
【PHP】Google Driveへのアップロード
PHPからGoogleDriveへアクセスする事ができます。
たとえば、DBのバックアップ先としてGoogleDriveを指定することができます。
Google APIの有効化、クライアントシークレット、およびJsonファイルの取得が必要になりますが、
詳細はEnable the Google Drive APIを参照ください。
サンプルとして、ファイルをGoogleDriveへアップロードするサンプルを作りましたので、ご紹介します。
このサンプルは、コマンドから下記のように実行するとGoogleDriveへファイルがアップロードされます。
これをcrontabに設定して実行すれば、定期的にファイルをアップロードできます。
下記は、DBデータをZIP化して、そのファイルをGoogleDriveへアップロードするサンプルです。
※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。
2019.10.30
【Android】署名付きapk作成時の注意点
いざapkファイルを作って動作確認をしようと思ったら、インストールできない、アプリが起動しないという経験がないでしょうか。
そんな事例を紹介します。
端末により、署名付きapkがインストール出来ない
端末により、署名付きapkがインストール出来ないケースがあります。
(右図のように「アプリはインストールされていません」とエラーメッセージがでました。)
私が確認したのは下記条件です。
端末 | Priori 3 LTE (OS android5.1) |
開発環境 | Android Studio 3.1.4 |
Android Studio2.3から、署名付きAPKを作成する際に、Signature Versionsを選ぶ項目(V1, V2)が追加されました。
作成の際にこの項目にチェックが無い場合、端末のOSバージョンによってインストールできなくなります。
私の場合は、V1を選択をしていなかった(V2のみ選択)ためにインストールできない状況になりました。
後述しますが、これによりAndroid7.0未満の端末(今回は5.1)で、apkがインストール出来ない、という事象が発生しました。
改めて、V1, V2両方の署名にチェックを入れたところ、無事7.0以前の端末でもインストール出来ました。
(基本的には、両方チェックが推奨されています。)
V1は従来の署名方法で、V2はAndroid7.0以降の「インストール時間高速化」や「セキュリティ面が強化」された署名方法のようです。
挙動としては、Android7.0以降では「V2」がインストール時に検証され、7.0以前では「V1」が検証(V2は無視)されます。
今回は、この「V1」を選択していなかった為、検証すべき署名が見当たらなかった(OS5.1ではインストール出来なかった)ということになります。
※ ちなみに、Android Studio2.2以前では、デフォルトでV1とV2両方で署名されていたようです。
(2.3からはそれが選択できる(必要に応じてV1またはV2を外せる)ようになった。)
GoogleMapが表示されない
Android Studioでデバックしている時は地図が表示されていたのに、署名付きのapkを作ってインストールすると地図が表示されなくなる経験をしました。
API(Maps SDK for Android)の設定に於いて、「使用アプリを制限する」為にSHA1の登録が必要となります。
このSHA1には「デバッグ用」と「リリース用」があるのですが、「デバッグ用」のみ設定しているとapkを作ったときに地図が表示されなくなります。
以下コマンドでリリース用のSHA1が取得でき、apkを作ってインストールしても地図が表示されるようになります。
- keytool -list -v -keystore your_keystore_name -alias your_alias_name
ちなみにデバッグ用のSHA1取得は、以下コマンドとなります。
- keytool -v -list -keystore ~/.android/debug.keystore
参考サイトに記載されているSHA1の取得方法のコマンドは、デバッグ用の取得方法が多くあり、これを鵜呑みにコピペ実行して「設定は全て完了した」と思ってしまいました。
まとめ
今回の二つとも、分かってしまえば本当に何てことない単純なミスなのですが、最初の段階で見落としてしまうと、後でその原因を追求するのに、意外と時間が掛かってしまったりします。
みなさん、気をつけましょう!
※この記事に対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。
2019.07.03
【C#】マウスフック
キーボードフックの記事にも記載しましたが、Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。
マウスを左クリックした、マウスを動かしたなどのイベントをwindowが非アクティブ状態で取得したい場合は、マウスのイベントをフックする必要があります。
以下にサンプルソースを掲載します。
サンプルソース
namespaceなどは適宜読み替えてください。
イベントをフックする場合は、DLL(user32.dll)にあるSetWindowsHookEx関数を使用して指定します。
この関数の引数の意味は下記のとおりです。
第1引数 | フックするイベントの種類 |
マウスのイベントをフックする場合は、 |
---|---|---|
第2引数 | フック時の関数のアドレス | イベントが発生した時に実行される関数。 |
第3引数 | インスタンスハンドル | 現在実行中のハンドルを渡す。 |
第4引数 | スレッドID | 0を指定すると、すべてのスレッドでフックされる。 |
サンプルソースのように指定すると、マウスボタンのクリック、マウス移動などのイベントが発生する都度EventMouse関数が呼ばれるようになります。
サンプルでは、マウスの座標をデリゲート関数に渡しています。
最後にCallNextHookEx関数を実行していますが、これは次のフックプロシージャ―へ渡すために実行しています。もしここで終了する場合は0を返すようにします。
このサンプルは、下記のように実行すると、MouseEvent関数が実行されます。
※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。
2019.06.05
【C#】キーボードフック
Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。
キーボードが押された、離されたイベントをwindowが非アクティブ状態で取得する必要がある場合は、キーボードイベントをフックする必要があります。
以下にサンプルソースを掲載します。
サンプルソース
namespaceなどは適宜読み替えてください。
イベントをフックする場合は、DLL(user32.dll)にあるSetWindowsHookEx関数を使用して指定します。
この関数の引数の意味は下記のとおりです。
第1引数 | フックするイベントの種類 |
キーボードのイベントをフックする場合は、 |
---|---|---|
第2引数 | フック時の関数のアドレス | イベントが発生した時に実行される関数。 |
第3引数 | インスタンスハンドル | 現在実行中のハンドルを渡す。 |
第4引数 | スレッドID | 0を指定すると、すべてのスレッドでフックされる。 |
サンプルソースのように指定すると、キーが押される/離される毎にEventKey関数が呼ばれるようになります。
サンプルでは、キーが離された時にコンソールへコメントを表示し、処理をするようにしています。
最後にCallNextHookEx関数を実行していますが、これは次のフックプロシージャ―へ渡すために実行しています。もしここで終了する場合は0を返すようにします。
このサンプルは、下記のように実行すると、キーが離される毎にKeyEvent関数が実行されます。
※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。
- «
- 3 / 3