Androidアプリケーションを実行しているとき、そのデータベースはエミュレータの内部メモリに直接保存されます。アプリケーション (.apk ファイル) は外部ストレージに保存されます。データベースのサイズは 230MB です。manifest.xml に次の行があります。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<manifest android:installLocation="preferExternal" >
そして、エラー INSTALL_FAILED_DEXOPT が発生する次のコード:
public void copyDatabase() throws IOException
{
if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
{
Toast.makeText(mycontext,"External Sd card not mounted", Toast.LENGTH_LONG).show();
}
try
{
InputStream in=mycontext.getAssets().open("Demo.db");
File outFile =new File(Environment.getExternalStorageDirectory()+File.separator+ "Demo.db);
outFile.createNewFile();
OutputStream out= new FileOutputStream(outFile);
byte[] buf = new byte[1024];
int len;
while((len = in.read(buf))> 0)
{
out.write(buf,0,len);
}
out.close();
in.close();
Log.i("copyDatabase","Database Has been transferred");
}
catch(IOException e)
{
Log.i("CopyDatabase","could not copy database");
}
}
public boolean checkDatabase()
{
SQLiteDatabase checkdb=null;
try
{
String myPath="/sdcard/demo.db";
checkdb=SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
Log.i("checkDatabase database path",checkdb.getPath());
}
catch(SQLiteException e)
{
Log.e("Database doesn`t exist",e.toString());
}
if(checkdb!=null)
{
checkdb.close();
}
return checkdb != null ? true : false;
}
public void openDatabase() throws SQLException
{
String myPath="/sdcard/demo.db"
myDatabase=SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}