0

私が目指しているシナリオは次のとおりです。

  1. 「汎用」の Android アプリケーション (apk)、つまり、別のリソースで再コンパイルしたくない
  2. APK はデバイスに「プリインストール」されるため、「マーケット」アプリにはなりません。
  3. アプリケーションには、インストールごとに異なるテキストなどでカスタマイズするカスタム構成ファイルが必要です。(構成ファイルは同じ名前で同じ場所にある必要があります)
  4. アプリの起動時に、構成ファイルが読み取られ、構成ファイルのデータに従ってアプリが構成されます

要するに、これはアプリケーションをプロビジョニングして、構成ファイルに基づいた特定のルック アンド フィールを再コンパイルせずに適用する方法です。カスタム イメージ ファイル、テキスト データなどを読み込むことができます。

問題は、構成ファイルを簡単に更新し、SD カードを使用せずに非 root デバイスに「コピー」する必要があることです。そのため、USB 接続を介して簡単にアクセスでき、APK が実行時にアクセスできる非アプリ固有の場所にアクセスする必要があります。SharedPreferences と Android ファイル IO は、/data/data/pkg/... または外部ストレージの下のプライベート アプリ ディレクトリに制限されているようです。どんなアイデアでも大歓迎です。ありがとう。

4

1 に答える 1

1

少なくとも部分的な回答で更新すると思っただけです。私の問題の少なくとも一部は、Razr Maxx のデバッグ モードでのテストに関係しています。USB デバッグ経由で接続している場合、新しいファイルを作成する呼び出しは次のように失敗します。

06-06 10:04:30.512: W/System.err(2583): java.io.IOException: オープンに失敗しました: EACCES (許可が拒否されました) 06-06 10:04:30.512: W/System.err(2583): java.io.File.createNewFile(File.java:940)

デバイスまたはエミュレーターでアプリをスタンドアロンで実行している場合、すべて期待どおりに動作します。これが特に Razr Maxx に関連しているのか、それとも他の問題に関連しているのかわかりませんか?

動作している私のコードは(から:Androidの外部ストレージにファイルを書き込む):

private void writeToSDFile(){

    // Find the root of the external storage.
    // See http://developer.android.com/guide/topics/data/data-  storage.html#filesExternal

    File root = android.os.Environment.getExternalStorageDirectory(); 
    mStatusTV.append("\nExternal file system root: "+root);

    // See https://stackoverflow.com/questions/3551821/android-write-to-sd-card-folder

    File dir = new File (root.getAbsolutePath() + "/download");
    dir.mkdirs();
    File file = new File(dir, "myData.txt");


    try {
        file.createNewFile();

        FileOutputStream f = new FileOutputStream(file);
        PrintWriter pw = new PrintWriter(f);
        pw.println("Hi , How are you");
        pw.println("Hello");
        pw.flush();
        pw.close();
        f.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.i(TAG, "******* File not found. Did you" +
                " add a WRITE_EXTERNAL_STORAGE permission to the   manifest?");
        mStatusTV.append("Write File 1: " + e.getMessage());
    } catch (IOException e) {
        e.printStackTrace();
        mStatusTV.append("Write File 2: " + e.getMessage());
    }   
    mStatusTV.append("\n\nFile written to "+file);
}
于 2013-06-06T16:10:26.993 に答える