![]() |
#1 |
Member
![]() Posts: 19
Karma: 58
Join Date: Oct 2013
Device: Kobo Glo, Kobo Wireless
|
Android on Glo
My googling produced an interesting find yesterday:
http://naberius.de/category/linux/programming/kernel/ Hecke has torn down a 99 euro Android reader from Germany called the Tolino Shine. Investigation of his pictures revealed that the hardware is very similar to the Glo. Not just the same parts, but the reference designators on the PWB are identical to my Glo. Hecke was kind enough to post an image of the microsd in his Shine. I installed it in my Glo and it seems to work perfectly. It would be even better if I could read German ![]() [Image violates Posting Guidelines for size - MODERATOR] The frontlight button on the Glo is mapped the Android "home" or "back" button. The interface appears to be a custom apk running on the android. Hopefully it can be hacked for standard apks and a different UI. I'm not much of an android hacker but I suddenly have motivation ![]() I think battery life of a Glo running android would not be good. The battery in the Hecke's Shine appears to be at least 2x the size as what my Glo has. I imagine that the Glo firmware will run on the Shine. Don't have one (yet) but 2x the battery for a Glo would be nice. I imagine they'll start showing up used at some point. The shine does have an update process similar to the Kobo except that they 'dd' images directly onto the internal microsd rather than extracting a tarball over the mounted root. I am thinking it should be possible to load Glo firmware on it without opening the case (Hecke comments that this is a pain due to the use of glue). I imagine there are other readers out there with compatible hardware. Has anyone else noticed other examples? Last edited by Dr. Drib; 01-10-2017 at 05:21 AM. |
![]() |
![]() |
![]() |
#2 |
Android Developer
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 16
Karma: 9304
Join Date: Jun 2013
Device: Kobo Glo
|
Hi,
Im downloading this now, very interesting and a good find ![]() I'm an Android developer and know a lot about reverse engineering apk files into smali language and then editing the smali so I'd be interested in helping out on this in my spare time ![]() Last edited by JonnyXDA; 10-30-2013 at 12:55 PM. |
![]() |
![]() |
Advert | |
|
![]() |
#3 |
Member
![]() Posts: 19
Karma: 58
Join Date: Oct 2013
Device: Kobo Glo, Kobo Wireless
|
Jonny,
Sounds great. I don't really know where to start. I'd love to be able to use android text note and keyboard aps on my reader. That would allow me to leave one of my 3 regularly carried devices at home ![]() Google gives me too many results. How does one get started "opening" a closed android like this? -SyreKron |
![]() |
![]() |
![]() |
#4 |
Time Waster
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 422
Karma: 289160
Join Date: May 2011
Device: Kobo Glo and Aura HD
|
Great find!!! Could you mirror the image in case it is put down? I'm not able to download it right now and I jon't want to miss the opportunity
![]() |
![]() |
![]() |
![]() |
#5 |
Enthusiast
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 35
Karma: 946
Join Date: Mar 2013
Device: Kobo Mini
|
Its posible make image for Mini? I try write backup_internal_sd_shine_after_sys_recover into kobo mini and not work.
|
![]() |
![]() |
Advert | |
|
![]() |
#6 |
Member
![]() Posts: 19
Karma: 58
Join Date: Oct 2013
Device: Kobo Glo, Kobo Wireless
|
@giorgio130:
Right. I've got the file and I think JonnyXDA does also. I'm sure someone will be able to mirror it if the original goes down. So, I've been poking at the android load and managed to get a shell on it over adb using windows 7 (64-bit). Should be able to install and remove apks now. For anyone interested I downloaded the Android SDK for windows from http://developer.android.com/sdk/index.html and got it up and running. I followed the instructions on Hecke's blog post about enabling adb in the update script on the first linux partition on the microsd card. I did it the easy way by using a card reader and a linux pc. Next I obtained the "oem" adb driver from http://developer.android.com/tools/extras/oem-usb.html. I added the following lines to android_winusb.inf in the [Google.NTamd64] section. I presume adding them to the [Google.NTx86] section would allow installation on an 32-bit platform as well. Code:
;Tolino Shine %CompositeAdbInterface% = USB_Install, USB\VID_1F85&PID_1689&MI_01 %CompositeAdbInterface% = USB_Install, USB\VID_1F85&PID_1689&REV_0226MI_01 The final modification was to create a file called "adb_usb.ini" in the .android directory in my user folder. Without it adb doesn't notice the installed adb device and will refuse to discover it on its own. Contents of this file Code:
0x1F85 ![]() |
![]() |
![]() |
![]() |
#7 | |
Member
![]() Posts: 19
Karma: 58
Join Date: Oct 2013
Device: Kobo Glo, Kobo Wireless
|
Quote:
Provided you correctly wrote the image to your sd card....I don't think I can offer much help right now. (I'm still pretty new at this myself!) ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Android Developer
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 16
Karma: 9304
Join Date: Jun 2013
Device: Kobo Glo
|
Quote:
Personally I use Virtuous Ten Studio made by a developer team on XDA. However, for first time users I would recommend using straight apktool.jar file as VTS is mainly for advanced users. apktool is available free and opensource from here and is called from a command prompt (java -jar apktool.jar d apkname.apk). A guide to using apktool (the commands have been incorporated into batch files to save typing it every time) can be found here Apk files consist of 2 parts, code and resources. Resources are your images, layouts, xml preferences, integers, strings, arrays etc. If you add something to the resources you must also create a new hex value for it in res/values/public.xml The code part once decompiled is in a language called smali which is basically the dalvik bytecode (or an easier way of thinking of it is java's version of ASM) and its not the easiest language to understand, the below sample is part of a hack or modification that allows the current foreground application to be killed and removed from RAM by long pressing the back key, this is just to give you an example of what smali code looks like with regards its function: Code:
.method private launchBackKeyLongPressAction()V .locals 18 const/4 v1, 0x0 const/4 v2, 0x0 :try_start_0 move-object/from16 v0, p0 invoke-virtual {v0, v1, v2, v2}, Lcom/android/internal/policy/impl/PhoneWindowManager;->performHapticFeedbackLw(Landroid/view/WindowManagerPolicy$WindowState;IZ)Z invoke-static {}, Landroid/app/ActivityManagerNative;->getDefault()Landroid/app/IActivityManager; move-result-object v9 invoke-interface {v9}, Landroid/app/IActivityManager;->getRunningAppProcesses()Ljava/util/List; move-result-object v5 move-object/from16 v0, p0 iget-object v14, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context; const-string v15, "activity" invoke-virtual {v14, v15}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v2 check-cast v2, Landroid/app/ActivityManager; const/4 v14, 0x1 invoke-virtual {v2, v14}, Landroid/app/ActivityManager;->getRunningTasks(I)Ljava/util/List; move-result-object v12 const/4 v14, 0x0 invoke-interface {v12, v14}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v14 check-cast v14, Landroid/app/ActivityManager$RunningTaskInfo; iget-object v6, v14, Landroid/app/ActivityManager$RunningTaskInfo;->topActivity:Landroid/content/ComponentName; invoke-interface {v5}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v14 :cond_0 :goto_0 invoke-interface {v14}, Ljava/util/Iterator;->hasNext()Z move-result v15 if-nez v15, :cond_2 :cond_1 :goto_1 return-void :cond_2 invoke-interface {v14}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, Landroid/app/ActivityManager$RunningAppProcessInfo; iget v13, v3, Landroid/app/ActivityManager$RunningAppProcessInfo;->uid:I const/16 v15, 0x2710 if-lt v13, v15, :cond_0 const v15, 0x1869f if-gt v13, v15, :cond_0 iget v15, v3, Landroid/app/ActivityManager$RunningAppProcessInfo;->importance:I const/16 v16, 0x64 move/from16 v0, v16 if-ne v15, v0, :cond_0 iget-object v15, v3, Landroid/app/ActivityManager$RunningAppProcessInfo;->pkgList:[Ljava/lang/String; if-eqz v15, :cond_0 invoke-interface {v5}, Ljava/util/List;->size()I move-result v15 if-lez v15, :cond_0 iget-object v15, v3, Landroid/app/ActivityManager$RunningAppProcessInfo;->processName:Ljava/lang/String; invoke-virtual {v6}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String; move-result-object v16 invoke-virtual/range {v15 .. v16}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v15 if-eqz v15, :cond_0 new-instance v8, Landroid/content/Intent; const-string v15, "android.intent.action.MAIN" invoke-direct {v8, v15}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V const-string v15, "android.intent.category.HOME" invoke-virtual {v8, v15}, Landroid/content/Intent;->addCategory(Ljava/lang/String;)Landroid/content/Intent; move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context; invoke-virtual {v15}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager; move-result-object v15 const/16 v16, 0x0 move/from16 v0, v16 invoke-virtual {v15, v8, v0}, Landroid/content/pm/PackageManager;->resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo; move-result-object v11 iget-object v15, v11, Landroid/content/pm/ResolveInfo;->activityInfo:Landroid/content/pm/ActivityInfo; iget-object v15, v15, Landroid/content/pm/ActivityInfo;->processName:Ljava/lang/String; iget-object v0, v3, Landroid/app/ActivityManager$RunningAppProcessInfo;->processName:Ljava/lang/String; move-object/from16 v16, v0 invoke-virtual/range {v15 .. v16}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v15 if-nez v15, :cond_1 move-object/from16 v0, p0 iget-object v15, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context; invoke-virtual {v15}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager; :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 move-result-object v10 :try_start_1 invoke-virtual {v6}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String; move-result-object v15 const/16 v16, 0x0 move/from16 v0, v16 invoke-virtual {v10, v15, v0}, Landroid/content/pm/PackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo; :try_end_1 .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_1 move-result-object v1 :goto_2 if-eqz v1, :cond_3 :try_start_2 invoke-virtual {v10, v1}, Landroid/content/pm/PackageManager;->getApplicationLabel(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence; move-result-object v4 :goto_3 check-cast v4, Ljava/lang/String; invoke-virtual {v6}, Landroid/content/ComponentName;->getPackageName()Ljava/lang/String; move-result-object v15 invoke-static {}, Landroid/os/UserHandle;->myUserId()I move-result v0 invoke-interface {v9, v15, v0}, Landroid/app/IActivityManager;->forceStopPackage(Ljava/lang/String;I)V iget v15, v3, Landroid/app/ActivityManager$RunningAppProcessInfo;->pid:I invoke-static {v15}, Landroid/os/Process;->killProcess(I)V new-instance v16, Ljava/lang/StringBuilder; invoke-static {v4}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String; move-result-object v17 invoke-direct/range {v16 .. v17}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V const-string v17, " killed." invoke-virtual/range {v16 .. v17}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v16 invoke-virtual/range {v16 .. v16}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v16 move-object/from16 v0, p0 move-object/from16 v3, v16 iput-object v3, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mKillMessage:Ljava/lang/String; const-string v0, "DarkSense" invoke-static {v0, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I move-object/from16 v0, p0 iget-object v2, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler; iget-object v3, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mKill_Toast:Ljava/lang/Runnable; invoke-static {}, Landroid/view/ViewConfiguration;->getGlobalActionKeyTimeout()J move-result-wide v7 invoke-virtual {v2, v3, v7, v8}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z goto/16 :goto_0 :catch_0 move-exception v14 goto/16 :goto_1 :catch_1 move-exception v7 const/4 v1, 0x0 goto :goto_2 :cond_3 const-string v4, "(unknown)" :try_end_2 .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_0 goto :goto_3 move-exception v0 const-string v2, "WindowManager" const-string v3, "No activity to handle backkey action." invoke-static {v2, v3, v0}, Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I goto/16 :goto_1 .end method |
|
![]() |
![]() |
![]() |
#9 |
Android Developer
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 16
Karma: 9304
Join Date: Jun 2013
Device: Kobo Glo
|
|
![]() |
![]() |
![]() |
#10 | |
Android Developer
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 16
Karma: 9304
Join Date: Jun 2013
Device: Kobo Glo
|
Quote:
9a9427be4988ac7050c77a9a023f0c1e 673 backup_internal_sd_shine_after_sys_recover.img.gz If so then I can upload a mirror ![]() |
|
![]() |
![]() |
![]() |
#11 | |
Member
![]() Posts: 19
Karma: 58
Join Date: Oct 2013
Device: Kobo Glo, Kobo Wireless
|
Quote:
Doesn't this copy the contents of the /system directory to the PC? Is there some benefit to doing this over ADB versus reading the sd card or the image file directly?? |
|
![]() |
![]() |
![]() |
#12 | |
Android Developer
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 16
Karma: 9304
Join Date: Jun 2013
Device: Kobo Glo
|
Quote:
I'm going to deodex it so we can edit the apk's and jars then upload the raw system folder with no other changes for now. |
|
![]() |
![]() |
![]() |
#13 |
Enthusiast
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 35
Karma: 946
Join Date: Mar 2013
Device: Kobo Mini
|
Image is 8GB after write. Use imagewriter, but on mini dont work.
|
![]() |
![]() |
![]() |
#14 | |
Member
![]() Posts: 19
Karma: 58
Join Date: Oct 2013
Device: Kobo Glo, Kobo Wireless
|
Quote:
I'm not really surprised that it doesn't work. I would expect that the minor hardware differences between the Glo and the Mini could cause it to not work. This android image isn't like the Kobo firmware that works on multiple devices. I expect Kobo went to a great deal of effort to keep the firmware compatible between different devices whereas Tolino only has one device (AFAIK) to support. As for Shine images for the Mini....Someone else may be able to make it work on the Mini but I'm not able to at this point. I'm still somewhat new to the scene myself. Best of luck! |
|
![]() |
![]() |
![]() |
#15 |
Addict
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 348
Karma: 209937
Join Date: Jan 2012
Location: Virginia, US
Device: Kobo Wifi, Kobo Glo
|
This is awesome! This website has rooting directions for the Tolino Shine, it should work on the Kobo Shine as well.
Edit: And I'm rooted! Last edited by KevinShort; 10-30-2013 at 10:59 PM. |
![]() |
![]() |
![]() |
Tags |
android, glo, kobo, shine, tolino |
Thread Tools | Search this Thread |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Glo Synchronizing my own books between Kobo Glo and Kobo Android | ploum | Kobo Reader | 35 | 01-07-2015 06:28 PM |
kobo glo / android phone not detected | danieldo | Devices | 2 | 02-02-2013 12:28 PM |
Glo Screen durability of the glo..is it better than the Nook Glo?? | Tony1988 | Kobo Reader | 4 | 01-10-2013 07:38 PM |
Glo Can kobo glo run android app such as nook glo? | suspect | Kobo Developer's Corner | 1 | 12-28-2012 11:25 PM |
Released 14 HoneyComb ROM MOD for Android OS 1.6 /Android OS 2.1 HCV13.0 B20 | tipstir | Android Devices | 0 | 05-20-2011 02:59 AM |