diff options
author | Alireza-S.N | 2017-03-05 23:04:17 +0330 |
---|---|---|
committer | Alireza-S.N | 2017-03-05 23:04:17 +0330 |
commit | 728970375b4c89b740cdc802e0ba713c7f63e18f (patch) | |
tree | 0468b7b244eeb12f23e8154535145a5129987ace | |
download | aur-728970375b4c89b740cdc802e0ba713c7f63e18f.tar.gz |
init
-rw-r--r-- | .SRCINFO | 19 | ||||
-rw-r--r-- | PKGBUILD | 27 | ||||
-rwxr-xr-x | apk-preview | 89 | ||||
-rw-r--r-- | apk-preview-ui.glade | 168 |
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="<Enter Value> 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="<Enter Value> 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> |