フルスタック開発で遭遇するいくつかの問題と解決策

Simple Gridの        開発プロセスでは、サーバーサイド開発とマルチデバイス開発の両方が必要です。サービス側は JAVA サービス側、Android サービス側、端末側は Android と Windows に分かれています。技術は複雑で、多くの基本的な問題に遭遇します。将来の参考のためにすべてここに記録されています。

        ちなみにちょっと宣伝ですが、Zhijian Gridはデバイスとクラウドを組み合わせた開発フレームワークで、サーバー側とデバイス側の開発を大幅に簡素化します。シンプルな json 構成とサーバー側の sql および js スクリプトを使用して、ビジネス シナリオの 95% 以上を処理できます。デバイス側は Android と Windows をサポートします。CRM、メンバーシップなど、Code CloudおよびCSDNでオープンソース化されているいくつかのビジネス コードを実装しました。このプロジェクトはまだ継続的に改善中ですので、ぜひご利用ください。

目次

1. 環境問題

1.1. Androidスタジオ

1.1.1. jar と aar を追加する方法:

1.1.2. シミュレータパスの権限

1.1.3. gradle のインストール

1.1.4. gradle の問題

1.1.5. kotlin、gradle プラグインが無効になっている

1.1.6. Kotlin-android が見つからないエラー

1.1.7. Gradle設定の変更

1.1.8. logcat を開いてログを表示する

1.1.9. 冗長なインポートの削除

1.1.10. checkstyle ルールを変更する

1.1.11. プロジェクト名の変更

1.1.12. adb オーバーレイのインストール

1.1.13. サンプルプロジェクトインポート時の変更内容

1.1.14 プロジェクトの applicationId を変更する

1.2. シミュレータ

1.2.1. シミュレータIPと外部アクセス

1.2.2. エミュレータのコマンドラインに入る

1.3. ネットワーク

1.3.1. 携帯電話と PC 間のネットワークが切断される

1.3.2. PC が携帯電話に ping できない

1.3.3. 携帯電話から同一LAN内のPCにアクセス

1.4. マイフォン

1.4.1. Xiaomi 携帯電話、USB インストールを開けない

1.4.2. 実デバイスが開発者モードに入る

1.5. Huawei または Honor 携帯電話

1.5.1. デバッグレベルのログを開く

1.6. iOS

1.6.1. iPhone ウェブサーバーに関する注意事項

1.7. 日食

1.7.1. パッケージ名の変更

1.8. グラドル

1.8.1. アンダースコア「_」で始まるアセット下のディレクトリは無視されます

1.9. ジャワ

1.9.1. Windows に GraalVm をインストールする

1.9.2 Linux に GraalVm をインストールする

1.10. Linux環境

1.10.1. ユーザーの作成

1.10.2. ポートフォワーディング

1.10.3. 画像検証コードでフォントをインストールする必要がある

2. Android 開発の問題

2.1. 権限

2.1.1. アプリの権限設定

2.2. 最下層

2.2.1. dex プラグインの動的ロード

2.2.2. データの手動削除の禁止を実現する

2.2.3. セキュリティポリシーの定義

2.2.4. kotlin で書かれたライブラリに依存する

2.3. セキュリティ

2.3.1. ルートオブトラストの暗号化と復号化

2.3.2. 自己署名ルート証明書の追加

2.4. JUnit テスト

2.4.1. Android本体にファイルを書き込めない

2.4.2. テストの準備とクリーンアップ

2.5. ログバックログ

2.5.1. 設定内のプロパティ

2.5.2. DATA_DIR などの組み込みプロパティは未定義です

2.6. バージョンリリース

2.6.1. アプリケーションの署名

2.6.2. アイコンが更新されない

3. C# 開発の問題

3.1. ディレクトリの権限

3.2. Log4net 出力ファイルのパス

3.3. リソースファイルの埋め込み

3.4. 単体テスト

3.5. プロジェクト設定のセットアップ

3.6. 難読化

4. ハイブリッド

4.1. フレームワーク

4.2. テキスト選択を無効にする

4.3. 参照コンポーネント

4.4. QRコードの生成

5. 常識

5.1. 統一されたクレジット コードのコーディング ルールと検証

5.2. 行政区分番号

5.3. Git コマンドセット


1. 環境問題

1.1. Androidスタジオ

1.1.1. jar と aar を追加する方法:

a) アプリの下にディレクトリ lib を作成します

b) app\build.grale に実装 fileTree(dir: 'libs', include : ['*.jar','*.aar']) を追加します

c) jar ファイルと aar ファイルを以下にコピーします。

d) AndroidStudio がそれを認識しない場合は、メニューの [ファイル] -> [キャッシュの無効化/再起動] をクリックし、再起動します。

1.1.2. シミュレータパスの権限

AndroidStudio の Device File Explore でパスとファイルを手動で作成すると、アプリで不正アクセスが発生するため、アプリで自分でパスとファイルを作成する必要があります。

1.1.3. gradle のインストール

  1.       指定されたパスに解凍します。
  2.      このパスを指すように GRADLE_HOME を構成します。
  3.       パスの下にユーザー ディレクトリを作成し、一時ファイルを保存するために GRADLE_USER_HOME を %GRADLE_HOME%\user として構成します。
  4.      %GRADLE_HOME%\bin を PATH 変数に追加します
  5.       AndroidStudio の [ファイル] -> [設定] で Gradle を検索し、Gradle パスと GradleUser パスを設定します。
  6.        Gradle をアップグレードする場合は、すべてのアプリケーションの設定を変更する必要がないように、ダウンロード後に同じパスに解凍することをお勧めします。

1.1.4. gradle の問題

プロジェクト ディレクトリの build.gradle は、AndroidStudio の Gradle バージョンを指定します。これはアダプターである可能性があります。変更しないようにするか、AndroidStudio のバージョンに変更してください。

gradle\wrapper\gradle-wrapper.properties は gradle のバージョンを指定し、パスは file\:///local パスなど、ローカルにダウンロードされた zip ファイルとして書き込むことができるため、このディレクトリ内の gradle zip ファイルは削除できません。これにより、異なるプロジェクトを再度ダウンロードすることを避けることができます。

1.1.5. kotlin、gradle プラグインが無効になっている

これら 2 つのプラグインは無効にすることができず、無効にすると AndroidStudio が異常起動します。

この時点で、disabled_plugins.txt 内の対応するレコードを削除できます。場所は次のとおりです。

C:\Users\用户名\AppData\Roaming\Google\AndroidStudio4.1\disabled_plugins.txt

1.1.6. Kotlin-android が見つからないエラー

プロジェクト build.gradle 内のエラーの原因となっている行を削除し、Tools-Kotlin のプロジェクトで Config Kotlin を実行することを選択します。

1.1.7. Gradle設定の変更

Gradle ファイルが変更されるたびに、プロジェクトをコンパイルして実行できなくなります。この場合は、[ファイル]->[プロジェクトを Gradle ファイルと同期] を選択します。

1.1.8. logcat を開いてログを表示する

[表示] - [ツール ウィンドウ] メニューで、logcat を開いてログを表示します。

このディレクトリには他の関数もいくつかあります。

1.1.9. 冗長なインポートの削除

[コード最適化インポート] メニューでは、すべての冗長なインポートを自動的に削除するか、ctrl+alt+'o' ホットキーを使用できます。

1.1.10. checkstyle ルールを変更する

[設定] - [検査] で提案されたキーワードを検索し、ルールを見つけて、チェックを入れるかチェックを外します。

1.1.11. プロジェクト名の変更

たとえば、サンプル プロジェクトを最終的なプロジェクト名に変更するには、次の手順に従ってください。

1. Android Studio を閉じます。

2. プロジェクトフォルダーの名前を変更します。

3. OldProjectName.iml ファイル (プロジェクトのルート ディレクトリの .idea ディレクトリ内) の名前を新しい項目名に変更します。つまり、OldProjectName.iml を NewProjectName.iml に変更します。

4. .idea/workspace.xml 内の対応する名前を変更します。

5. app/build.gradle の applicationId を変更します。

6. 次に、ファイル内の external.linked.project.id の値を新しいプロジェクトの名前に設定します (例: external.linked.project.id="NewProjectName")。

7。AndroidStudio をもう一度開いてください。

1.1.12. adb オーバーレイのインストール

adb install xxx.apk すでにインストールされている場合は、プロンプトが表示されます

失敗 [INSTALL_FAILED_ALREADY_EXISTS: 最初にアンインストールせずに xxx を再インストールしようとしました。]

adb install -r xxx.apk を使用すると、以前のデータを保持したまま上書きしてインストールできます。

1.1.13. サンプルプロジェクトインポート時の変更内容

  1. プロジェクト ディレクトリの gradle/wrapper/gradle-wrapper.properties の distributionUrl を変更し、バージョンを gradle の既存のバージョンに変更するか、古いバージョンをダウンロードします。
  2. プロジェクト ディレクトリの build.gradle を変更し、ext.kotlin_version を現在のバージョンに変更します。kotlin のバージョンは file-settings-plugins で確認できます。
  3. プロジェクト ディレクトリの app/build.gradle を変更し、buildSdkVersion を削除し、現在の既存のバージョンを使用し、compileSdk と targetSdk を AndroidStudio の最新バージョンに変更し、minSdk を適切なバージョンに変更します。これら 3 つの構成項目の名前は新しいバージョンの Gradle にあり、最後に Version を追加できないことに注意してください。

1.1.14 プロジェクトの applicationId を変更する

        以下の操作は「Android Studio Flamingo | 2022.2.1 Patch 2」で行っており、他のバージョンでは異なる場合があります。

        プロジェクトのルート ディレクトリにある build.gradle の applicationId を変更します。生成されたパッケージ名を変更する必要がある場合は、build.gradle の名前空間も変更する必要があります。次に、ビルドメニューで「プロジェクトをクリーンアップ」を選択し、ファイルメニューで「プロジェクトをGradleファイルと同期」を選択し、一度で動作しない場合は何度か実行します。それでも動作しない場合は、[ファイル] メニューの [キャッシュの無効化] を選択し、再起動して、生成されたディレクトリが表示されるまで数回同期してください。

1.2. シミュレータ

1.2.1. シミュレータIPと外部アクセス

シミュレーター内部では、ホスト マシンの IP は 10.0.0.2 で、シミュレーター自体の IP は 10.0.2.15/127.0.0.1/localhost です。

ホストのエミュレータ内の TCP ポートに直接アクセスする必要がある場合は、最初にマッピングを行う必要があります。

adb フォワード tcp:8081 tcp:8080

このようにして、http://localhost:8081/xxxxxにアクセスできるようになり 、リクエストは仮想マシンのポート 8080 に転送されます。

1.2.2. エミュレータのコマンドラインに入る

adb -s エミュレータ-5554 シェル

1.3. ネットワーク

1.3.1. 携帯電話と PC 間のネットワークが切断される

一般に、ルーターの設定に問題があり、ルーターの無線設定で AP 分離が有効になっているため、同じルーター配下のノードが相互に通信できなくなる可能性があります。

1.3.2. PC が携帯電話に ping できない

ネットワーク ファイアウォールはデフォルトでは送信リクエストを無効にしませんが、360 がインストールされている場合、360 のセキュリティ保護センター -> 侵入保護システムで LAN 保護が選択されている場合、PC は携帯電話と通信できません。

1.3.3. 携帯電話から同一LAN内のPCにアクセス

まず、Web サービスを PC 上で開始する必要があります。

次に、システム ファイアウォールの詳細設定で、TCP のポート 8080 などの対応するポートを開く受信ルールを追加します。

最後に、360 がインストールされている場合は、セキュリティ保護センター -> システム保護システムでネットワーク セキュリティ防火をオフにする必要があります。

1.4. マイフォン

1.4.1. Xiaomi 携帯電話、USB インストールを開けない

Simカードを挿入、不要なSimカードもOK

1.4.2. 実デバイスが開発者モードに入る

Huawei、Xiaomi などのさまざまなモデルの携帯電話は、設定された Android バージョンを複数回クリックすることで開発者モードに入ることができます。開発者モードに入ると、USB デバッグを有効にすることができます。

1.5. Huawei または Honor 携帯電話

1.5.1. デバッグレベルのログを開く

Huawei 携帯電話のデフォルトのログ レベルは、AndroidStudio での設定に関係なく情報です。デバッグ レベルを開きたい場合は、以下の手順に従って設定してください。

1. ダイヤル インターフェイスで *#*#2846579#*#* をダイヤルすると、プロジェクト メニューが表示されます。

2. 入力する背景設定を選択します。

3. LOG設定を開き、APログを選択します。

4. AndroidStudio に戻り、ログ レベルを変更すると、デバッグが表示されます。

5. それでも表示できない場合は、 adb logcat -d で表示できる場合は、以下のように AndroidStudio を再起動してください。

1.6. iOS

1.6.1. iPhone ウェブサーバーに関する注意事項

iOSのnettyであるSwiftNioをベースにしたWebサーバーを開発します。

https://www.5axxw.com/wiki/content/zdz096https://www.5axxw.com/wiki/content/zdz096

GCDWebServer や CocoaHttpServer などのその他のサーバーは長い間更新されていません

1.7. 日食

1.7.1. パッケージ名の変更

パッケージを右クリックし、「リファクタリング」を選択します。名前変更ウィンドウが表示されます。新しい名前を入力します。必ず「サブパッケージの名前を変更」を選択してください。そうでない場合は、空のパッケージが作成されるだけです。

1.8. グラドル

1.8.1. アンダースコア「_」で始まるアセット下のディレクトリは無視されます

この機能をオフにするには、プロジェクトの gradle ファイルの android の下に次の設定を追加します。

aaptOptions{     ignoreAssetsPattern '!._' }

1.9. ジャワ

1.9.1. Windows に GraalVm をインストールする

ダウンロードとインストール: Java 構成とまったく同じです。解凍後、JAVA_HOME を構成し、bin をシステム変数パスに設定します。

安装native-image:gu install native-image

llvm のインストール:gu install llvm-toolchain

JS エンジンをインストールします: gu install js

ネイティブコンパイルコマンド:native-image

1.9.2  Linux に GraalVm をインストールする

  1. 次の 2 つのファイルをダウンロードし、Linux サービスにアップロードします。

graalvm-ce-java11-linux-amd64-22.3.1.tar.gz

js-installable-svm-java11-linux-amd64-22.3.1.jar

  1. graalvmを解凍します。

tar xfz graalvm-ce-java11-linux-amd64-22.3.1.tar.gz

[注意] /root配下には解凍しないでください。このディレクトリはrootユーザーのルートディレクトリとなり、他のユーザーはアクセスできません。

  1. そして、/etc/profile に次の設定を追加します

export JAV_HOME=解凍パス

エクスポート JRE_HOME=${JAVA_HOME}/jre

エクスポート CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

エクスポート PATH=${JAVA_HOME}/bin:$PATH

  1. js サポートをインストールし、-L オプションを使用してローカル インストールを選択します。

gu install -L js-installable-svm-java11-linux-amd64-22.3.1.jar

国内の github へのアクセスがスムーズではなく、インストールが非常に成功しにくいため、gu install js は使用しないでください。ダウンロード ツール (Thunder など) を使用してダウンロードし、ローカルにインストールします。

1.10. Linux環境


1.10.1. ユーザーの作成


サービスのインストールに root ユーザーを使用するのは悪い習慣で、特に外部インターフェイスを保持するサービスの場合は、抜け穴ができるとハッカーが root 権限を取得できるため、別のユーザー インストール サービスが作成されます。
useradd -m Mesh
-m パラメータでは、システムが /home の下にユーザー ディレクトリを自動的に作成する必要があります。mesh はユーザー名です
passwd Mesh
はパスワードを設定するユーザーです


1.10.2. ポートフォワーディング


サービス プログラムはポート 8523 で実行され、80 と 443 の両方をこのポートに転送する必要があります。これは、iptables で転送ルールを追加することで実現できます。


1. まず iptables をインストールします (既にインストールされている場合は開きます)
//systemctl stop firewalld # ファイアウォールを閉じる
yum -y install iptables-services # iptables サービスをインストール
systemctl enable iptables # iptables サービスを設定 boot
systemctl start iptables # iptables サービスを開始
service iptables save # iptables 設定
サービスを保存 iptables restart # iptables サービスを再起動

2. ポートを開きます
。iptables サービスが開始されると、1024 を超えるポートはデフォルトで無効になるため、
iptables -I INPUT -p tcp --dport 8523 -j ACCEPTを開く必要があります。

3. 次に、ポート転送ルールを追加します;
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8523
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8523

4. ポートの転送ルールを表示します
iptables -t nat -L -n | grep 80

5. ポート転送ルールを削除します
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8523

6. 最後に、ルールを保存します。
サービス iptables 保存

このようにして、ポート 80 と 443 の両方にアクセスできます。

1.10.3.画像検証コードでフォントをインストールする必要がある

画像検証コードは Linux 上で生成されますが、フォントがインストールされていないため FontManagerFactory で例外が発生します。次のコマンドでインストールします。

yum -y fontconfig をインストールします

fc-list view にインストールされているフォント

2. Android 開発の問題

2.1. 権限

2.1.1. アプリの権限設定

アプリケーションと同じレベルの AndroidMenifest.xml に設定

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

同時に、アプリケーションで android:requestLegacyExternalStorage="true" を設定します。

2.2. 最下層

2.2.1. dex プラグインの動的ロード

  1. PathClassLoader クラス ローダーを使用して、dex プラグインを動的にロードします。
  2. ロードする前に、dex コマンドを呼び出して jar ファイルを dex ファイルに変換する必要があります。dex ファイルは外部からダウンロードできます。
  3. ClassLoader によってロードされるルールのため、異なるプラグインは相互にアクセスできませんが、プラグインは apk 内のクラスにアクセスできます。

2.2.2. データの手動削除の禁止を実現する

データを削除するActivityを実装し、AndroidMenifest.xml-application-android:manageSpaceActivityでこのActivityを参照し、カスタムの削除データ管理インターフェースを実装することで、削除可能なデータのみを削除したり、sqliteデータベースの削除を禁止するなど全く削除しなかったりすることができます。

このアクティビティの定義は、通常のアクティビティの定義と変わりません。

2.2.3. セキュリティポリシーの定義

セキュリティ ポリシーは、プリインストールされた自己署名ルート証明書など、AndroidMenifest.xml-application-android:networkSecurityConfig でカスタマイズできます。

2.2.4. kotlin で書かれたライブラリに依存する

たとえば、okhttp4.x は次の解決に失敗しましたというプロンプトを表示します: Lkotlin/jvm/internal/Intrinsics、

Kotlin には特別な利点がないため、使用しないことをお勧めします。OkHttp4 が Kotlin に依存するように制限することも役に立ちません。

2.3. セキュリティ

2.3.1. ルートオブトラストの暗号化と復号化

暗号化と復号化には KeyStore を使用し、KeyStore の最下層では Tee を使用します。

問題は画面が真っ暗だと使えないことです。

EncryptedSharedPreferences も KeyStore を使用します。

https://source.android.google.cn/security/keystore?hl=zh-cn

2.3.2. 自己署名ルート証明書の追加

CA を使用して証明書を発行するコストは通常​​高くなりますが、テスト アプリケーションには必要ありません。したがって、自己署名ルート証明書を自分で生成し、次にそのルート証明書を使用してセカンダリ証明書を生成し、最後にセカンダリ証明書を使用して独自のユーザー証明書を生成します。これにより証明書チェーンが形成されます。プログラムにルート証明書を事前に設定し、独自のルート証明書を信頼します。

自己署名証明書チェーンは次のリンクを参照できます。

KeyTool は証明書チェーンを生成し、it_flyinmind のブログ - CSDN ブログを使用します

上記のリンクでは、keytool を使用してルート証明書、二次証明書、三次証明書を生成するプロセス全体を紹介しています。

2.4. JUnit テスト

2.4.1. Android本体にファイルを書き込めない

ApplicationProvider.getApplicationContextを使用してContextを取得しますが、このContextで取得したパスは読み書き可能であり、書き込まれた内容はテストアプリではなく正式アプリに存在します。

2.4.2. テストの準備とクリーンアップ

テスト関数の前に @Before および @After アノテーションを追加すると、先頭と最後での実行を制御し、準備とクリーンアップに使用できます。

2.5. ログバックログ

2.5.1. 設定内のプロパティ

logback が構成ファイルを読み取るとき、その中で使用されているプロパティは ${propertyName} によって参照されます。ルート パスの指定など、初期化されたコンテキストでプロパティを設定する必要があります。このコンテキストはリセットできません。リセットしないと、プロパティが失われます。

LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
lc.putProperty("loggerHome", outputDir);
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
//lc.reset(); //reset会清除property
configurator.doConfigure(cfgFile);
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);

2.5.2. DATA_DIR などの組み込みプロパティは未定義です

例によってはDATA_DIRやPACKAGE_NAMEなどの属性が出てきますが使用できませんので、コードを見るとアプリケーションコンテキストを取得するログバックの方法が間違っているのではないかと推測されます。したがって、プログラムに構成をロードする前にカスタム プロパティを設定し、logback.xml でそれらを参照する必要があります。

2.6. バージョンリリース

2.6.1. アプリケーションの署名

このバージョンのリリースには、証明書の署名が必要です。この証明書は EC または RSA を使用でき、証明書チェーンで署名できます。デバッグの場合、デフォルトの証明書が生成されますが、公開時にはそれを使用しないでください。

リリース中に、メニューの [ビルド] -> [署名済みバンドル/APK の生成] を選択し、既存の証明書を選択するか、新しい証明書を作成します。この証明書はアプリケーションに生涯付属する必要があるため、適切に保管し、キー パスワードとストア パスワードを覚えておく必要があります。

自己署名証明書を使用することもできます。生成方法は以下を参照してください。

KeyTool は証明書チェーンを生成し、it_flyinmind のブログ - CSDN ブログを使用します

2.6.2. アイコンが更新されない

「新規 -> 画像アセット」で作成されたアイコンは、適切な明瞭さを確保するために、さまざまな解像度でさまざまなアイコンを提供できます。しかし、Image Assetによって作成されたアイコンはAPPプロジェクトに依存しないため、メインRESディレクトリにコピーする必要があります。MIPMAP-ANYDPI-V26またはMIPMAP-ANYDPI-V24およびVALUESディレクトリをコピーすることを忘れないでください。これら2つのディレクトリは醤油ではありません。さまざまなアイコン。

3. C# 開発の問題

3.1. ディレクトリの権限

アプリケーションがプログラム ディレクトリにインストールされている場合、プログラムには現在のパスを書き込む権限がないため、パスを渡すことができます。

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

アプリケーションが書き込みできるパス (C:\Users\Account\AppData\Roaming\Application Name など) を取得します。ログ、ランタイム ファイルなどをこのパスに書き込むことができます。

3.2. Log4net 出力ファイルのパス

ディレクトリのアクセス許可に関連して、実行時の状況に応じてログ出力のルート パスを設定する必要があります。GlobalContext.Properties["loggerHome"] = OutputDir; を設定できます。

次に、次の形式で log4net.xml の appender.file 内の loggerHome を参照します。

<file type="log4net.Util.PatternString" value="%property{loggerHome}\\logs\\mesh\\run.log" />

type を log4net.Util.PatternString に設定する必要があることに注意してください。それ以外の場合、%property{loggerHome} は通常の文字列として解析されます。

3.3. リソースファイルの埋め込み

ファイルを変更するたびに Resources.resx を更新する必要がなく、フォルダー内のファイルを直接変更するのに便利なように、リソースをファイルの形式で埋め込むことをお勧めします。

プロジェクトを右クリックし、[追加] -> [新しいフォルダー] を選択し、リソース ディレクトリを作成し、その中にさまざまなファイルを追加します。リソース生成操作では「埋め込みリソース」を選択する必要があることに注意してください。

次に、プログラム内で次のメソッドを使用してリソース ファイル ストリームを開きます。

アセンブリ assm = Assembly.GetExecutingAssembly();

Stream s = assm.GetManifestResourceStream("プロジェクト名.Resources." + ファイル名);

ここでの fileName には拡張子が含まれます。

3.4. 単体テスト

まず単体テスト関数を記述し、クラスに [TestClass] を記述し、テスト関数に [TestMethod] を記述して、Assert.xxx を通じてアサートします。

次に、表示メニューの「テスト エクスプローラー」を開き、フラスコの形のアイコンが選択されていることを確認し、すべてのテストを実行します。

3.5. プロジェクト設定のセットアップ

        .net に付属のパッケージ化ツールは非常に扱いにくく、長年開発されてきたにもかかわらず改善されていません。したがって、プロジェクトは inno setup を使用してインストール ファイルを作成します。このファイルには、リリース ディレクトリに dll が含まれている必要があります。webview2を使用する場合は、runtimes\win-x64\native\WebView2Loader.dllをインクルードする必要があります。

        中国語にパッケージ化されている場合、 ChineseSimplified.isl を追加するときに、utf8-with-BOM 形式に変換する必要があります (notepad++ で変更可能)。そうしないと、インターフェースで文字化けが表示されます。ライセンスやその他のファイルを指定する必要がある場合は、utf8-with-BOM 形式にも変更する必要があります。

3.6. 難読化

        .Net リアクターを使用し、リリース中のメイン プログラム exe を選択し、プログラムを混乱させるために難読化を選択します。混乱した場合は、inno setup を使用してインストール パッケージを生成します。

4. ハイブリッド

4.1. フレームワーク

vue+vue-router+quasar を使用して開発し、ブラウザにインターフェイスを出力し、基礎となるインターフェイスを呼び出します。

注: vue では、vue.runtime.global.prod.jsの代わりにvue.global.prod.jsバージョンを使用する必要があります。

https://cdn.jsdelivr.net/npm/vue@next/dist/ からダウンロードできます。

quasar を https://quasar.dev/start/umd からダウンロードします (quasar.umd.prod.js および quasar.prod.css を含む)。これに関連して、css を quasar.prod.css とマージできます。そこで使用されるフォントも 1 つずつダウンロードしてローカルに置く必要があります。リンクは次のとおりです。

https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|マテリアル+アイコン

4.2. テキスト選択を無効にする

ゲームシーンではドラッグを多用するため、テキストが選択されてしまいやすいのですが、この時CSSに user-select: none; を追加することでテキストの選択を禁止することができます。

4.3. 参照コンポーネント

1) コンポーネントファイルをインポートする

「/assets/v3/components/alert_dialog.js」から AlertDialog をインポートします

2) コンポーネントを登録する

app.component('コンポーネントアラートダイアログ', AlertDialog);

登録は app.mount の前に配置する必要があります。そうしないと、コンポーネント内のメソッドを呼び出すと、「xxx は関数ではありません」というプロンプトが表示されます。

3) テンプレートにコンポーネントを導入します

<component-alert-dialog :title="tags.failToCall" :close="tags.close" ref="errDlg"></component-alert-dialog>

4) jsでコンポーネントを呼び出す

this.$refs.errDlg.show(“xxxx”);

4.4. QRコードの生成

qrcodejs2 は、nodejs で開発されていないため、インポートによって導入できず、index.html に直接インクルードすることしかできません。

<script src="/js path/qrcode.js"></script>

次に、QR コードを収容するためにテンプレートに div を追加します。ここでは相対幅 vw が使用されるため、生成時に計算する必要があります。

<div ref="qrCodeUrl" style="幅:60vw; 高さ:60vw;"></div>

最後に、表示する必要がある場合に呼び出します。

新しい QRCode(this.$refs.qrCodeUrl, {

    テキスト: 'https://www.baidu.com',

    幅: document.documentElement.clientWidth * 0.6、

    高さ: document.documentElement.clientWidth * 0.6、

    colorDark: '#000000',

    colorLight: '#ffffff',

    正しいレベル: QRCode.CorrectLevel.H

});

ダイアログ内で使用する場合、ダイアログの@show内でQRコードを表示するために呼び出す必要がありますが、早すぎるとダイアログの要素が作成されていないため、この時点で表示に失敗します。

5. 常識

5.1. 統一されたクレジット コードのコーディング ルールと検証

ルール:【マイクロサイエンスの普及】統一社会信用コードを理解できるようにする_組織

Java 実装:ソーシャル統一クレジット コードの検証JAVA

5.2. 行政区分番号

https://www.mca.gov.cn/article/sj/xzqh/1980/202105/20210500033655.shtml

5.3. Git コマンドセット

この記事を参照してくださいGit 操作メモ_flyinmind のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/flyinmind/article/details/126965194
おすすめ