2014-03-07 3 views
0

저는 루팅 된 Android 기기 및 시스템 응용 프로그램이 있습니다. 내 응용 프로그램에서 launcher.db 파일을 편집하고 싶습니다. DB를 런처 경로는,android에서 launcher.db를 편집하십시오.

/data/data/com.android.launcher/databases/launcher.db

난 그냥 보통 * .DB 파일처럼이 파일을 편집하는 것을 시도하고있다 하지만 작동하지 않습니다. 이 파일을 편집하려면 어떻게해야합니까?

DBHelper.java 클래스 :

public class DBHelper extends SQLiteOpenHelper{ 
    static final String DATABASE = "/data/data/com.android.launcher/databases/launcher.db"; 
    static final int VERSION = 13; 
    static final String TABLE = "favorites"; 
    static final String TABLE_DEPT = "dept"; 

    static final String C_ID = "_id"; 
    static final String C_TITLE = "title"; 
    static final String C_INTENT = "intent"; 
    static final String C_CONTAINER = "container"; 
    static final String C_SCREEN = "screen"; 
    static final String C_CELL_X = "cellX"; 
    static final String C_CELL_Y = "cellY"; 
    static final String C_SPAN_X = "spanX"; 
    static final String C_SPAN_Y = "spanY"; 
    static final String C_ITEM_TYPE = "itemType"; 
    static final String C_APP_WIDGET_ID = "appWidgetId"; 
    static final String C_IS_SHORTCUT = "isShortcut"; 
    static final String C_ICON_TYPE = "iconType"; 
    static final String C_ICON_PACKAGE = "icon"; 
    static final String C_URI = "uri"; 
    static final String C_DISPLAY_MODE = "displayMode"; 
    static final String C_ICON = "icon"; 
    static final String C_ICON_RESOURCE = "iconResource"; 
    public DBHelper(Context context) { 
     super(context, DATABASE, null, VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 


    } 

public void onDowngrade(SQLiteDatabase db) { 


    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 


    } 

} 

그리고 내 ShortcutInstaller.java 클래스 :

public class ShortcutInstaller { 

    DBHelper helper; 
    SQLiteDatabase db; 



    Context context; 

    public ShortcutInstaller(Context context) { 
     this.context = context; 
    } 

    public void installShortcut() { 
     try 
     { 
      /*Uri data = intent.getData(); 
      String packageName = data.getEncodedSchemeSpecificPart(); 
      Log.i("some", packageName);*/ 
      //Runtime.getRuntime().exec("sqlite3 /data/data/com.android.launcher/databases/launcher.db \"DELETE FROM favorites WHERE _id=100; INSERT INTO favorites VALUES(100,'ImViewer','#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.navigator.imviewer/org.vudroid.core.MainBrowserActivity;end',-100,0,2,3,1,1,0,-1,NULL,0,NULL,NULL,NULL,NULL,NULL);\""); 
      //Log.i("some", "Done1!"); 


      ContentValues values = new ContentValues(); 
      values.put(DBHelper.C_ID, 100); 
      values.put(DBHelper.C_TITLE, "ImViewer"); 
      values.put(DBHelper.C_INTENT, "#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.navigator.imviewer/org.vudroid.core.MainBrowserActivity;end"); 
      values.put(DBHelper.C_CONTAINER, -100); 
      values.put(DBHelper.C_SCREEN, 2); 
      values.put(DBHelper.C_CELL_X, 0); 
      values.put(DBHelper.C_CELL_Y, 2); 
      values.put(DBHelper.C_SPAN_X, 1); 
      values.put(DBHelper.C_SPAN_Y, 1); 
      values.put(DBHelper.C_CELL_X, 0); 
      values.put(DBHelper.C_ITEM_TYPE, 0); 
      values.put(DBHelper.C_APP_WIDGET_ID, -1); 
      values.putNull(DBHelper.C_IS_SHORTCUT); 
      values.put(DBHelper.C_ICON_TYPE, 0); 
      values.putNull(DBHelper.C_ICON_PACKAGE); 
      values.putNull(DBHelper.C_ICON_RESOURCE); 
      values.putNull(DBHelper.C_ICON); 
      values.putNull(DBHelper.C_URI); 
      values.putNull(DBHelper.C_DISPLAY_MODE); 

      // Call insert method of SQLiteDatabase Class and close after 
      // performing task 
      db = helper.getWritableDatabase(); 
      db.insert(DBHelper.TABLE, null, values); 
      db.close(); 


      ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
      Log.i("some", "Done2!"); 
      am.restartPackage("com.android.launcher"); 
      Log.i("some", "Done3!"); 
     }catch (Exception e) 
     { 
      Log.i("some", e.toString()); 
     } 
    } 

} 
+0

@ArtooDetoo 그것을 * .db 파일을 편집 할 수 있음을 의미합니다. 이 코드가있는/sdcard와 같은 다른 폴더에 있습니다. –

+0

@ArtooDetoo 내 질문을 편집했습니다 –

+0

성공 했습니까? 질문이 아직 보류 중입니까? – Drew

답변

2

다음과 같이 솔루션입니다 :

public void executeQuery(int x, int y) 
{ 
    try 
      { 
       String query = getQuery(2, x, y); 
       Runtime.getRuntime().exec(new String[] {"su", "-c", query}); 
      } 
      catch (Exception e) 
      { 
       //do something; 
      } 
} 

    public String getQuery(int screen, int x, int y) 
     { 
      String res = "sqlite3 /data/data/com.android.launcher/databases/launcher.db \"INSERT INTO favorites VALUES ("; 
      res+=currentId; 
      currentId++; 
      res+=",'ImViewer','#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.navigator.imviewer/org.vudroid.core.MainBrowserActivity;end',-100,"; 
      //res+=",'ImViewer','#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;end',-100,"; 
      res+=screen + "," + x + "," +y; 
      res +=",1,1,0,-1,NULL,0,NULL,NULL,NULL,NULL,NULL);\""; 
      return res; 
     } 
관련 문제