Handles unreadable $HOME gracefully

- superseeds PR 98 (rscarvalho)
This commit is contained in:
Connor Tumbleson 2015-02-12 08:18:53 -06:00
parent 18790b92e5
commit 3f571bebef
2 changed files with 25 additions and 6 deletions

View File

@ -58,6 +58,7 @@ v2.0.0 (TBA)
-Fixed (issue #702) - Fixed improper handling of MNC_ZERO which caused dupe`d resources
-Fixed (issue #744) - Fixed warnings of "Cleaning up unclosed ZipFile..."
-Fixed (issue #757) - Download gradle binaries over https
-Fixed (issue #402) - Fix issues when running user has no access to $HOME.
-Fixed issue with APKs with multiple dex files.
-Fixed issue with using Apktool without smali/baksmali for ApktoolProperties (Thanks teprrr)
-Fixed issue with non-URI standard characters in apk name (Thanks rover12421)

View File

@ -742,34 +742,50 @@ final public class AndrolibResources {
}
private File getFrameworkDir() throws AndrolibException {
if (mFrameworkDirectory != null) {
return mFrameworkDirectory;
}
String path;
// if a framework path was specified on the command line, use it
if (apkOptions.frameworkFolderLocation != null) {
path = apkOptions.frameworkFolderLocation;
} else if (OSDetection.isMacOSX()) {
path = System.getProperty("user.home") + File.separatorChar + "Library" + File.separatorChar +
"apktool" + File.separatorChar + "framework";
} else {
path = System.getProperty("user.home") + File.separatorChar + "apktool" + File.separatorChar + "framework";
File parentPath = new File(System.getProperty("user.home"));
if (! parentPath.canWrite()) {
LOGGER.severe(String.format("WARNING: Could not write to $HOME (%s), using %s instead...",
parentPath.getAbsolutePath(), System.getProperty("java.io.tmpdir")));
LOGGER.severe("Please be aware this is a volatile directory and frameworks could go missing, " +
"please utilize --frame-path if the default storage directory is unavailable");
parentPath = new File(System.getProperty("java.io.tmpdir"));
}
if (OSDetection.isMacOSX()) {
path = parentPath.getAbsolutePath() + String.format("%1$sLibrary%1$sapktool%1$sframework", File.separatorChar);
} else {
path = parentPath.getAbsolutePath() + String.format("%1$sapktool%1$sframework", File.separatorChar);
}
}
File dir = new File(path);
if (dir.getParentFile() != null && dir.getParentFile().isFile()) {
System.err.println("Please remove file at " + dir.getParentFile());
LOGGER.severe("Please remove file at " + dir.getParentFile());
System.exit(1);
}
if (! dir.exists()) {
if (! dir.mkdirs()) {
if (apkOptions.frameworkFolderLocation != null) {
System.err.println("Can't create Framework directory: " + dir);
LOGGER.severe("Can't create Framework directory: " + dir);
}
throw new AndrolibException("Can't create directory: " + dir);
}
}
mFrameworkDirectory = dir;
return dir;
}
@ -820,6 +836,8 @@ final public class AndrolibResources {
private final static Logger LOGGER = Logger.getLogger(AndrolibResources.class.getName());
private File mFrameworkDirectory = null;
private String mMinSdkVersion = null;
private String mMaxSdkVersion = null;
private String mTargetSdkVersion = null;