package com.lody.virtual.os;
import android.content.Context;
import android.os.Build;
import com.lody.virtual.client.core.VirtualCore;
import com.lody.virtual.helper.utils.FileUtils;
import com.lody.virtual.helper.utils.VLog;
import java.io.File;
/**
* @author Lody
*/
public class VEnvironment {
private static final String TAG = VEnvironment.class.getSimpleName();
private static final File ROOT;
private static final File DATA_DIRECTORY;
private static final File USER_DIRECTORY;
private static final File DALVIK_CACHE_DIRECTORY;
static {
File host = new File(getContext().getApplicationInfo().dataDir);
// Point to: /
ROOT = ensureCreated(new File(host, "virtual"));
// Point to: /data/
DATA_DIRECTORY = ensureCreated(new File(ROOT, "data"));
// Point to: /data/user/
USER_DIRECTORY = ensureCreated(new File(DATA_DIRECTORY, "user"));
// Point to: /opt/
DALVIK_CACHE_DIRECTORY = ensureCreated(new File(ROOT, "opt"));
}
public static void systemReady(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
FileUtils.chmod(ROOT.getAbsolutePath(), FileUtils.FileMode.MODE_755);
FileUtils.chmod(DATA_DIRECTORY.getAbsolutePath(), FileUtils.FileMode.MODE_755);
FileUtils.chmod(getDataAppDirectory().getAbsolutePath(), FileUtils.FileMode.MODE_755);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static Context getContext() {
return VirtualCore.get().getContext();
}
private static File ensureCreated(File folder) {
if (!folder.exists() && !folder.mkdirs()) {
VLog.w(TAG, "Unable to create the directory: %s.", folder.getPath());
}
return folder;
}
public static File getDataUserPackageDirectory(int userId,
String packageName) {
return ensureCreated(new File(getUserSystemDirectory(userId), packageName));
}
public static File getPackageResourcePath(String packgeName) {
return new File(getDataAppPackageDirectory(packgeName), "base.apk");
}
public static File getDataAppDirectory() {
return ensureCreated(new File(getDataDirectory(), "app"));
}
public static File getUidListFile() {
return new File(getSystemSecureDirectory(), "uid-list.ini");
}
public static File getBakUidListFile() {
return new File(getSystemSecureDirectory(), "uid-list.ini.bak");
}
public static File getAccountConfigFile() {
return new File(getSystemSecureDirectory(), "account-list.ini");
}
public static File getPackageListFile() {
return new File(getSystemSecureDirectory(), "packages.ini");
}
/**
*
* @return Virtual storage config file
*/
public static File getVSConfigFile() {
return new File(getSystemSecureDirectory(), "vss.ini");
}
public static File getBakPackageListFile() {
return new File(getSystemSecureDirectory(), "packages.ini.bak");
}
public static File getJobConfigFile() {
return new File(getSystemSecureDirectory(), "job-list.ini");
}
public static File getDalvikCacheDirectory() {
return DALVIK_CACHE_DIRECTORY;
}
public static File getOdexFile(String packageName) {
return new File(DALVIK_CACHE_DIRECTORY, "data@app@" + packageName + "-1@base.apk@classes.dex");
}
public static File getDataAppPackageDirectory(String packageName) {
return ensureCreated(new File(getDataAppDirectory(), packageName));
}
public static File getPackageCacheFile(String packageName) {
return new File(getDataAppPackageDirectory(packageName), "package.ini");
}
public static File getSignatureFile(String packageName) {
return new File(getDataAppPackageDirectory(packageName), "signature.ini");
}
public static File getUserSystemDirectory() {
return USER_DIRECTORY;
}
public static File getUserSystemDirectory(int userId) {
return new File(USER_DIRECTORY, String.valueOf(userId));
}
public static File getDataDirectory() {
return DATA_DIRECTORY;
}
public static File getSystemSecureDirectory() {
return ensureCreated(new File(getDataAppDirectory(), "system"));
}
public static File getPackageInstallerStageDir() {
return ensureCreated(new File(DATA_DIRECTORY, ".session_dir"));
}
}