0

アプリのアセット フォルダーから /system フォルダーにファイルをコピーする方法を誰か親切に教えてもらえますか? ルートアクセスを取得する方法とすべてを知っています。例: 「/assets/lib/libs.so」からファイルをコピーし、このファイルが既に存在するかどうかを確認し、存在する場合は新しい「/system/lib/libs.so」に置き換えます。

4

2 に答える 2

0

これにより、ファイルが存在するかどうかが確認され、削除されてから、アセットにあるすべてがコピーされます。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



   File exists = new File("/system/lib/libs.so");
   if(exists.exists()){       
   exists.delete();
   CopyAssets();
   }else{
       CopyAssets();
   }


}


private void CopyAssets() { 
    AssetManager assetManager = getAssets(); 
    String[] files = null; 
    try { 
        files = assetManager.list(""); 
    } catch (IOException e) { 
        Log.e("tag", e.getMessage()); 
    } 
    for(String filename : files) { 
        InputStream in = null; 
        OutputStream out = null; 
        try { 
          in = assetManager.open(filename); 
          out = new FileOutputStream("/system/lib/" + filename);
          copyFile(in, out); 
          in.close(); 
          in = null; 
          out.flush(); 
          out.close(); 
          out = null; 
        } catch(Exception e) { 
            Log.e("tag", e.getMessage()); 
        }        
    }

} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
      out.write(buffer, 0, read); 
    } 
}

編集:

ファイルシステムのマニフェスト ファイルでこのアクセス許可を宣言します。

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
于 2012-09-01T08:28:07.390 に答える
0

これを試して:

try {
    File from = new File( "/assets/lib/libs.so" );
    File to = new File( "/system/lib/libs.so" );
    if( from.exists() && to.exists() ) {
        FileInputStream is = new FileInputStream( from );
        FileOutputStream os = new FileOutputStream( to );
        FileChannel src = is.getChannel();
        FileChannel dst = os.getChannel();
        dst.transferFrom( src, 0, src.size() );
        src.close();
        dst.close();
        is.close();
        os.close();
    }
} catch( Exception e ) {
}
于 2012-09-01T08:19:55.200 に答える