Cyanogen is the new Canonical - should we back a new ROM? - Android General

I’ve been a CyanogenMod user since CM6 for the HTC EVO. While I can’t claim to have contributed much directly to the community (I’m no developer and more of a sys admin kind of guy), I have installed CM on countless phones over the years - basically any friend or family member who sat their phone down long enough. As soon as it was available, I snagged a OnePlus One, and it’s still the phone I have today. While I was initially excited to see where the foundation of Cyanogen Inc. would take the project, I’ve become increasingly disappointed with the direction that things have gone (both CM and COS), and I think my next phone will likely be a Nexus device with stock Android. I’m fairly certain that this post won’t accomplish much (aside from starting a flame-war/trolling/what-have-you), but I thought I would post it just to see what might come of it.
What I initially loved about CM was the fact that it added a number of useful features to stock Android, it allowed a ton of functional customization, it seemed to be more efficient and stable, and it let me continue to update devices that manufacturers had artificially sunsetted. I was impressed by the fact that lead developers were more interested in code quality and security than by shiny features. Amidst the desire to make Android better, there was also a sense of perfectionism to CM as evidenced by the “don’t ask for ETAs” mantra - it would get done when it was ready, and I was always willing to wait.
When Cyanogen Inc. formed, I was curious to see how they planned to make money. I actually decided to be a bit bold, contacted Kirt and Steve via LinkedIn, and offered to share some of my ideas. One of my biggest suggestions was that they should do something to fill the gaping hole left by Blackberry. At that point (and even still today), no manufacturer had really been able to provide the enterprise-grade functionality provided by Blackberry and BES. MDM solutions were (and are) a double-edged sword that are really just a patch for the solution. Given the huge priority that Cyanogen placed on security, I thought it would be a good direction to take. I’ve sent a few other suggestions over the years (including attempting to get the OnePlus One on the shelves at Walmart when I worked at the corporate offices), but it never seemed to go anywhere.
Right now, when I wake my phone, I have a reminder that there is a system update ready for my OnePlus One that will install COS 13.1. This update adds “new mods for Cortana, OneNote, Microsoft Hyperlapse, Skype, and Twitter.” I have yet to hit install. My issue is far less that Cyanogen is working with Microsoft and more with the fact that the company, much like Canonical/Ubuntu, seems to have the not-invented-here syndrome. (Side note: here’s a great article from the Turnkey Linux team that serves as partial inspiration for this post https://www.turnkeylinux.org/blog/ubuntu-not-invented-here-syndrome). Instead of offering new and useful features, Cyanogen is reinventing wheels and cramming the OS full of things that aren’t really at the top of anyone’s list for issues that could be solved or features that could be added. The innovation just seems to be gone. Most of the features that were exclusive to CM and drew me to the project are now part of stock Android. It makes me wish Cyanogen had taken up Google on their $1B offer.
Here are a few examples. Who remembers when ADW was the stock launcher of CM? I do. In contrast, who actually uses Trebuchet? I think it’s a featureless piece of junk. No gestures? No ability to hide icons in the drawer? No useful functionality that really sets it apart from other launchers? Why develop something new just for the sake of doing it yourself when it only provides basic functionality? Right up there with it is the File Manager application. There are plenty of other more feature-rich applications on the market, and I frankly never use the app provided by Cyanogen because it isn’t nearly as functional as something like ES File Explorer.
Similarly (but more egregiously), is the Browser application. Show of hands: who uses the browser provided in AOSP? No? Me, neither. Be it Chrome, Firefox, Opera, or something else, no one uses the browser built into the ROM. Why did Cyanogen feel the need to create another browser that lacks functionality, is rarely updated for security patches like mainstream offerings, and is basically just another piece of lint on everyone's phones? I fail to see the innovation, there.
I initially loved the idea of having a Cyanogen Account because it was pre-Google Device Manager. However, now that Device Manager exists, I don’t see a reason to use my Cyanogen Account because there haven’t been any additional additions to the feature set. I emailed Kirt and Steve once about potentially folding the WebKey project into Cyanogen and linking it to the Cyanogen account. That would provide remote access, remote file management, a remote shell, and countless other features (most or all of which could be made to work without needing root if baked into the ROM). How much would that add to the ROM and set it apart from other offerings? Neither Google, Apple, Microsoft, or Blackberry have anything close, and it would be a game-changer.
The Themes engine. Alright, so some may disagree with me, here, but I don’t really care about theming my phone or my computer. For me, that was cool back when Compiz/Beryl were the hotness for Linux. Now, I’m more interested in function over form. Why spend so much time building this thing when there are actually useful additions that could be made to CM/COS?
In conjunction to this, there are a number of features provided by CM that are now part of AOSP and make me wonder why I'm still on CM/COS. Google has added permissions management. They have included tethering. The majority of Developer Options are baked in. They switched the whole tap/long press to turn on/off/open settings feature in the notification panel. There isn't much to set Cyanogen apart, anymore.
Instead of just complaining, I wanted to start a list of things that I really thought Cyanogen would have provided by now (or would have at least considered). Some of these would provide Cyanogen with a revenue stream so they wouldn't have to keep cozying up to Microsoft, something that I'm sure most of us would appreciate (does anyone actually use Cortana?) I’d be interested to hear what other features the community would like to see added to CM/COS:
WITHOUT root, implement NFC tag actions that are available with the screen off. For example, allow a user to unlock/wake their phone, turn certain settings on or off, switch to a different profile, or perform a set of pre-defined actions by tapping a NFC tag. Obviously, there would have to be some security mechanisms built in order to whitelist trusted tags so the functions can be used with the screen off, but I’ve always wanted to be able to set my phone down on a tag at my desk and have it automatically connect to my company’s WiFi, put my phone on vibrate, etc.
Partner with an existing developer or independently build parental controls into COS.
Add a login manager for public hotspots to accept terms and conditions on subsequent logins after the first connection (would need to use MAC address, GPS, or some other unique identifier since some companies use the same provider, e.g. Starbucks and McDonald's both use ATTWiFi as their network name but have different captive portals)
Make a Kiosk version for customers at coffee shops and the like.
Create a mobile pay kiosk version similar to the Chili’s tablets since Cyanogen is known for security.
Make a version tailored toward the elderly (lock certain features, provide a restricted set of capabilities that are easy to access, etc).
As previously mentioned, build in WebKey or similar functionality that is tied to a Cyanogen account.
Include Tor without needing root.
Allow the ability to modify DNS settings.
Develop AirPlay compatibility for the Cast feature.
Right now, I’m at the point that I was at with Ubuntu about five years ago. Canonical had “improved” Debian into a bloated nightmare complete with in-house developed projects such as Unity, Ubuntu One, the Ubuntu Software Center, Mir, and others that no one asked for or wanted. If Distrowatch rankings are to be believed, Debian (and Mint) is now more popular than Ubuntu, likely as a result of Canonical’s decisions.
This is not a call to arms but rather a suggestion. Perhaps it is time that the community creates, by way of analogy, a Cyanogen Mint. Maybe we need to go back to the foundation of AOSP just like many users have done by going back to Debian. For me, at least, Cyanogen isn’t satisfying the same needs that it did two years ago, and I’d like to have a mobile OS or ROM that does. There are a lot of custom ROMs out there like Paranoid Android, AOKP, and OmniROM, but they are incredibly fragmented in the devices that they support, and none of them have the level of backing that Cyanogen gained. Perhaps as a community, we need to consolidate our efforts, focus on a common project, and bring forth a high-functioning ROM that can fill the void that Cyanogen no longer does.

In light of today's news about the layoffs at Cyanogen, thoughti might bump my thread to see if anyone would be interested in joining this conversation.

Related

Marketplace "advanced" "copy protection" cracked

This is a continuation of this thread: http://forum.xda-developers.com/showthread.php?t=567870, which covered cracking the original "basic" copy protection of Marketplace.
---
I have now cracked the "advanced" copy protection used by Marketplace. As you may know, this is a "better" protection than the original "CAB copy protection" Marketplace offered. This "advanced" protection uses license keys that are verified when you run the application, and given out and controlled by Microsoft.
Several developers are annoyed that Microsoft does not allow us to use our own licensing schemes, and are forced to use "no protection" (the original CAB copy protection) or use Microsoft's scheme which is essentially a single point of failure for all Marketplace protected apps.
This new "advanced" protection was released today by Microsoft, and as far as I know no app available already uses it at the time of this writing.
So I got the code snippets you are supposed to put in your app and it was simply jawdroppingly WTF. While it was not exactly easy to beat, it took me less than two hours to devise a "generic" hack, without modifying any files on the device. (Well hey, at least it's better than the 5 minutes it took for the "basic" protection, right?)
A "generic" hack? Yes, by this I mean that this single hack (actually, running an EXE in the background) will completely bypass the entire code snippet provided by Microsoft that is supposed to check and validate your license code, for all Marketplace apps that use this "advanced" protection.
I will not publish the code that performs this hack, so don't ask. My goal is not to crack Marketplace apps, my goal is to get MS off their ass and allow us to use our own licensing systems, like the good little resellers they're supposed to be. I will tell you that it has to do with runtime patching the crypto API, but that's it. All in all, I don't think it will take long for the warez people to duplicate this hack.
---
Some further reasoning about anti-piracy, solutions, etc can be found in post 13 on page 2.
if there are no apps that use it yet, how do u know your hack works?
Because the Marketplace portal provides code ("code snippet") you have to compile in your EXE, and that takes care of the whole licensing thing.
So you look at that source, spot the weak points, devise a hack. Then compile a program using said "code snippet" and try the hack on it.
If developers simply copy/paste the snippet they are given by the Marketplace portal, this hack will work.
Chainfire said:
This is a continuation of this thread: http://forum.xda-developers.com/showthread.php?t=567870, which covered cracking the original "basic" copy protection of Marketplace.
---
I have now cracked the "advanced" copy protection used by Marketplace. As you may know, this is a "better" protection than the original "CAB copy protection" Marketplace offered. This "advanced" protection uses license keys that are verified when you run the application, and given out and controlled by Microsoft.
Several developers are annoyed that Microsoft does not allow us to use our own licensing schemes, and are forced to use "no protection" (the original CAB copy protection) or use Microsoft's scheme which is essentially a single point of failure for all Marketplace protected apps.
This new "advanced" protection was released today by Microsoft, and as far as I know no app available already uses it at the time of this writing.
So I got the code snippets you are supposed to put in your app and it was simply jawdroppingly WTF. While it was not exactly easy to beat, it took me less than two hours to devise a "generic" hack, without modifying any files on the device. (Well hey, at least it's better than the 5 minutes it took for the "basic" protection, right?)
A "generic" hack? Yes, by this I mean that this single hack (actually, running an EXE in the background) will completely bypass the entire code snippet provided by Microsoft that is supposed to check and validate your license code, for all Marketplace apps that use this "advanced" protection.
I will not publish the code that performs this hack, so don't ask. My goal is not to crack Marketplace apps, my goal is to get MS off their ass and allow us to use our own licensing systems, like the good little resellers they're supposed to be. I will tell you that it has to do with runtime patching the crypto API, but that's it. All in all, I don't think it will take long for the warez people to duplicate this hack.
Click to expand...
Click to collapse
amen
hallelujah
hit me now
YEAH
have given the issue some press : http://www.1800pocketpc.com/2009/11/13/marketplace-advanced-copy-protection-cracked-in-less-than-2-hours.html
anti-piracy protection is intended to stop ordinary users from transferring cabs between devices and it is successful at that. there is no protection that will stop apps from being pirated, certainly not for handheld devices. the new advanced protection is adequate and any further techniques are redundant and a waste of time, because no matter how 'strong' they are, they WILL be cracked.
Slightly if not totally off-topic: A mainstream consumer's view
mnet said:
anti-piracy protection is intended to stop ordinary users from transferring cabs between devices and it is successful at that. there is no protection that will stop apps from being pirated, certainly not for handheld devices. the new advanced protection is adequate and any further techniques are redundant and a waste of time, because no matter how 'strong' they are, they WILL be cracked.
Click to expand...
Click to collapse
I agree with you and your premise. Now a quick story.
I consider myself a mainstream consumer... but I have been a member of XDA for, what, i think 4 years, using 2 WM phones, first the T-Mobile MDA, then the Wing (HTC Herald), and I am about to switch to Android with the HTC Hero. I am reasonably savvy about tech, just not a coder. But I've done all the hard SPL, flashing ROMS, using beta software, and supporting developers here with pretty significant donations. I am also a User Experience / Usability designer for web as a profession. THAT'S MY BACKGROUND.
To date, my experience buying WM apps has been universally AWFUL. Whether it was, just recently, Resco Picture Viewer from PocketGear, or WM Defrag from Wizcode, or PocketPlayer from Conduits. I am more than happy to buy excellent software that works, and has a decent UI. But in each case, the process of buying the app and getting it onto my phone has been absurd, and frustrating beyond belief. Each provider makes all sorts of assumptions -- often wrong -- including "you must be downloading this from a PC, so we will download for you an executable that runs on a desktop PC then installs via active sync onto your device."
Whatever the percentage is, doesn't matter: A lot of people, like me, download all my cab files, and purchase apps, on my Mac... and either email myself the .cab file or .zip files, or place my microSD card from my phone into a USB reader. Thus, what a frikkin headache to end up getting PocketPlayer on my phone... but because i didn't download it from a Windows PC, I was screwed.
This stuff is archaic. This past week it has taken 5 days to get Resco Picture Viewer on my phone after purchasing from PocketGear.com . They have a completely retarded transactional process, a terrible UI, broken software in terms of user recognition and resetting username and password, and a completely phone-UNFRIENDLY site, with most sub-level menus not even accessible from browsers like Opera Mobile, Netfront, Iris ... They are dumbass pull downs using god knows what -- flash or javascript, whatever. But fact is: a simple navigation process to access the products on the phone itself can't even be achieved by these clowns -- yet everyone is in overdrive now trying to get their version of "THE" WindowsMobile app store online, while Microsoft stumbles.
The fact is: I would LIKE to see a uniform transaction process which is designed professionally, and supports great usability design, and once I buy the app, quit making me go through absurd backflips just to get access to the cab file. Stop requiring me to use a Windows PC. And stop all the "special OUR way" authentication processes. Because if they were so good, there wouldn't be the kind of problems I have described. I'll even grant anyone who wants to -- to say "well you're just a dumb**** user who doesn't understand their particular process"... I'll grant you that, and my answer would be:
If you plan to sell a lot of apps -- ie, make money via VOLUME transactions vs pricey apps -- a la iphone -- then it makes a hell of a lot of sense to make a uniform system of delivery if you're buying it through an app store, and for god's sake, cut the crap and figure it out. It's not so hard to send an authentication code via email or text message. But it's exactly WRONG to be having 1000 developers using 1000 special "our way" authentication processes, because the odds of 1000 app developers having a great, simple, effective UI and safe authentication system that prevents priacy of their app is pretty low, based on the experiences I have had to date with MAINSTREAM products for WM.
That's my view. But I see a whole lot of clumsiness from the Windows Mobile side of the fence pertaining to this whole new way of monetizing apps. There's a reason apple succeeds in that department -- even with their bloated catalog and draconian approval processes. They understand how to deliver products to consumers -- vs repelling them from a dumbass process, no matter how good that process may be in theory.
quicksite said:
I agree with you and your premise. Now a quick story.
I consider myself a mainstream consumer... but I have been a member of XDA for, what, i think 4 years, using 2 WM phones, first the T-Mobile MDA, then the Wing (HTC Herald), and I am about to switch to Android with the HTC Hero. I am reasonably savvy about tech, just not a coder. But I've done all the hard SPL, flashing ROMS, using beta software, and supporting developers here with pretty significant donations. I am also a User Experience / Usability designer for web as a profession. THAT'S MY BACKGROUND.
To date, my experience buying WM apps has been universally AWFUL. Whether it was, just recently, Resco Picture Viewer from PocketGear, or WM Defrag from Wizcode, or PocketPlayer from Conduits. I am more than happy to buy excellent software that works, and has a decent UI. But in each case, the process of buying the app and getting it onto my phone has been absurd, and frustrating beyond belief. Each provider makes all sorts of assumptions -- often wrong -- including "you must be downloading this from a PC, so we will download for you an executable that runs on a desktop PC then installs via active sync onto your device."
Whatever the percentage is, doesn't matter: A lot of people, like me, download all my cab files, and purchase apps, on my Mac... and either email myself the .cab file or .zip files, or place my microSD card from my phone into a USB reader. Thus, what a frikkin headache to end up getting PocketPlayer on my phone... but because i didn't download it from a Windows PC, I was screwed.
This stuff is archaic. This past week it has taken 5 days to get Resco Picture Viewer on my phone after purchasing from PocketGear.com . They have a completely retarded transactional process, a terrible UI, broken software in terms of user recognition and resetting username and password, and a completely phone-UNFRIENDLY site, with most sub-level menus not even accessible from browsers like Opera Mobile, Netfront, Iris ... They are dumbass pull downs using god knows what -- flash or javascript, whatever. But fact is: a simple navigation process to access the products on the phone itself can't even be achieved by these clowns -- yet everyone is in overdrive now trying to get their version of "THE" WindowsMobile app store online, while Microsoft stumbles.
The fact is: I would LIKE to see a uniform transaction process which is designed professionally, and supports great usability design, and once I buy the app, quit making me go through absurd backflips just to get access to the cab file. Stop requiring me to use a Windows PC. And stop all the "special OUR way" authentication processes. Because if they were so good, there wouldn't be the kind of problems I have described. I'll even grant anyone who wants to -- to say "well you're just a dumb**** user who doesn't understand their particular process"... I'll grant you that, and my answer would be:
If you plan to sell a lot of apps -- ie, make money via VOLUME transactions vs pricey apps -- a la iphone -- then it makes a hell of a lot of sense to make a uniform system of delivery if you're buying it through an app store, and for god's sake, cut the crap and figure it out. It's not so hard to send an authentication code via email or text message. But it's exactly WRONG to be having 1000 developers using 1000 special "our way" authentication processes, because the odds of 1000 app developers having a great, simple, effective UI and safe authentication system that prevents priacy of their app is pretty low, based on the experiences I have had to date with MAINSTREAM products for WM.
That's my view. But I see a whole lot of clumsiness from the Windows Mobile side of the fence pertaining to this whole new way of monetizing apps. There's a reason apple succeeds in that department -- even with their bloated catalog and draconian approval processes. They understand how to deliver products to consumers -- vs repelling them from a dumbass process, no matter how good that process may be in theory.
Click to expand...
Click to collapse
Couldn't agree more!
I'll add one more reason I wrap my head in ductape every time I download/install an app.
Think it's bad with every developer having their own authentication method? How about when each developer has a DIFFERENT authentication scheme for every app they make?
I like a rant - thanks for doing it for me as I agree with you 100%.
The top of my annoyance list (which you did include) are sites selling mobile software which are NOT mobile browser friendly, WTF is that all about?
Big Up, I still don't think anyone else would have done it in two hours.
Hey you warned them didn't you.
Haha Chainfire is there anything you cant do?
More in the Dutch press:
http://tweakers.net/nieuws/63713/nederlander-kraakt-nieuwe-beveiliging-windows-marketplace.html
While I do appreciate the "rant", I think you're missing my point - or perhaps I just don't agree. (Edit: that is in response to this post http://forum.xda-developers.com/showpost.php?p=4936479&postcount=7)
When I say "use our own licensing schemes", I do not mean codes sent back and forth through websites, screen you have to type stuff in etc. This is exactly not needed because Marketplace is also the delivery mechanism. In other words, the license code can be installed by Marketplace directly without the user ever seeing or hearing about it.
This is partly how the new system works, actually. However, if Microsoft supported license codes you give them things would be more secure (though granted, for a large part by obscurity).
Some authors will not care and simply not use it all, for example with the cheap apps it may not be worth their while. Others may wish to track license key usage, so that if suddenly 10.000 users start using the same key instead of the 1 who bought it, that key can be disabled, etc. Some may want the app to call home, some will not. Imagine that developers that do employ such anti-piracy measures will write their own verification / communication code, this beats the single point of failure we currently have. The crackers are back to having to crack each app independently and even then have a much lower chance of success.
Marketplace is the perfect opportunity to implement such a system that does provide some piracy security for the authors while for once it does not unnecessarily annoy the user.
To make the obligatory bad car analogy that fails in many ways, take you car keys. Everyone thinks it's normal to have a car key, so people can't just take your car. Of course, in line with some of the arguments against anti-piracy measures, car keys aren't really that useful, as there's always a brick - the universal key, and a car thief that really wants your car will get it. (You also lock the doors on your house, right?)
Now, the current situation is pretty much that everyone has the same car key. How useful is a car key in that situation? They way I see it (and I'm sure I'm not alone in that), is more like the actual car key situation. Some car keys are laser etched, or have something RFID-like in them and a receive in the car, or simply use different shapes, etc. That's a lot more useful than everyone having the same car key.
Sure, no matter what you do, eventually things will get cracked and it is a cat and mouse game. One of the reasons this is easily doable is because of the open nature and the very few restrictions of Windows Mobile. This is a good thing. No developer in their right mind would want to get to a restrictive system like is the case on the iPhone or other mobile OS's. That is not the point. That doesn't mean anti-piracy measures are useless though, far from it. The longer you can keep a release from being warez'd, the less you lose.
There are two arguments I hear coming back in various places by various people:
(1) If the normal users can't just copy it, then that is enough (even MS says this)
(2) Piracy works as advertising, you get more eventual sales, etc. etc
Both of these, are from my own experience, completely untrue. The thing is if one person cracks it, it usually spreads on those warez sites pretty quickly.
The big thing here is, the average user is apparently tech-savvy enough to search the warez sites first before buying, and that is just how it is:
We have played the game with that one warez site, monitoring sales when (apparent) cracks were listed and when they weren't (they do remove releases on request). This made a 30-50% difference in sales (with the number being highest during the weekends, and lowest during weekdays). For me that is enough data to know that both (1) and (2) are complete nonsense in the case of mobile apps. No matter all the pretty reasons and perhaps seemingly logical reasons you may come up with for (1) and (2), the numbers don't lie.
So, how would you like to get a 30-50% paycut? It's not like us developers are getting rich here, you know. Can we be blamed for trying to prevent this?
Now, here we have the chance to implement a system that is completely transparent for the user and can be made reasonably safe (and updatable), an obvious win-win situation for everyone involved except the warez people. Why exactly shouldn't we be aiming for this?
What is also painfully apparent here, as Microsoft themselves claim reason (1), that they have no idea what they are talking about.
i am no programmer so excuse my ignorance but doesnt everything eventually get cracked. Is there any mobile platform which hasnt a non cracked market place or sites where you can download paid apps for free?
Well done Chainfire
Hello Chainfire,
I am the webmaster of the Tamoggemon Content network, and just covered you:
http://tamsppc.tamoggemon.com/2009/11/13/advanced-marketplace-drm-broken/
http://tamswms.tamoggemon.com/2009/11/13/advanced-marketplace-drm-broken/
Furthermore, an email went out to MSFT asking for a statement. but this is not the reason why I registered here (!!!) - I am instead here to vent a bit being a Symbian dev myself.
While I fully understand your frustration, I think that allowing every developer to run his own DRM is not gonna do the store good. The reason is that the store was made to make purchasing apps simple - and by allowing everyone to run his own DRM I dont see much of a venue to do this anymore.
Whenever some kind of backend gets involved, there is a single point of failure - the only trhing I can think off now would be a very complet system based on servers.
Or, of course, platform security like on S60. But trust me - we wont want that!
Thanks! However, if you read my other post carefully you'd see it wouldn't make any difference to the ease of using the store (it wouldn't make any difference for the user at all), just to a part of the backend. And of course, each DRM system has a single point of failure, but the difference is in my case there is a point of failure per app, while in the current case it's a single point of failure for everything. There is no perfect solution, but there are better solutions than the current one.
I've been contacted by a handful of big WM devs by now who are of somewhat the same opinion.
microsoft.... when it comes to security, they are clueless as usual.
only apple is worse.
I find they windows-7 VPN and "encryption" funny , is there anybody that would trust it ? - even if it was not for the backdoors ?
Just wondering, is anyone else having problems accessing the windows marketplace from the phone? I was able to download a couple of apps yesterday after I installed a custom ROM (TPC Pro Series V3.2), but today I get a message saying there is an update, it installs the update but then I get the following message:
"Windows Marketplace for Mobile cannot connect right now. Try again later."
Is this because of the custom ROM and the latest update to the marketplace, or is this something other people are experiencing?
Remember the days when purchased mp3s were DRM protected and some companies like Sony even put rootkits on music CDs? Did that stop piracy?
Hopefully Microsoft will not repeat these mistakes... There is no need for any further 'protection' for marketplace apps. If a developer isn't satisfied with this mechanism then he/she doesn't have to publish their apps on the marketplace. There's no point in having a centralized app store if every developer uses his/her own licensing scheme.

Essay about Android

Taking a speech class and had a chance to write about the Android platform. Figured I'd share here. Enjoy and comment as you will.
I wish to start off by saying welcome to the future. A bold proclamation yes, but with such experiments and ongoing research by numerous scientists today, technological breakthroughs are vast and epic. One of the many platforms so to speak that is having phenomenal breakthroughs is in the mobile systems department. Here lays a couple companies with R&D plans that carter towards certain parties promising slick user interfaces, application channels, and a complete web experience. Couple that with feature rich phones that allow one to text, call, global positioning (GPS), and well, you have a product to sell. Google has done just that. Taking bits and pieces of everything one could ever ask for, and merging it all into its mobile operating system titled Android. Represented by a green round-headed robot figure, Android is passing its two year anniversary, and has surpassed other prominent mobile architectures like Apple’s iPhone software. But what exactly is Android? Why would one desire to chuck away their limited iPhone, or stray away from the Blackberry Enterprise lineup? One word: Open source. Couple that with the experience (the art of customizing your device), and the synchronization aspects of the device for virtually any account you have on the net, and you have a total package.
Having a total package within arm’s reach, and inside your pocket is quite a powerful tool. With Google’s Android platform, there is never a point where you can say No. Any and every idea can and could be coded into the device if you have the means to do so. Open source is the ticket. Asking yourself what this means is actually a very simple question. Open source is the definition of computer code that is freely available to anyone who wishes to find it. Google has opened up the software to all who have a spirit to create and provide applications (Apps) and programs to others. Hackers, coders, and all techy guros have created a plethora of net-libraries ranging from support groups, forums and websites to further help noobies in the process. Sounds like a lot, but in reality, the experience is quite easy going. Competitors like Apple and Blackberry have limited their system to developers by safekeeping some of its computer code. This limits creativity, as it puts restrictions and limitations as to what exactly what one can create. Add to the fact that companies like Apple also screen apps to a much higher caliber, halting smaller apps without much bang in the beginning to be choked to death. It seems as if anything is available for pleasure with Android though. If it doesn’t exist, pop into a forum and jot down a reply on a thread. If that’s not enough, I’m sure you have one friend that has already found solutions in the “Green-Guy”. There is always someone there who has the tools necessary to create it, or rather has already created it in the first place.
From forums and coders who have the know-how and tools to create a mind-blowing experience, the customization factor of Android is truly one of its largest selling points. To be quite honest, each and every android device could be considered a work of art. It’s all in how the user desires it for themselves…how deep the user wants to venture; how deep goes their rabbit? From changing backgrounds and wallpapers, to adding widgets to your home screen, the android spectrum allows one to make the phone their own, morph it into how they see fitting. But how is this different from other products? Surely other phones allow their users to alter what they see on screen. Yet I assert, the android experience is different. Almost, if not every aspect of android is customizable. Icons can be altered, the font can be changed, dates, times, anything can be tweaked. Sites like XDA, AndroidSpin, and AndroidandMe provide great reviews, heads up, and forums to browse through numerous applications, both beta and final. The options are endless, and it’s open in the air to anyone who desires a bit of change. Many new phones come preinstalled with newer software, as you might here Froyo, Éclair or Gingerbread tossed around. These are simply codenames for newer versions of software from Google. If your carrier doesn’t support the newer software, chances are a coder has already made it available for you. Convenience without a price attached!
Free in price is seemingly synonymous with freedom. Freedom to choose. Freedom to enjoy. Freedom to experience. Freedom from a stationary computer. Android is a thriving system that allows you to constantly stay on the up and up. Synchronization appears a mystery as your Facebook, Twitter, email, and numerous other accounts are integrated into the system via apps or at stock. With live widgets that monitor in real time your accounts, any and all social networks, social feeds, and business/personal accounts are updated instantly. No more carrying around a tiring laptop, or waiting to login the networks at any given campus. 3G speeds and now 4G on some carriers are making mobile devices the in crowd, as speeds are comparable to standard net speeds. As many people day are on the up and up, or rather, out and about, a mobile system that constantly allows access to ones desired feeds is grand. Couple that with ability to alter documents on the fly, listen to your favorite music (via Pandora, or from the Phones Internal Memory…think iPod), you have a complete package. It’s not just a Media Device, a Business Device, a Cell Phone, as it truly lives up to the name of Smart Phone.
For me the choice was easy. I thrive off customization, the ability to make my phone a tad different, even faster, or more efficient then what the original company did for me. But as Android ages, everything looks bright and promising. To proclaim dark clouds linger would be insanity. From its initial creation of being open-sourced, to customizing features and its ability to be versatile, Android has shattered the mobile systems realm. As it races to the top, Android allows users to update on the go, with synchronization from virtually every social feed. When people ask me about phones and what should be right for them, there is no question for me. It’s never been a question about what Android can’t do, but what Android does.
<- Laughing Out Loud.
It's full of grammar faux pas, by the way.
Still very well written *only read first paragraph* but I was impressed, not bad Also maybe a bit many commas...
BTW, shouldve been posted in the off topic section
Nice Speech. I Enjoyed reading it.
Sent from Conical. 07

Android: Why Facebook Home is Winning

I'm not a fan of Facebook per se. I don't care for the social media craze that seems to have permiated every facet of technology. When it comes down to it, I see Facebook as an enabler. It allows us insight into the intimate details of people we care about, without actually having to interact with them. It entices us to click "like" instead of personally conveying our appreciation or admiration. To top it off, I'm even less enthralled with Facebook on Android. Update after update that notoriously brings almost no improvement in performance, and many times results in an even worse experience. Not to mention the invasive permissions they keep slipping in with every new feature they implement. So why would I write an article about Facebook Home? Perhaps even more questionable, why in the world would I say they are "Winning"?
For most of us Android geeks/enthusiasts, there's been a quiet war going on behind the front lines of Android for quiet some time. Manufacturers continue to give us devices with their specific flavor of Android such as Samsung's TouchWiz and HTC's Sense, among other variations of Google's "Vanilla" Android experience. Meanwhile Android developers have been working endlessly to bring users more options with modified or custom ROMs such as Cyanogen Mod, AOKP, ParanoidAndroid to name a few. It's about choice - which the manufacturers don't want to give us. They want us to get used to their skins and their custom features, so that it becomes inherently habitual to use them. And we all know how hard it is to break habits.
Regardless of the ROM an Android user chooses, it doesn't end there. Android users are a unique bunch - and most of us want our phones to be unique as well. However, if you have been watching the evolution of the Android user closely (as Facebook undoubtedly has) you might have noticed that despite our yearning to be different, to customize our Android experience to our own taste, there is a sweeping movement taking place within the community: The Android user base has grown so quickly that it is no longer just a haven for the tech-geeks and device tinkerers. There is a large number of users that want to be able to customize their devices without having to learn what rooting is, or how to flash a custom ROM. They have no idea what a bootloader is, or even superuser for that matter. Yet their desire remains the same - to be able to tailor their phone as they see fit. This is where the ROM wars end - and the Launcher wars begin.
When it comes down to it, it doesn't matter if you're running Samsung's TouchWiz or the latest Cyanogen Mod Nightly. You're most likely going to install a custom launcher which will serve as your main user interface. Apex Launcher, Nova Launcher, or perhaps one of the new comers such as Chameleon Launcher or.. yep, you guessed it: Facebook Home.
This is where Facebook's genius begins to show. For the majority of Android users, it's not about what ROM you're running anymore (and for many newer users, it never was). It's the launcher that ultimately defines their device. And when you step back for a second and really dissect what's been going on with Android, it's always been about the launcher. TouchWiz and Sense are just that - launchers. Despite the fact they are deeply integrated with their respective phone's OS version, they're still basically just different user interfaces. Most of what they offer in regard to features can be successfully ported to other phones, other ROMs. The reason for Android user's past frustration with these manufacturer's customizations was their inability to remove them or change them. So where does that leave us today?
Facebook Home is exactly what a vast majority of the Android user base wants. Another option, another way for them to tailor their phone to their own usage habits. And if they don't like it, they can simply change their launcher or uninstall it completely. And let's be honest - there are millions of Android users who are Facebook fanatics. Facebook Home isn't just another app.. it's the new front line of the Android wars. Don't be surprised if you start seeing more of the major social media sites offering their own launcher. After all, it only makes "Sense".

Cydia Substrate — Native (or Java) Runtime Code Modification

Cydia Substrate is a code modification platform. It can modify the code of any major process, whether that code is written in Java or C/C++. It has been designed to support an ecosystem where many developers are interested in hooking the same processes. It is designed to be powerful and efficient.
== How do I get Substrate? ==
You can either download it from the Play Store or directly from its website.
== How do I develop for Substrate? ==
You download its SDK using the Android SDK manager or from its website. There is extensive documentation on the website.
== What is Substrate's website? ==
http://www.cydiasubstrate.com/
== How is this different from Xposed? ==
Many compare it with Xposed, but Xposed only supports a single use case: hooking Java functions inside of app_process. Substrate can hook native code, such as is required to modify the way styles are loaded inside of the Android asset manager. There are many other differences, however, as Substrate's API is based on five years of experience managing a community of runtime code modification for iOS. I normally avoid doing direct comparisons, but after attending Big Android BBQ and presenting on Substrate, I have been encouraged to make the differences and advantages of Substrate's approach more explicit here on XDA.
Xposed requires an inverted form of logic based on "before" or "after" hooks while Substrate lets the developer use more straightforward "replace and call previous" implementations. This also enables more complex interactions with the previous implementation that have been shown to be valuable among the thousands of developers using Substrate on other platforms. Xposed attempts to offer something similar with "replace" hooks, but those do not provide access to the previous implementation, and while Xposed provides a way to call the "original" implementation, that skips any other hooks that might be stacked.
Xposed requires the developer to find a safe moment to interact with the class being hooked. To make this possible, there are numerous lifecycle events such as "VM loaded", "package loaded", and "command line application started". However, this does not solve the problem that touching classes can change the order in which they statically initialize. This also means that it will not be possible to provide declarative syntax wrappers (such as Logos, which developers use on iOS) on top of Xposed, as this context will have to be made implicit in imperative logic. Substrate solves this class initialization problem by allowing developers to hook the classloader itself, getting a callback when a class is "linked" so that the developer can find a class loaded in any classloader (even as a plugin to an application an hour after that application starts, where the code is downloaded as a .dex from the Internet).
Xposed has a method hook implementation that makes it lose track of which method was hooked, requiring it to do a lookup every time such a method is called. This implementation is currently linear in the number of hooks, making it slow down the more hooks you install. Worse, there is a high constant multiplier on this algorithm, as the comparison between entries is very expensive (and was made more expensive when recently fixing a longstanding bug caused by this lookup being slightly incorrect). Substrate, in comparison, uses runtime code generation to avoid the need to every look anything up at runtime: you can use Substrate to hook small functions in tight loops without experiencing the same kind of performance issues you would see with Xposed.
Substrate is also designed with a different user focus: while it currently has a setup interface, it would prefer to not have any UI at all (and this will be strived for in subsequent versions, assuming anyone cares to use it). Upgrades to Substrate can be automatically installed by the Play Store and do not require the user to interact with Substrate for the changes to "stick". Substrate itself is distributed via Play. Rather than confine these kinds of modifications to advanced users who use forums such as XDA, the idea is that everyone should have access to using this kind of technology. If you have a ROM or another store in which you'd like to see Substrate distributed, I would be more than happy to talk to you about this to make that happen, and these installations will be fully supported.
For some more information on the differences between Xposed and Substrate (or if you are wondering why you should bother paying any attention to things that I say, as maybe you don't remember me from my earlier Android projects), I encourage you to read the comments I left a couple posts down from here on this thread that describe the history of Substrate, how I fit into the Android ecosystem, and more about how Substrate differs from Xposed. I will also likely be posting the talk I gave at Big Android BBQ (with either notes to go along with each slide or in the form of a video I will record re-giving the talk and advancing the slides), which might make some of these things more clear.
Current Changelog
[this is the changelog from Play, which has been compressed slightly. I will bring the more full changelog back, as I have it saved somewhere, and put it here or link it here]
v0.9.4011:
* fix decoder bug inside ARM emulator
* support Genymotion Intel emulator
* add symbol names for Moto X
v0.9.4010: critical Android 4.3 fix, avoid old Superuser bug
^^ must install before Android 4.3 OTA!
v0.9.4009: work around Xposed bug, 4.2 fix, better errors
v0.9.4008: HTC linker path patch, limit symbol exports
v0.9.4007: RAZR i 4.1.2, detect HTC override, avoid ps
v0.9.4005: incompatibility detector, avoid mount/ln/mkdir
v0.9.4004: Holo, Script Failure, detect physical /vendor
Comments from Developer
So, yeah: I'm the developer of Cydia Substrate, the framework everyone uses on iOS to do runtime code modification. Back in 2011, I gave a talk at Android Open along with a demo of Substrate running on Android 3.0. However, after some in-depth discussions with people there who were interested, I realized that what I had at the time "wasn't sufficient": it was just the core of an implementation, not an end-to-end offering. By the time it had everything I felt it needed to launch--including a comprehensive website filled with documentation, a configuration application to install with it, fully tested support for both ARM and x86, a forward-compatible pure Java API vetted by a bunch of the top people in the iOS modding community (as I feel like breaking APIs after launch is one of the more evil things a framework can do), and an extension that would make sense to end users that they could try (so that trade press wouldn't be horribly confused, as I knew they would report on the release)--it was already 2013.
http://www.youtube.com/watch?v=tA9cnemnQ0A <- Android Open 2011 keynote teaser
As many people then know, I released it in June. A lot of people have tried it (165k installs just from Play, and another 20k downloads of the APK off the site), and many of those people even like it enough to keep it installed and leave positive reviews, despite there being almost nothing available to use with it except WinterBoard (which I really only did as a demonstration). However, I also get comments from people who seem to believe I'm some kind of "interloper" in the world of Android. Additionally, there are the people who leave reviews saying stuff like "this is stupid, we already have Xposed" (sometimes then explicitly adding in the "go home to iOS" kind of spiel). The #1 complaint, however, is "nothing I can do with it", because developers never seem to talk about it or use it much, and the people installing it are all end users. Clearly this isn't the kind of reaction that I thought would happen, especially after having discussed Substrate at length with pulser_g2 before launch (who said that the community here tends to be very good about judging things on their usefulness and technical merits as opposed to having emotional attachments).
http://www.cydiasubstrate.com/ <- Cydia Substrate
Given this, and after an encouraging back/forth I had with some people on reddit's Android subreddit a few days ago in some threads about the analysis I did of that recent Android iMessage client (people who didn't know much about the ways in which Substrate is very different than Xposed in capability and focus), I figured I'd finally make a post on XDA. I kind of had been waiting to make this post as well, honestly (as again: I like things to be more perfect before I release them than maybe people are used to around here ;P), but it seems like I'm now waiting for something that is itself causing the delay (I had really expected to do this in July, before the whole thing got more actively depressing). This is clearly that post ;P. I've responded to a bunch of other threads here talking about Substrate (and the many other Android projects I've released) in the past, but this is the first time I've actually started a thread.
(In specific, Substrate currently doesn't support some Samsung devices due to a change they make to the linker paths, and I wanted to have 100% device coverage before making the inaugural XDA post. However, I'm finding it very demotivating to spend the time to think through all the options I've been considering for workarounds given the overall lackluster reaction to my work, so I'm not even making fast progress anymore: I tend to work on the things that people react positively to, and while I got a lot of positive reactions on the balance from users, I got much less than I expected from developers given how many people use Substrate on iOS and how powerful the framework is. I think, from some conversations I've had, this is largely due to confusion over how Substrate on Android relates to Xposed, which many people seem to think of as the "home-town competitor" "that does the same thing". I thereby figure that I may as well attempt to directly address that core motivation problem, to see if I should even bother continuing spending time helping out in this community, hence this ludicrously long and highly personal post about what is essentially a technical framework ;P.)
[Readers who find the next section boring should skip below to "=== Substrate ===".]
I imagine I (sadly) thereby need to start by defending my history in the Android community, as many people seem to not be aware of much of it; it actually goes back very far, as I had promised the overall mobile community that if Android were ever rooted, I'd immediately start looking at it in earnest (before there was a device, I had already been messing around with the emulator, but the device concepts Google had at the time were more like slightly souped-up feature phones, not competitors to something like an iPhone). So, in 2008, when that first "root console attached to keyboard" mistake was found on the G1 that let you get a root telnetd running by just typing it into any search field, I dropped everything and drove two hours to Los Angeles to pick up a G1 (they were not selling them in Santa Barbara yet, due to T-Mobile not really having a presence here at the time). As promised, I immediately set to work attempting to help out.
As I ran a number of mailing lists already for iOS, I set one up for Android called g1-hackers, which attracted a good number of people, and even a few Google employees who worked on bionic and the kernel. On this list is where the G1's bootloader was first dumped: if you've ever heard the stories about Eddie Dost figuring out how to do it, this is that. In fact, it was from my G1, with a kernel I compiled (following Eddie's direction: I did not know much about flash drivers), that that first Android NAND was obtained (as Eddie had already updated his device and thereby didn't actually have root). Here is a link to the mailing list thread, directly to the post where we finally succeeded and I provided the kernel image I used so that others could perform the same dump on their own devices.
http://www.telesphoreo.org/pipermail/g1-hackers/2008-December/000096.html <- [g1-hackers] G1 boot code
Around that same time, I was also contributing to AOSP, providing a bunch of patches to things like mount and init, as I wanted to be able to get Android devices to a state where they could run something much closer to Debian than Android (I had my eyes set on kind of a hybrid). In the process of doing this, I wrote a guide that for a couple years subsequent were the canonical instructions for getting a bootstrapped build of Debian installed as a chroot under Android. At the time the patch turnaround on AOSP was sometimes over half a year (and almost never shorter than a couple months), which made contributing to the project sufficiently painful that I eventually stopped. If you search through Android's codebase, though, you still find some of my work.
http://www.saurik.com/id/10 <- Debian & Android Together on G1
At the time, I honestly do not remember XDA having yet become "the place" where people spent much time talking about Android: instead, a lot of conversation happened on IRC (which is where the iOS community had already been, and where it remains). There was a channel that I was a part of which included a bunch of people whose names would hopefully be familiar to people around here, including JesusFreke (and, much later, Cyanogen). I got to see the birth of a lot of great websites and tools (such as JesusFreke's smali/baksmali) while participating on that channel. Apparently, I was talking about "Substrate for Dalvik" on that channel in November of 2008 (which is also when I first joined XDA): that's how long I've been staring at this ;P.
During the next couple years, I ended up developing and maintaining a website called Cyrket, which had the mission to allow developers and users to search the contents of the Android Market using their desktop web browser. It also solved a few key problems that developers had with comments, in that you could only see comments for apps your device had access to that were then written in your language. Developers without devices, or with devices that could not see their product (which often included those that paid extra for the ADP1, which could not see copy-protected apps) could not see comments at all. Cyrket presented all of the comments for your application in all regions in all languages (and even used Google Translate to translate them all into your own language).
The way Cyrket had worked is that I scraped the contents of the Market using the same protocol Google's client used, indexed it (supporting find-as-you-type search), and exported it all to the site (well, originally, it was actually just a live client, but then it got really popular ;P). It got me into some mild trouble occasionally with the Android Market team, but overall no one seemed to mind it that much. Cyrket was actually the primary site people used for this purpose for a long time, and I even got the impression that people at Google were begrudgingly using it as it was more convenient than the alternatives. There were a few times where it had to be taken offline (due to changes and rate limits from Google), one time for months, but I'd usually figure out some new way to get it running. Honestly, though: I was really glad when Google finally launched a website for the Market and I was able to stop working on Cyrket ;P (and also glad that Google added most of Cyrket's features for developers to their publishing console, features that Apple actually still doesn't have AFAIK).
http://www.androidtapp.com/cyrket-android-market-browser-back-from-awol/ <- Cyrket Android Market Browser Back from AWOL!
Since those times, I mostly felt the need to get Substrate "awesome" (which started to really come together during 2011, after Cyrket was no longer needed), and so didn't do many larger projects on Android until recently. That said, I have been involved in things related to exploits and security. One of the higher impact things that I did was to release mempodroid, an implementation of the mempodipper exploit described by Jason A. Donenfeld for Linux 2.6.39+, which became the primary method to root devices running Android versions 4.0.0 through 4.0.2. Much more recently, users have been using Impactor, my implementation of the various "Master Key" exploits (based both on bugs described by Jeff Forristal as well as techniques I pioneered against a random AOSP bug).
https://github.com/saurik/mempodroid <- mempodroid README
http://www.saurik.com/id/17 <- Exploit (& Fix) Android "Master Key"
Given all of this, I hope people can get a feeling for just how strange and depressing it feels to me when people seem to suddenly believe I'm some kind of foreign invader . (FWIW, I also feel rather awkward having to describe all of this in this fashion, but frankly I'm at a point where I'm realizing that if I don't explain it in this much detail myself, no one else will. While I'm certain I'll get some people responding really negatively with comments like "he's such a blowhard, going on and on about silly little things he did", so far when I've given similar spiels to people in person at conferences, they often go "oh wow, I remember that tool/happening, but didn't remember that that was also you", and so figure that this might go a long way to fixing this weird problem: I'm not just "that iOS jailbreak guy".)
=== Substrate ===
Alright, now with that aside: in time for Google I/O (which was arguably bad timing, as I was then immediately unavailable for days ;P), I finally released Substrate. Substrate (in my clearly biased opinion ;P) is actually really cool: as far as I know, it is currently the only tool available for Android that allows developers to easily modify native code without patching/replacing. I know, for example, that people often ask how to modify features like the holo themes that are implemented in C, and the answer is Substrate: if you can find the code (which is often exposed via a symbol as there are tons of C++ symbols available on most Android builds) you can use Substrate to hook it at runtime in a way that avoids having to patch the files on disk, allows developers to deploy their changes across multiple ROMs, and supports the idea that users should be in charge of the specific features that they have on their devices (as opposed to ROM distributions).
As another concrete example that maybe makes this more obvious: sometimes you download a program from the Play Store (which, incidentally, I have a very hard time not constantly still calling the Android Market ;P) that is pretty much just a massive JNI binary--maybe an OpenGL game or a media player of some sort--that refuses to run on a device that has been rooted. A really common way that developers implement such checks is to do things like verify the existence of files on disk. The simple/common checks are very easy to detect and defeat using Substrate as you can hook the native "open" call from the C standard library, check if the filename is something like /system/xbin/su, and return "nope, not there".
http://www.cydiasubstrate.com/api/c/MSHookFunction/ <- MSHookFunction()
Substrate lets you do this kind of hooking in any system daemon (not just those spawed via app_process). Yes: if there's a program running in the background of your phone, some native service written by the OEM that manufactured the device, you can use Substrate to modify it. A lot of very interesting extensions on iOS involve these kinds of hack; for an extreme example, the software unlocks that we used to have for earlier iPhones involved modifying CommCenter, a native program that initializes the radio hardware: by hooking some of the code in that daemon, it was possible to, at just the right moment, inject a different command sequence over the serial connection to the baseband, exploiting it for the unlock.
http://www.cydiasubstrate.com/inject/android/ <- Android Native Injection
Of course, Substrate also supports hooking Java code (yes, a little like Xposed, which at some level uses the same underlying trick I walked people through in my talk at Android Open 2011). Somehow, though, a lot of developers don't seem to catch all that other stuff that Substrate lets you do, and get hung up on this one part that Xposed also manages, leading to all those aforementioned irritating comments about how "there's no point to Substrate because we already have Xposed": Xposed can't do most of the things Substrate can do (and the developer has even told me that he actively tries to avoid Substrate-like techniques as they are "pretty complicated", so it isn't even moving in that direction). FWIW, on iOS it took a lot of time for Substrate to get these features (it did not have them in 2008 when I first released it): they aren't trivial ;P.
http://www.cydiasubstrate.com/api/java/MS.hookMethod/ <- MS.hookMethod()
Even within the restricted context of modifications to Java, however, I think Substrate has a lot to offer. Again: I actively refused to release Substrate until I felt I had truly nailed a few things, including in particular the Java API (at Android Open 2011, I only supported JNI, which developers there told me would not lead to traction). I was a major proponent of aspect-oriented programming when I was younger, I got into byte-code engineering in college, and I co-published a paper on a Java code modification framework called jMonitor in 2004: this is something I've been thinking about for a long time, and I think the approach I take has some merit in and of itself. I know a lot more can be done (I feel it would be really interesting to have AspectJ-style pointcuts, for example, or the kind of bytecode-level instruction matching that I implemented as part of jMonitor <- features not described in the paper, I think ;P), but I felt a good first step was be to directly leverage the iOS community's six years of experience.
http://www.cydiasubstrate.com/id/6dfa187d-6e04-4f97-b63a-ae75b5338e01/ <- jMonitor [RV '04]
To this end, Substrate provides an API for Java that is very analogous to the API that it provides for modifying C/C++ and Objective-C. The focus is on "I know about some code and I want to modify it", allowing you to not have to think much about the timing or execution details of the program that may be loading that code (so you never have to think about "packages" or "processes" or "applications": you just concentrate on "classes", and thereby don't need a million "helper APIs" to handle each narrow timing case). To enable this, I use the aforementioned ability of Substrate to modify native code to hack features into the VM itself, giving me the ability to instrument events like "a class has been loaded". If you want to hook a method of a class from Apache Commons, and you want to hook that class no matter whether it was loaded as part of an application or dynamically as part of a classloader for a plugin downloaded by an application, this is trivial to express with Substrate. AFAIK, that use case isn't even describable using Xposed.
http://www.cydiasubstrate.com/api/java/MS.hookClassLoad/ <- MS.hookClassLoad()
This kind of VM-level modification and runtime code generation support (that is heavily flexed on iOS Substrate, and thereby has had years of in-the-field testing; so far Android has exposed just one bug in its ARM reassembler after release, and that was only in the qemu emulator for some reason) also means that Substrate's implementation of hooks is highly efficient: to compare again to Xposed, every time a method that has been hooked is called via Xposed, there is a linear-time search through a linked list doing a rather heavyweight comparison to determine which method it was after the fact; with Substrate, every call is direct, there are no lookups, and there are no comparisons, so you can hook an arbitrary number of methods with no slow down, so even very small methods that are called very often can be hooked without issue.
Additionally, with Substrate I wanted to address a specific pain point that many people would bring up when I'd give talks: "how is this secure, and how do I control what apps can use these features". This became even more important, as I wanted Substrate extensions on Android to be easily deployable via conventional means, such as the Play Store (yes: Cydia Substrate itself is in the Play Store, as I believe it is important for these kinds of features to not just be in the hands of developers on forums, but to be used by end users everywhere). To this end, I integrate into the Android security model, providing a special permission that applications must have to install a Substrate extension. This helps enable the idea that Substrate mostly "gets out of the way", becoming more of a technical detail behind your extension rather than something users will need to interact with constantly to activate or update your product.
I also wanted to provide at least something that would help solve the "reflection hell" that developers seem to always find themselves in while attempting to do runtime code modification in Java (even back on desktop Java using AspectJ). I thereby provide the means to "bless" a class loader, allowing it to access private fields and classes without the overhead of reflection: the access checks, for just that one class loader, no longer apply. Substrate extensions are loaded into such a "blessed" classloader. (I do not, even though I could, ever just whack an access check VM-wide; Xposed does this, and I feel like it is going to have security implications on Java security contexts applied to class loaders for plugins.) In the case of WinterBoard, for example, I don't ever have to deal with invoking Methods or getting Fields: setAccessible is just a dim memory.
Being able to use this functionality, however, can be awkward, and in some cases is almost impossible: while testing this feature, I realized that developers would end up needing "public stubs" for all the classes they were working with, but the calling convention for a public method and a private one is different, so the calls fail at runtime. I thereby ship as part of the Substrate SDK (yes, there's an easily-updated SDK package that you can download using the Android SDK Manager ;P) an extension to javac itself (as you might imagine at this point, written using AspectJ) that turns off access control checks: you can thereby access private fields or call private methods with no extra work both during development and at runtime. This all works sufficiently well that I generally run all of ant under the modification, such that anything ant compiles becomes "blessed".
http://www.cydiasubstrate.com/id/c17c554f-b603-4e3b-8f99-ebb3528e3ef8/ <- Java Access Controls
(And yes: this is one of the things that caused Substrate to get delayed even longer than it already had been. There was also a rather serious delay caused by my attempts to really nail the boundary between "code that is shipped with Substrate" and "code that is shipped with the extension", something that burned me a lot throughout 2013 as it was the kind of problem that spending time actively thinking about didn't directly help, requiring an epiphany I had soon before Google I/O. Arguably had I been willing to ship without documentation at all, and had I generally cared less, I would probably have had everything out in very early 2012, but during January-May I started working on the initial draft of cydiasubstrate.com, as I had apparently incorrectly thought that such efforts would be critical to developer adoption.)
Again, I write this in the hope that it clears up misconceptions, either about myself or about Substrate. As far as I can tell, Substrate has a lot of very unique value propositions: things that currently are only made possible by Substrate; and, even within the restricted scope of hooking Java code inside of a service being managed by Zygote (the only area of overlap with Xposed), I think that it offers a bunch of advantages in security, performance, deployment, and ease of development that cannot be so casually dismissed with a flippant "we already have Xposed (go home)". A lot of these features (and I haven't even gone into all of them: I could write paragraphs about the advantages of how Substrate's API handles chained hooks, the ways I enable extensions that need to cross classloader boundaries, or the way Substrate makes it easy for end users to temporarily disable extensions without complex tooling) come from having spent over a decade now thinking about this problem and the last five years actively managing a developer ecosystem with tens of millions of users on iOS.
I am thereby happy to answer any questions about how to use Substrate, issues with Substrate on any device (I never blame the device: I might not have a fix immediately for a specific problem, but I always consider it Substrate's job to work around issues the device throws at it to get its functionality in place so the task will at least end up on my todo list), or even about me (as a lot of why I find writing this both so important and so painful are due to the occasional-yet-present more-personal attacks/misconceptions I often seem to receive about somehow being an "outsider"). (That said, please do have some patience: sometimes my ravenous need to do nearly 24/7 testing on a specific device has to give way so I can go to a conference I'm giving a talk at, or so I can focus on a different problem that might be more pressing or simply have a higher probability of near-term success: spending an infinite amount of time on one problem is unfair to all of the other problems that exist ;P.) [And, in fact, I have a meeting I have to be at tonight, but which hopefully won't take insanely long.]
Reserved Post
["reserved", as apparently you always should have at least one of these ;P]
Links to Extension Threads
[and finally, I can see ending up with a page that might link to other threads on XDA, although arguably I should put this on cydiasubstrate.com. right now, most projects that use Substrate are in Play. I am not certain if I'm now just misunderstanding how to use XDA, though: again, this is my first thread I've started myself]
Wow. The timing couldn't be any more perfect for you to post this.
I do not have an Android device yet and have been theorizing exactly how I could easily make modifications to applications.
Because I am just getting started in the Android development community, I don't have any biases towards one framework or the other.
Sooo.... this is on my watch list.
gugbot said:
Wow. The timing couldn't be any more perfect for you to post this.
Click to expand...
Click to collapse
The opinion of many (reasonable) people differ ;P.
gugbot said:
Sooo.... this is on my watch list.
Click to expand...
Click to collapse
Yay! If you have a moment, I'm curious: how/why did you find this thread? It seems like very few people actually go to this "Frameworks" sub-forum; there are almost no threads posted to it except the one about Xposed, which I'm presuming people must be finding by links from other places (whether random websites or other threads on XDA).
saurik said:
The opinion of many (reasonable) people differ ;P.
Yay! If you have a moment, I'm curious: how/why did you find this thread? It seems like very few people actually go to this "Frameworks" sub-forum; there are almost no threads posted to it except the one about Xposed, which I'm presuming people must be finding by links from other places (whether random websites or other threads on XDA).
Click to expand...
Click to collapse
I was browsing in development tools and was surprised to see that a Saurik posted about Cydia Substrate!
I was brought to this forum by one about theme development?... Maybe you should post this in a forum with more traffic. There seems to be an endless amount of categories for everything.
i have try your cydia substrate on cm10.1.3 stable..device samsung i9300..
install winterboard..apply icon pack but icon pack not applied..
then when want to open other apps the apps fc..except winterboard..
slipar said:
i have try your cydia substrate on cm10.1.3 stable..device samsung i9300..
install winterboard..apply icon pack but icon pack not applied..
then when want to open other apps the apps fc..except winterboard..
Click to expand...
Click to collapse
Yeah, as I mention in this thread WinterBoard was more of a demo that has been difficult to justify improvements to . This isn't an issue with Substrate, at least.
Would you mind sending me the crash report from the adb log? At least, would you mind telling me the name of the theme you applied? Also, thinking about it, CyanogenMod already has a theme engine... it never occurred to me how WinterBoard would interact with the existing theme engine in CyanogenMod (although I guess thinking even longer about it, I see no reason why it would fail horribly... it should just layer on top).
saurik said:
Yeah, as I mention in this thread WinterBoard was more of a demo that has been difficult to justify improvements to . This isn't an issue with Substrate, at least.
Would you mind sending me the crash report from the adb log? At least, would you mind telling me the name of the theme you applied? Also, thinking about it, CyanogenMod already has a theme engine... it never occurred to me how WinterBoard would interact with the existing theme engine in CyanogenMod (although I guess thinking even longer about it, I see no reason why it would fail horribly... it should just layer on top).
Click to expand...
Click to collapse
hope i send u the correct logcat..
im using ios7 concept theme..g play link here
slipar said:
hope i send u the correct logcat..
im using ios7 concept theme..g play link here
Click to expand...
Click to collapse
Thank you so much for the information. Here is a new version of WinterBoard that seems to work with this theme.
http://cache.saurik.com/apks/com.saurik.winterboard_0.9.3922.apk
thanx saurik..tested but this time winterboard just fc when try to change theme..
logcat attach..
slipar said:
thanx saurik..tested but this time winterboard just fc when try to change theme..
logcat attach..
Click to expand...
Click to collapse
I'm sorry about that issue... this is actually quite interesting to me as it might indicate that I need to do some more work on the blessed compiler as it relates to miranda methods. I had verified that the theme functioned, but had not gone back to attempt to re-verify the setup activity itself, which I guess hadn't been recompiled in a long time. I've added a temporary workaround to the issue while I investigate further. ("Humorously", if you have Xposed installed, I am pretty certain that the WinterBoard settings activity would have worked, as Xposed just destroys the access control checks for the entire VM.)
http://test.saurik.com/xda/com.saurik.winterboard_0.9.3922+1.gf733f01.apk
Hey there, I just happened upon this thread while deeply perusing the boards after just getting home from a 17hr drive and being unable to go to sleep yet. I am VERY interested in the substrates capabilities, it sounds like a very interesting concept. I am a new developer and am wanting to learn more and play more....I use xposed on my phone now and was considering starting to develop modules for it, buuuttt I think I just changed my mind I'm on an att sgs4 running a 4.3ge Rom. Going to install the substrate the night via Play Store and mess around with it starting tomorrow. Thanks for this
Sent from my GT-I9505G using Tapatalk
Sc4ryB3ar said:
I'm on an att sgs4 running a 4.3ge Rom. Going to install the substrate the night via Play Store and mess around with it starting tomorrow. Thanks for this
Click to expand...
Click to collapse
Yay! (Now, watch your GT-I9505G be one of those few Samsung devices Substrate detects as incompatible ;P. Samsung has so many model numbers that all map to the same high-level marketing names that it's difficult to keep track of what's what. If that happens, and you are interested in helping out, I can implement one of my alternative injectors quickly for you to work with.)
saurik said:
Yay! (Now, watch your GT-I9505G be one of those few Samsung devices Substrate detects as incompatible ;P. Samsung has so many model numbers that all map to the same high-level marketing names that it's difficult to keep track of what's what. If that happens, and you are interested in helping out, I can implement one of my alternative injectors quickly for you to work with.)
Click to expand...
Click to collapse
It installed just fine, quickly and with no apparent issues
winterboard, however rendered neither theme I chose correctly, wondering if its the themes though.... Didn't get a logcat and then I hosed my system last night messing around too much, so I started fresh and haven't gotten back to substrate and wb yet....I'll be back to it withing a couple of hours
Sent from my GT-I9505G using Tapatalk
substrate source code
Saurik,
I've been dabbling some with Cydia Substrate and it seems to offer a lot of unique possibilities for Android apps.
Do you have any plans to release the source code for this like you did on iOS? I'd be very curious to learn more about how it works. Also, is there a link to your talk from the Android Open conference?
Thanks,
Fred
(Ugh. I have no clue how people keep up with a forum, especially with the website as slow to load every page as it is ;P.)
fjones8856 said:
Do you have any plans to release the source code for this like you did on iOS? I'd be very curious to learn more about how it works.
Click to expand...
Click to collapse
I currently do have an intention to release the source code, but I'm not certain under what license (all of the licenses I normally use don't solve the specific issues related to Substrate). That said, no one seems to care much about Substrate on Android: on iOS people tend to (almost to a level of it being a problem) jump on new solutions to evaluate constantly, whereas on Android people seem to just snark "we already have X" even when there are compelling advantages to a replacement. Given this situation, I am highly unmotivated to spend the time to figure out the right solution, given that in a way Substrate is "my magnum opus": it is the culmination of the research and experience of so many years of my life, that passing up the ability to license it to the companies that sometimes talk to me about that (for either enterprise wrapping or security) to satisfy a group of people who are mostly asking for the source code specifically to replicate the technique *and then avoid using Substrate*, makes very little sense.
On the project side of it, Substrate on iOS only ever received a single code contribution from someone I wasn't already so close with that I was sharing code already. It isn't even the kind of project that one would expect getting many contributions: it is more of a backend technology, and the extent to which it has a GUI is actually a bug (I intend for it to be 100% seamless as part apps that use it: Substrate on iOS does not have a GUI and never will have a GUI, and that's how I think it really should work on Android as well, but of course right now I need the silly Install button). If anything, on iOS, we often end up with random companies that want to "own the scene", which ends up with them forking Substrate in ways that cause platform incompatibilities for other developers: Substrate on iOS has thereby actually been closed source now for almost two years, and it has actually improved the stability of the platform. I thereby am somewhat loath to "repeat the same mistakes from before" and end up with forks.
fjones8856 said:
Also, is there a link to your talk from the Android Open conference?
Click to expand...
Click to collapse
There was no recording of the actual talk, just of the keynote introduction that I already link to from my website. In the talk I walked people through a demonstration of using an early version of the JNI-level Substrate API, and showed how it worked (which was very simple at the time). In essence, I demonstrated, with my exact code on the projection, the technique that Xposed started using half a year later (which is just "oh, I'll change the contents of this Method object, as apparently the runtime doesn't care if the Method is allocated as part of a Class; if I do it right I can simulate registerNatives") and the most obvious way of implementing MSJavaHookClassLoad (which--for the really really low-level API I had at the time, on pre-4.0 VMs that didn't have complex JNI stacks--is clearly "MSHookFunction the class load and provide a callback"). Everything is going to be new for ART, though: the techniques are going to have to be much more sophisticated (which I'm excited by, as this is a game changer).
Pm sent
Sent from my GT-I9505G using Tapatalk

Ars: Google’s iron grip on Android: Controlling open source by any means necessary

A few weeks ago, I posted a very unfortunate Google+ post of the creator of Focal and why it was removed from the CM codebase. It was a depressing story and it really started to make you wonder about where CM is going.
This time, after reading an extremely well-written article, I've come to a similarly depressing conclusion: Android by Google is slowly becoming as locked down as iOS, but not in the sense that you think; it's not about what apps let you do what, it's the developers.
We've finally arrived at a critical flaw with the way Android is developed and these days, I can no longer claim that Android (by Google) is "open" anymore.
Feel free to give this a read (Disclaimer: I am not affiliated with Ars Technica in any way).
http://arstechnica.com/gadgets/2013...ntrolling-open-source-by-any-means-necessary/
It's not just about Amazon's version of Android; CyanogenMod is for all intents and purposes a "fork" of Android. It is designed to work without Google Apps and as we all know, we flash those seperately. But that's the problem, the answer isn't just "Well, I'll just flash the Gapps and it will work like it should". What will happen if new Play Store apps start referring to features in the framework that don't exist in a form that we can flash? What if the license to flash the Gapps gets revoked?
How will CyanogenMod start adding features to apps that were originally AOSP but are now closed source? What will happen when the open source Messaging app is abandoned and turns into a Hangouts feature? How can CM stay on top of that?
It's not as simple as "take the source we currently have and work with it", because what will happen when Google adds a killer feature to an app that depends on some API that is no longer open source?
These are some rather frightening questions to deal with. I don't know where Android is going, but I'm certainly starting to wonder what's going to happen to it.
I'd appreciate any and all input on this.
Not very continuous, but here's my thoughts about the article:
The Gapps license is meant to lock the makers of Android phones into Google, so users get locked within Google and Google can gain revenue from the users. After going to that extent to make sure Google gets to keep the device's user, what's to gain if Google users of the device who flash CM to be locked out of the system instead of keeping them "trapped" with the Google ecosystem even with a non Google ROM? Doesn't make any sense does it?
I suppose we will still have to flash them like we flash the Play Store now. Unlike Amazon, CM (for now) actually still relies on Google and doesn't "divert" revenue to another company and therefore Google would be more than happy to let their apps be used. But if CM does start going the Amazon way, I believe Google may lock CM out.
Those APIs take time to develop, take the Maps API for example - you think they spent millions, if not billions mapping the entire world and even roaming every street just to make sure you can find your way around for free? They'll need to recoup their costs somehow.
While Android is open source and contributed by Google for free, don't forget Google is a company, not a charity. They have to make money or their shareholders won't be happy. Even if their shareholders are massive fans of open source they also have thousands of employees to pay, and all that costs money. And don't forget, when a company is providing free stuff for you to use, you are not their customer - you are their product. Android will change in ways that will keep Google profitable and keep competitiors unprofitable, while keeping the users as comfortable as possible so they will continue to be their product.
cccy said:
Not very continuous, but here's my thoughts about the article:
The Gapps license is meant to lock the makers of Android phones into Google, so users get locked within Google and Google can gain revenue from the users. After going to that extent to make sure Google gets to keep the device's user, what's to gain if Google users of the device who flash CM to be locked out of the system instead of keeping them "trapped" with the Google ecosystem even with a non Google ROM? Doesn't make any sense does it?
I suppose we will still have to flash them like we flash the Play Store now. Unlike Amazon, CM (for now) actually still relies on Google and doesn't "divert" revenue to another company and therefore Google would be more than happy to let their apps be used. But if CM does start going the Amazon way, I believe Google may lock CM out.
Those APIs take time to develop, take the Maps API for example - you think they spent millions, if not billions mapping the entire world and even roaming every street just to make sure you can find your way around for free? They'll need to recoup their costs somehow.
While Android is open source and contributed by Google for free, don't forget Google is a company, not a charity. They have to make money or their shareholders won't be happy. Even if their shareholders are massive fans of open source they also have thousands of employees to pay, and all that costs money. And don't forget, when a company is providing free stuff for you to use, you are not their customer - you are their product. Android will change in ways that will keep Google profitable and keep competitiors unprofitable, while keeping the users as comfortable as possible so they will continue to be their product.
Click to expand...
Click to collapse
First, I appreciate the input! I was looking forward to intelligent discussion and it's great that the first reply is just that.
I would like to clarify though; my concern is not so much about Google making money; they are a business and deserve to make money in whatever way they see fit. We have something they want (ad clicks and search history) and as long as they provide an experience worth using, I don't mind that transaction at all.
My worries start with what the custom development scene will look like one or two years from now if the base apps that make Android useful on its own (and by extension, useful to custom developers) have been molded into Google Play apps or frameworks or APIs.
In parallel, it's also starting to make sense why Cyanogen continues to put effort into alternate applications such as Apollo and Focal; they saw this coming way before we did.
LiquidSolstice said:
First, I appreciate the input! I was looking forward to intelligent discussion and it's great that the first reply is just that.
I would like to clarify though; my concern is not so much about Google making money; they are a business and deserve to make money in whatever way they see fit. We have something they want (ad clicks and search history) and as long as they provide an experience worth using, I don't mind that transaction at all.
My worries start with what the custom development scene will look like one or two years from now if the base apps that make Android useful on its own (and by extension, useful to custom developers) have been molded into Google Play apps or frameworks or APIs.
In parallel, it's also starting to make sense why Cyanogen continues to put effort into alternate applications such as Apollo and Focal; they saw this coming way before we did.
Click to expand...
Click to collapse
I believe the custom development scene wouldn't get affected much. After all, remember the old XDA-Developers? Windows was all locked down, but the cooks still managed to make customized ROMs. What's more, Google wouldn't want to lose their "products" - Google wants us to continue to use their services so they can earn money, they wouldn't lock us out.
What competitors lack is the capability to access Google's services (Frameworks, APIs, etc) as Google has ways to block them (Which is why we had circumvents like device spoofing). If you had a device designed for Google's version of Android, I am sure Google would still enable access if you use a custom ROM. The point of locking those competitors out is to force them to embrace Google's version of Android and not use their own forks which would keep Google out of certain aspects of the user's phone, decreasing revenue. Therefore, if you could roll your own custom ROM, it makes sense for Google to continue supporting you so you still completely rely on them instead of "outsourcing" to other competitors.
CM puts effort into alternate applications because as you can see right now, CM's starting to roll their own commercial forked devices - what happens after that? If you have seen the ways of other commercial versions of Android (Amazon, China brands, etc), they start replacing certain revenue generating aspects of the phone to use their own service instead of Google's. Certainly not what Google wants.
In short, I would say, if you are a small custom ROM user, Google isn't going to come after you, they want you to use their services! But if you are a competing company, expect your devices to be locked out from Google in the hopes that they eventually force you to bow to them and convert all your users completely to Google's "products".

Categories

Resources