AndroidはSharedPreferencesの取得に失敗し、Appが起動できませんでした

2512 ワード

説明:
あるappは別のappのSharedPreferencesにアクセスし、プログラムが起動した後、インタフェースが表示されずにカードが死んでしまい、何のヒントもありません.
エラーの原因:
アプリケーション呼び出しcreatePackageContextは失敗したが、例外情報も与えられなかった.
/*
 * SharedPreferences sp = getSharedPreferences("ethernet",
 *      //Context.MODE_WORLD_WRITEABLE);
 *      Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
 */

Context ethernetAppContext = null;
try {
    ethernetAppContext = createPackageContext("com.dog.ethernet", Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
    new AlertDialog.Builder(this).setTitle("ERROR").setMessage("Please install ethernet application.").setPositiveButton("confirm", null ).show();  
    System.exit(-1);
    e.printStackTrace();
}   

SharedPreferences sharedPreferences = ethernetAppContext.getSharedPreferences("ethernet",  Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);   
Log.e("info", "-------------------------------------------------");
Log.e("info", sharedPreferences.getString("conn_mode", ""));
Log.e("info", sharedPreferences.getString("mIpaddr", ""));
Log.e("info", sharedPreferences.getString("mDns", ""));
Log.e("info", sharedPreferences.getString("mProxyIp", ""));
Log.e("info", sharedPreferences.getString("mProxyPort", ""));
Log.e("info", sharedPreferences.getString("mProxyExclusionList", ""));
Log.e("info", "-------------------------------------------------");
  • 最後に/data/data/パスの下のパケット名を表示することによってcomをチェックする.dog.ethernetパッケージ名が存在しないため、正しいパッケージ名に変更するのは正常です.
  • 現在のパケットの下にethernet SharedPreferencesを生成するコードを注釈してから正しいデータを取得することができ、注釈しなければ、取得したデータが現在のパケットの下にあるethernet SharedPreferencesのようで、この問題を特定するのに長い時間がかかった.

  • 結果の取得
    E/info    ( 5353): -------------------------------------------------
    E/info    ( 5353): manual
    E/info    ( 5353): 10.10.10.10
    E/info    ( 5353): 8.8.8.8
    E/info    ( 5353): -------------------------------------------------

    Android.mk
    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_MODULE_TAGS := optional
    
    LOCAL_SRC_FILES := $(call all-java-files-under, com)
    
    LOCAL_PACKAGE_NAME := ethernetCF
    LOCAL_CERTIFICATE := platform
    
    include $(BUILD_PACKAGE)
    
    # Use the folloing include to make our test apk.
    include $(call all-makefiles-under,$(LOCAL_PATH))