Skip to content

Commit

Permalink
Allow choosing whether to decompile smali/resources/java or not.
Browse files Browse the repository at this point in the history
  • Loading branch information
vaibhavpandeyvpz committed May 26, 2019
1 parent 605ac3b commit fb6caa3
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 13 deletions.
22 changes: 18 additions & 4 deletions sources/apkdecompiledialog.cpp
Expand Up @@ -14,7 +14,7 @@ ApkDecompileDialog::ApkDecompileDialog(const QString &apk, QWidget *parent)
layout->addWidget(buildButtonBox());
layout->setContentsMargins(4, 4, 4, 4);
layout->setSpacing(2);
setMinimumSize(320, 160);
setMinimumSize(340, 160);
#ifdef Q_OS_WIN
setWindowIcon(QIcon(":/icons/fugue/android.png"));
#endif
Expand Down Expand Up @@ -51,7 +51,11 @@ QLayout *ApkDecompileDialog::buildForm(const QString &apk)
empty->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
child->addWidget(empty);
layout->addRow("", child);
layout->addRow(tr("Decompile Java?"), m_CheckSources = new QCheckBox(this));
layout->addRow(tr("Decompile smali?"), m_CheckSmali = new QCheckBox(this));
m_CheckSmali->setChecked(true);
layout->addRow(tr("Decompile resources?"), m_CheckResources = new QCheckBox(this));
m_CheckResources->setChecked(true);
layout->addRow(tr("Decompile java?"), m_CheckJava = new QCheckBox(this));
layout->setSpacing(2);
return layout;
}
Expand All @@ -73,7 +77,17 @@ void ApkDecompileDialog::handleBrowseFolder()
}
}

bool ApkDecompileDialog::sources() const
bool ApkDecompileDialog::java() const
{
return m_CheckSources->isChecked();
return m_CheckJava->isChecked();
}

bool ApkDecompileDialog::resources() const
{
return m_CheckResources->isChecked();
}

bool ApkDecompileDialog::smali() const
{
return m_CheckSmali->isChecked();
}
8 changes: 6 additions & 2 deletions sources/apkdecompiledialog.h
Expand Up @@ -13,10 +13,14 @@ class ApkDecompileDialog : public QDialog
explicit ApkDecompileDialog(const QString &apk, QWidget *parent = nullptr);
QString apk() const;
QString folder() const;
bool sources() const;
bool java() const;
bool resources() const;
bool smali() const;
private:
QDialogButtonBox *m_ButtonBox;
QCheckBox *m_CheckSources;
QCheckBox *m_CheckJava;
QCheckBox *m_CheckResources;
QCheckBox *m_CheckSmali;
QLineEdit *m_EditApk;
QLineEdit *m_EditFolder;
QWidget *buildButtonBox();
Expand Down
15 changes: 11 additions & 4 deletions sources/apkdecompileworker.cpp
Expand Up @@ -2,8 +2,8 @@
#include "apkdecompileworker.h"
#include "processutils.h"

ApkDecompileWorker::ApkDecompileWorker(const QString &apk, const QString &folder, const bool sources, QObject *parent)
: QObject(parent), m_Apk(apk), m_Folder(folder), m_Sources(sources)
ApkDecompileWorker::ApkDecompileWorker(const QString &apk, const QString &folder, const bool smali, const bool resources, const bool java, QObject *parent)
: QObject(parent), m_Apk(apk), m_Folder(folder), m_Java(java), m_Resources(resources), m_Smali(smali)
{
}

Expand All @@ -24,7 +24,14 @@ void ApkDecompileWorker::decompile()
heap = heap.arg(QString::number(ProcessUtils::javaHeapSize()));
QStringList args;
args << heap << "-jar" << apktool;
args << "d" << "-o" << m_Folder << m_Apk;
args << "d";
if (!m_Smali) {
args << "-s";
}
if (!m_Resources) {
args << "-r";
}
args << "-o" << m_Folder << m_Apk;
ProcessResult result = ProcessUtils::runCommand(java, args);
#ifdef QT_DEBUG
qDebug() << "Apktool returned code" << result.code;
Expand All @@ -33,7 +40,7 @@ void ApkDecompileWorker::decompile()
emit decompileFailed(m_Apk);
return;
}
if (m_Sources) {
if (m_Java) {
emit decompileProgress(75, tr("Running jadx..."));
const QString jadx = ProcessUtils::jadxExe();
if (jadx.isEmpty()) {
Expand Down
6 changes: 4 additions & 2 deletions sources/apkdecompileworker.h
Expand Up @@ -7,12 +7,14 @@ class ApkDecompileWorker : public QObject
{
Q_OBJECT
public:
explicit ApkDecompileWorker(const QString &apk, const QString &folder, const bool sources, QObject *parent = nullptr);
explicit ApkDecompileWorker(const QString &apk, const QString &folder, const bool smali, const bool resources, const bool java, QObject *parent = nullptr);
void decompile();
private:
QString m_Apk;
QString m_Folder;
bool m_Sources;
bool m_Java;
bool m_Resources;
bool m_Smali;
signals:
void decompileFailed(const QString &apk);
void decompileFinished(const QString &apk, const QString &folder);
Expand Down
2 changes: 1 addition & 1 deletion sources/mainwindow.cpp
Expand Up @@ -375,7 +375,7 @@ void MainWindow::handleActionApk()
auto dialog = new ApkDecompileDialog(QDir::toNativeSeparators(path), this);
if (dialog->exec() == QDialog::Accepted) {
auto thread = new QThread();
auto worker = new ApkDecompileWorker(dialog->apk(), dialog->folder(), dialog->sources());
auto worker = new ApkDecompileWorker(dialog->apk(), dialog->folder(), dialog->smali(), dialog->resources(), dialog->java());
worker->moveToThread(thread);
connect(worker, &ApkDecompileWorker::decompileFailed, this, &MainWindow::handleDecompileFailed);
connect(worker, &ApkDecompileWorker::decompileFinished, this, &MainWindow::handleDecompileFinished);
Expand Down

0 comments on commit fb6caa3

Please sign in to comment.