summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlireza-S.N2017-03-05 23:04:17 +0330
committerAlireza-S.N2017-03-05 23:04:17 +0330
commit728970375b4c89b740cdc802e0ba713c7f63e18f (patch)
tree0468b7b244eeb12f23e8154535145a5129987ace
downloadaur-728970375b4c89b740cdc802e0ba713c7f63e18f.tar.gz
init
-rw-r--r--.SRCINFO19
-rw-r--r--PKGBUILD27
-rwxr-xr-xapk-preview89
-rw-r--r--apk-preview-ui.glade168
4 files changed, 303 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..0eea2c3dac79
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,19 @@
+pkgbase = apk-preview
+ pkgdesc = A graphical user interface to see APK file details & icon
+ pkgver = 1
+ pkgrel = 1
+ arch = any
+ license = GPL3
+ makedepends = git
+ depends = python
+ depends = python-requests
+ depends = ,python-gobject
+ provides = apk-preview
+ provides = apk-preview
+ conflicts = apk-preview
+ conflicts = apk-preview
+ source = apk-preview::git+https://github.com/alireza6677/apk-preview.git
+ md5sums = SKIP
+
+pkgname = apk-preview
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..f9a25b7fb43c
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,27 @@
+pkgname='apk-preview'
+pkgver=1
+pkgrel=1
+pkgdesc="A graphical user interface to see APK file details & icon"
+arch=('any')
+license=('GPL3')
+depends=( 'python' 'python-requests' ,'python-gobject')
+makedepends=('git')
+provides=("${pkgname}" "apk-preview")
+conflicts=("${pkgname}" "apk-preview")
+source=("${pkgname}::git+https://github.com/alireza6677/apk-preview.git")
+md5sums=('SKIP')
+
+pkgver() {
+ cd "$srcdir/${pkgname}"
+
+}
+
+prepare() {
+ cd "${srcdir}/${pkgname}"
+ mkdir /opt/apk-preview
+}
+package() {
+ cd "${srcdir}/${pkgname}"
+ cp -a ./* ${pkgdir}/opt/apk-preview/
+}
+
diff --git a/apk-preview b/apk-preview
new file mode 100755
index 000000000000..11bee505b5f1
--- /dev/null
+++ b/apk-preview
@@ -0,0 +1,89 @@
+#!/usr/bin/python3
+
+import gi , os , sys , subprocess
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk , GdkPixbuf
+
+class ListBoxRowWithData(Gtk.ListBoxRow):
+ def __init__(self, data):
+ super(Gtk.ListBoxRow, self).__init__()
+ self.data = data
+ self.label = Gtk.Label(data)
+ self.label.set_alignment(0,0.5)
+ self.label.set_size_request(25,25)
+ self.add(self.label)
+
+class Test (object):
+
+ def __init__(self):
+ self.builder = Gtk.Builder()
+ path = os.path.dirname(os.path.realpath(__file__))
+ #path="/usr/share/apk-preview"
+ self.builder.add_from_file(path+"/apk-preview-ui.glade")
+ self.builder.connect_signals(self)
+
+ def run(self, *args):
+ self.window = self.builder.get_object("window1")
+ self.name = self.builder.get_object("name")
+ self.name.set_alignment(0,0.5)
+ self.name.set_text(appname)
+ self.ver = self.builder.get_object("ver")
+ self.ver.set_alignment(0,0.5)
+ self.vc = self.builder.get_object("vc")
+ self.vc.set_alignment(0,0.5)
+ self.min = self.builder.get_object("min")
+ self.min.set_alignment(0,0.5)
+ self.pkg = self.builder.get_object("package")
+ self.pkg.set_alignment(0,0.5)
+ self.ver.set_text("Version: " + version)
+ self.vc.set_text("Version code : " + versioncode)
+ self.min.set_text("Min sdk: " + minsdk)
+ self.pkg.set_text(package);
+ self.window.show()
+ self.window.connect("delete-event", self.quit)
+ # self.btn = self.builder.get_object('btn')
+ # self.btn.connect("clicked" , self.quit)
+
+ self.list = self.builder.get_object("list")
+ for p in perms:
+ self.list.add(ListBoxRowWithData(p))
+ def filter_func(row, data, notify_destroy):
+ return False if row.data == "" or row.data == " " else True
+
+ self.list.set_filter_func(filter_func, None, False)
+ self.list.show_all()
+
+ self.img = self.builder.get_object("icon")
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(icontmp, width=96, height=96,
+ preserve_aspect_ratio=False)
+ self.img.set_from_pixbuf(pixbuf)
+
+ Gtk.main()
+
+ def quit(self, *args):
+ os.remove(icontmp)
+ self.window.hide()
+ Gtk.main_quit()
+
+if __name__ == "__main__":
+ if len(sys.argv) < 2 :
+ print("You must specify an apk file");
+ exit(1)
+ apkFile=sys.argv[1]
+
+# print(apkFile)
+ perms=os.popen('aapt d badging "' + apkFile +'" | grep uses-permission | sed "s/.*://" | sed "s/.*=//" | sed "s/\'//g" ').read()
+ perms=perms.split('\n')
+# print(perms)
+ appname=os.popen('aapt d badging "' + apkFile + '" | grep application-label | head -1 | sed -e "s/.*://g" -e "s/\'//g" ').read().replace('\n' , "")
+ version=os.popen('aapt d badging "' + apkFile + '" | grep versionName | sed -e "s/.*=//g" -e "s/\'//g" ' ).read()
+ versioncode=os.popen('aapt d badging "' + apkFile + '" | grep versionCode | sed -e "s/.*versionCode=//g" -e "s/versionName=.*//g" -e "s/\'//g"').read()
+ minsdk=os.popen('aapt d badging "' + apkFile +'" | grep sdkVersion | sed -e "s/sdkVersion://" -e "s/\'//g"').read()
+ package=os.popen('aapt d badging "' + apkFile +'" | grep package | cut -d" " -f2 | sed -e "s/.*=//" -e "s/\'//g" ').read()
+
+ icon=os.popen('aapt d badging "' + apkFile +'" | grep application-icon | tail -1 | sed -e "s/.*://" -e "s/\'//g"').read().replace('\n' , "")
+ iconp=os.popen('aapt d badging "' + apkFile +'" | grep application-icon | tail -1 | sed -e "s/.*://" -e "s/\'//g" -e "s/.*\///g" ').read().replace('\n' , "")
+ icontmp=os.popen('mktemp -t XXXXXXX.png').read().replace('\n' , "")
+# print(icontmp)
+ os.system('unzip -j "' + apkFile + '" ' + icon + ' -d /tmp/ && mv /tmp/' +iconp + " " + icontmp)
+ Test().run() \ No newline at end of file
diff --git a/apk-preview-ui.glade b/apk-preview-ui.glade
new file mode 100644
index 000000000000..59dffab73c0e
--- /dev/null
+++ b/apk-preview-ui.glade
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.0 -->
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <object class="GtkApplicationWindow" id="window1">
+ <property name="can_focus">False</property>
+ <property name="resizable">False</property>
+ <property name="default_width">400</property>
+ <property name="default_height">370</property>
+ <child>
+ <object class="GtkNotebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkFixed">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="icon">
+ <property name="width_request">96</property>
+ <property name="height_request">96</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-missing-image</property>
+ </object>
+ <packing>
+ <property name="x">7</property>
+ <property name="y">12</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="width_request">235</property>
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">App Name</property>
+ <property name="single_line_mode">True</property>
+ <attributes>
+ <attribute name="font-desc" value="&lt;Enter Value&gt; 18"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="x">110</property>
+ <property name="y">12</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="package">
+ <property name="width_request">200</property>
+ <property name="height_request">30</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">package</property>
+ <attributes>
+ <attribute name="font-desc" value="&lt;Enter Value&gt; 12"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="x">110</property>
+ <property name="y">55</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ver">
+ <property name="width_request">200</property>
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">version</property>
+ </object>
+ <packing>
+ <property name="x">10</property>
+ <property name="y">120</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="vc">
+ <property name="width_request">200</property>
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">version code</property>
+ </object>
+ <packing>
+ <property name="x">10</property>
+ <property name="y">160</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="min">
+ <property name="width_request">200</property>
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">min sdk</property>
+ </object>
+ <packing>
+ <property name="x">10</property>
+ <property name="y">200</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Info</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkListBox" id="list">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Permissions</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child type="tab">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="title">Apk-Preview</property>
+ <property name="show_close_button">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>