0

わかりました、私は塹壕に投げ込まれました。可能な限りクリーンで最も立派な方法で抜け出したいです。

現時点では、2 つの Android プロジェクトがあり、ファイルを 1 つのプロジェクトにパッケージ化し、別のプロジェクトで正常に読み取る必要がある立場にあります。ややこしいかもしれないので説明します。

私は2つのAndroidプロジェクトを持っています。Engine という名前の Android ライブラリ プロジェクトとアプリケーション自体。

エンジンは、ネットワーク通信と、ヘッドレスで動作し、UI と対話しない他の多くのバックグラウンド タスクを処理します。エンジンはメイン アプリケーションのコンテキストにアクセスできますが、それ以外にはアクセスできません。このエンジンを開発する旅の途中で、興味深いことに出会いました。Https (逃げないでください) とそれが Android アプリケーションにもたらす問題。Android アプリケーションが恐ろしく安全ではなく、MITM 攻撃の影響を非常に受けやすいというブログ投稿が数多くあります。これは非常に現実的な脅威であるため、このエンジンでは無視できない問題です。

これについてもっと読むには、Nikolay Elenkov のブログを強くお勧めします。彼は Android でセキュリティを適切に行うための優れた方法を説明しています。

この問題はすでに解決されているので、私は脱線します。私にとっての解決策は、.bks ファイルに保存されているカスタム キーストアを使用することでした。この場合も、これがどのように作成されたか、またはどのように作成されるかについて心配する必要はありません。本当の問題は、このファイルが JAR 内にパッケージ化されている場合、このファイルをどのように読み取るかということです。

最終リリースでは、エンジンは jar としてパッケージ化され、アプリケーションに含まれます。このエンジンを jar にパッケージ化する際の注意点は、res フォルダー内のものはコンパイルされず、読み取ることができないということです。定義上、ライブラリ プロジェクト内のアセットは、プロジェクトが jar であるかライブラリ プロジェクトであるかにかかわらず、到達可能ではありません。

要約すると、2 つのプロジェクトがあります。BKS ファイルを含む 1 つのパッケージ化された Jar Android ライブラリと、それを読み取る必要がある 1 つのアプリケーション。

assets/ または res/ フォルダー内にある場合、BKS ファイルを回復できません。

このファイルにアクセスする方法はありますか?

考えられる解決策:

  • ファイルを lib ディレクトリに保存して読み込みますか?

  • BKS をリモート サーバーに保存し、起動時にロードしますか?

  • SSL証明書を処理する別の方法を見つけてください(そして、すべての証明書を受け入れるつもりはありません!)

  • Android ライブラリ プロジェクト内のファイルを別のフォルダーに読み込む極秘の方法があります。その方法は次のとおりです ......

4

2 に答える 2

0

要約すると、2 つのアプリケーションがあります。

いいえ、あなたはしません。

BKS ファイルを含む 1 つのパッケージ化された Jar Android ライブラリと、それを読み取る必要がある 1 つのアプリケーション。

これは 1 つのアプリケーションであり、2 つではありません。説明によると、プロジェクトは 2 つですが、アプリケーションは1 つです。

このファイルにアクセスする方法はありますか?

ファイルをアプリケーションのプロジェクトに入れます。assets/それres/raw/はあなた次第です。ソース コード管理の観点から、ファイルをライブラリ プロジェクトのリポジトリに配置する場合は、アプリケーション プロジェクトでシンボリック リンクまたはハードリンクを使用するか、コミット フックなどを使用してアプリケーション プロジェクトの場所にコピーを作成します。

または、ファイルを自分でライブラリ JAR にパッケージ化し、 を使用getResourceAtStream()して で読み込みます。私はこれを試していませんが、おそらく動作します。

于 2012-10-23T16:32:49.217 に答える
0

私が考えることができる 1 つの方法は、コンテンツ プロバイダーを使用することです。BKS ファイルがあるエンジンにコンテンツ プロバイダーを実装します。insert()、delete() などの実装について気にしないでください。これらの関数の本体を空にしてください。マネージド カーソルを使用してクエリ関数を実装し、カーソルに BKS ファイルのコンテンツを設定します。アプリケーションから、このコンテンツ プロバイダーにクエリを実行します。

2 つのアプリケーション間で設定を交換するために、同様のことを行いました。

SharedPreferences prefs = null;
   String[] columns = new String[] { "mycolumn"};
   Context otherAppsContext = null;
   try {
       otherAppsContext = mContext.createPackageContext("com.blah.blah", Context.CONTEXT_IGNORE_SECURITY);
   } catch (NameNotFoundException e) {
   }
   prefs = otherAppsContext.getSharedPreferences("com.blah.blah_preferences_public",Context.MODE_WORLD_READABLE|Context.MODE_MULTI_PROCESS);
   isConfigured = prefs.getBoolean("mycolumn", false);
   Object[]values = new Object[] {isConfigured==true?1:0};
   Log.d(TAG,"isConfigured " + isConfigured);
   MatrixCursor c = new MatrixCursor(columns);
   c.addRow(values);
   return c;
于 2012-10-23T16:53:04.667 に答える