[Kitchen][Online] website which lets anyone bake a rom - Nexus One Q&A, Help & Troubleshooting

Hello, i'm a web developer and have no experience in developing android roms. Anyways, i'm planning to develop a free website which will let any developer create an online kitchen for his rom, where users like me can come and bake rom according to their needs. Now as i don't have any experience with cooking roms, i would like a little help from the developers. Help i am seeking in is, what features a fully customizable kitchen has, how to change the update.zip for the changes, and adding applications to the zip. I have a little bit idea, but want a clear process.

you will get flamed for this
shararti said:
Hello, i'm a web developer and have no experience in developing android roms. Anyways, i'm planning to develop a free website which will let any developer create an online kitchen for his rom, where users like me can come and bake rom according to their needs. Now as i don't have any experience with cooking roms, i would like a little help from the developers. Help i am seeking in is, what features a fully customizable kitchen has, how to change the update.zip for the changes, and adding applications to the zip. I have a little bit idea, but want a clear process.
Click to expand...
Click to collapse
This really is an admirable goal, but you're attempting to bite & chew WAY more than your mouth can handle!!!
You're a web developer, good.
You have no experience in developing android roms, bad.
You want to develop a free kitchen, good.
You have no experience with cooking roms, bad.
You want developers to help you in exchange for a free kitchen for their rom, bad & good.
You don't know how to update the "update.zip" file and re-sign it, bad.
You don't know how to add an APK to the above mentioned "update.zip" file and re-sign it, bad.
You have a little bit of an idea, but want a clearer process, bad.
All of the above noted BAD points, have been discussed, referenced, and linked on these forums countless times shararti.
You really need to search, read, search some more, and apply what you've learned.
I too am a Web Developer/Designer. I've been in the business of creating websites since 1999 (off & on). And the above mentioned project it something I WON'T EVEN DARE ATTEMPT.
Good luck!

I did search, countless times, everywhere. But as lack of my experience with rom development, it was quite confusing. Well I do know signing and adding apk part, and the rest, i agree, i need some help. I'm willing to give my summer to this project and develop this kitchen for the xda community (i'm also willing to give it away to xda). Now if anyone is willing to help me, please pm me.

Actually, it isn't that difficult.
There are quite a few scripts and programs that you could simply employ on your website. I'm sure those developers wouldn't mind
You would have to tier your ROM baking based on the major ROM cores, and the features swappable between flavors of those cores.
It's simply letting the user choose what he wants in his base ROM, pushing the files into the zip, and running the script to sign them.
I'd be glad to guide you in the structure of ROMs, and showing you what can be mixed and matched.
PM me. We'll get started.

Sounds like a very cool idea and I wish you all the best and hope you find some programmers willing to teach you about roms, and you can do the web coding and make your idea a reality.
I'd use it for sure, would be wicked. Imagine going to this web page on your N1 customizing a ROM, building it and then flashing it. All without going near a computer. Sounds unreal!

APrinceAmongMen said:
I'd be glad to guide you in the structure of ROMs, and showing you what can be mixed and matched.
PM me. We'll get started.
Click to expand...
Click to collapse
Perhaps, share the information here once you two have things worked out?!
shararti said:
I did search, countless times, everywhere. But as lack of my experience with rom development, it was quite confusing ...
... I'm willing to give my summer to this project and develop this kitchen for the xda community ...
Click to expand...
Click to collapse
XDA is such a huge resource, full of solutions, bricked devices and lost newbs LOL.
After trolling for a few months, I was ready to flash my first WinMo SmartPhone a few years ago. I haven't used a 'regular phone' ever since.
This would be an ideal summer project. As I said, I'm also a Web Developer.
Hit me up for some theme/template ideas. I do most of my work with Notepad++ and Adobe Fireworks CS4.
Goonish said:
I'd use it for sure, would be wicked. Imagine going to this web page on your N1 customizing a ROM, building it and then flashing it. All without going near a computer. Sounds unreal!
Click to expand...
Click to collapse
hhmm, never thought of that!
You're right ... sounds unreal!
Something the iFans would never be able to attain.
Even better, how about, instead of flashing some large file, only the ones affected by an update are flashed, resulting in a much SMALLER file (thus saving on data usage) and a FASTER flashing (saying on battery life).

shararti said:
Hello, i'm a web developer and have no experience in developing android roms. Anyways, i'm planning to develop a free website which will let any developer create an online kitchen for his rom, where users like me can come and bake rom according to their needs. Now as i don't have any experience with cooking roms, i would like a little help from the developers. Help i am seeking in is, what features a fully customizable kitchen has, how to change the update.zip for the changes, and adding applications to the zip. I have a little bit idea, but want a clear process.
Click to expand...
Click to collapse
Well it all depends on what you want. I would suggest you have a base rom without the boot.img stored with minimal capability in a folder. then allow the user to choose what type of kernel and capabilities they would like with it. That will be the minimum amount for a rom. Then you can follow it up with additions such as extra scripts and applications that can be added and moved to the appropriate directories. at the end, you would zip up the selection and sign it, with the appropriate update-script (which should be the same as the stock rom's unless the additions require something drastic)
So the folder tree should look something like this for one specific ROM:
ROM/ROM Core Files (this is the base rom without boot.img)
ROM/ROM Core Files/META-INF (this is for the update zip)
ROM/ROM Core Files/system (this is where the system apps go)
ROM/ROM Core Files/data (this is where certain apps go)​
ROM/ROM Kernels (this is where kernels are/boot.img)
ROM/ROM Kernels/boot.img.1 etc​
ROM/Modifications (this is where apps and other mods go)
ROM/Custom Build (this is where the baked rom should go)
Then all you need to figure out is how to move everything to the custom build directory
Move the core to custom directory and a boot.img (rename it from whatever it is to boot.img) and then move and modifications to the appropriate directory inside the custom build folder. Then zip the custom build folder and sign it
That should be about right. its 3 am here lol so i may be missing something. pm me if you need more help or post here

Exactly.
The great thing about it. The ROM core files can be optional. You can bake a kernel or you can bake CM w/ custom kernel and custom mods, i.e. modded phone.apk. You can bake anything and everything.
Mmm baking never sounded so good.

Check this website out:
http://theunlockr.com/2010/03/26/ho...om-for-android-part-1-setting-up-the-kitchen/

My small contribution to this project
The basic kitchen:
forum.xda-developers.com/showthread.php?t=633246
Sorry it's not a link, apperantly new users cannot post links

flybyme said:
So the folder tree should look something like this for one specific ROM:
ROM/ROM Core Files (this is the base rom without boot.img)
ROM/ROM Core Files/META-INF (this is for the update zip)
ROM/ROM Core Files/system (this is where the system apps go)
ROM/ROM Core Files/data (this is where certain apps go)​
ROM/ROM Kernels (this is where kernels are/boot.img)
ROM/ROM Kernels/boot.img.1 etc​
ROM/Modifications (this is where apps and other mods go)
ROM/Custom Build (this is where the baked rom should go)
Then all you need to figure out is how to move everything to the custom build directory
Move the core to custom directory and a boot.img (rename it from whatever it is to boot.img) and then move and modifications to the appropriate directory inside the custom build folder. Then zip the custom build folder and sign it
Click to expand...
Click to collapse
Ok so after reading it 3 times carefully, this is what i got to:
All roms have same common files, which are:
1. the META-INF folder.
2. the system folder.
3. the data folder.
This is a basic skeleton of any rom, and every rom has these exact files.
Now what i have to do is, when a user cooks a rom, i have to pick the required boot.img and put it into the basic skeleton, in addition to any apps/modifications user want. Then zip the whole package and sign it.
Is that it?
PS: you also said that i may need to change update-script, in what cases that would be required?
PPS: Do i have to make changes to some other files too? cause it sounds too easy to be true =p

shararti said:
Ok so after reading it 3 times carefully, this is what i got to:
All roms have same common files, which are:
1. the META-INF folder.
2. the system folder.
3. the data folder.
This is a basic skeleton of any rom, and every rom has these exact files.
Click to expand...
Click to collapse
They usually have the same folders, not files
the META-INF has the signature files but most importantly the update-script which tells the phone what to do when your flashing the update.
shararti said:
Now what i have to do is, when a user cooks a rom, i have to pick the required boot.img and put it into the basic skeleton, in addition to any apps/modifications user want. Then zip the whole package and sign it.
Is that it?
PS: you also said that i may need to change update-script, in what cases that would be required?
PPS: Do i have to make changes to some other files too? cause it sounds too easy to be true =p
Click to expand...
Click to collapse
that SHOULD be it but remember that you may have to remove some apps from the core files of the rom such as amazon mp3 that people may not want, so you will have to see what apps can be removed and decide whether you want users to be able to remove it or not.
You MAY have to change the update-script if for example you want to put some things in the data partition and symlink them or change the data partition to include the ext partition instead of just for apps. Changes like that are usually for ROMs that are too big to fit properly on the nexus ( youll also have to check the size of the system and data folders to make sure they fit on the phone without modification)
Most of this stuff will be figured out in testing haha but ya at the very basicee its what you have here. You really have to know what you actually want users to be able to cook and then build the kitchen to that effect

flybyme said:
They usually have the same folders, not files
the META-INF has the signature files but most importantly the update-script which tells the phone what to do when your flashing the update.
Click to expand...
Click to collapse
So does that mean i can use same core for all custom baked roms? Except for the update-script, which in rare cases, may need to be altered.
flybyme said:
that SHOULD be it but remember that you may have to remove some apps from the core files of the rom such as amazon mp3 that people may not want, so you will have to see what apps can be removed and decide whether you want users to be able to remove it or not.
Click to expand...
Click to collapse
I took a look at system folder and it's quite populated. Can you tell me what are the basic files that are common for all roms? For the rest of the files, i guess i'll give the user choice to include them or not.
Also can you tell me what is zipalign? Will that be required in baking process?
And to let everyone know, I have already started the working on the kitchen =]

shararti said:
So does that mean i can use same core for all custom baked roms? Except for the update-script, which in rare cases, may need to be altered.
I took a look at system folder and it's quite populated. Can you tell me what are the basic files that are common for all roms? For the rest of the files, i guess i'll give the user choice to include them or not.
Also can you tell me what is zipalign? Will that be required in baking process?
And to let everyone know, I have already started the working on the kitchen =]
Click to expand...
Click to collapse
Well it really depends on what ROM's your looking at. Some devs change the apps to their liking. For example, CyanogenMod has a modified Settings.apk that has features specific to his rom. However, all ROMs have Settings.apk. As such, you will probably have to have a Core ROM folder for each specific rom.
I would suggest looking at other online kitchens and see what features they offer, come up with a specific feature set and then decide what direction that you want to take.
zipalign is a compression technique that optimizes how .apk files are accessed in android. it makes things faster and is not required but would be nice to have. you lose the benefits if you open and modify any files from a zipaligned apk

Let's clear some things up here.
First, core files are not interchangeable between main roms but only flavors of those main roms.
As of now, we have 3 main roms for the nexus one.
CyanogenMod, Modaco Custom ROM, and Desire/Sense Roms.
Each of these roms have their own unique cores amd features and are not interchangeable.
There are flavors of each of these roms.
Flavors of CM has parts that are interchangeable with other flavors but use Cyans core.
Say there is one CM flavor that has some themieing and a few other changes you don't want. You can take the themed files and put them into your CM base and leave the rest out.
You can't put that themeing into a Modaco Custom ROM though.
Kernels I believe are the only things can be put into any ROM base. Most apps are as well.
Now that I look at it. Doing a Nexus One kitchen isn't that difficult but making a full featured HTC kitchen would be a mountainous task. There are so many mods, roms and themes to keep track of. We'd have to designate people from each device forum to feed us the ROMs and parts that are active and functional.
P. S. Lectures are over at 7 today. ill be able to crack down on it with you then

Kitchens are for the Food Network...

well thanks flybyme and APrinceAmongMen, these 2 posts really cleared up somethings. I'm in the process and will keep you guys updated.

QUESTION: how do i change the radio and boot animations in a rom?
PS: the good news is, i'm done with all the hard part, and just few small things remaining. Probably if anything else doesn't comes up, you guys should have a n1 kitchen within few days =D

shararti said:
QUESTION: how do i change the radio and boot animations in a rom?
PS: the good news is, i'm done with all the hard part, and just few small things remaining. Probably if anything else doesn't comes up, you guys should have a n1 kitchen within few days =D
Click to expand...
Click to collapse
boot animations are located either in /data/local or /system/media
radio flash will require you to change the update-script
you can look at the FRF50 update with the radio to figure it out ( or pm me if thats too difficult, its a little late else id do it myself)

Just make sure the radio is excluded by default.
Another thing about radios, the newest radio usually works on older roms, but old radios don't work on the roms released with and after the newest radio.

Related

[AUDIO FILES] Have a very OGG-y AudioResources.zip (EDITED 2:11pm)

IF I'M USING YOUR RESOURCES.ZIP, LET ME KNOW SO I CAN CREDIT YOU!
I didn't see anyone having done this before on a search, and I apologize if it's been done already. I put together all the audio resources I could find for ringtones, alarms, notifications, and ui, converted them all to very small .ogg's and put them in a new zip. It's a little over 9 megs and has a LOT of stuff. Enjoy.
Oh, and if you have more to add, post them. I'll convert them it and add it to the zip
DIRECTIONS FOR USE:
1. Unzip
2. IF you are using a media2sd script, put the media folder on your ext partition. If not, use it to replace the one on your phone. I recommend using adb, or just mounting the thing in linux. It'll make it simpler.
3. REBOOT and give your phone some time to index all the ringtones. It'll take some time.
AudioResources.zip:
http://www.lighthousesolutions.info/AudioResources.zip
EDIT:
A LOT of people are downloading and nobody is posting additional links, which means (I hope) that I didn't miss any sound files. I'm glad I could help people out, and if anybody else has anything to contribute please POST! Thanks.
Also, I forgot to post this the first time. Themers and rom developers (hell anyone) feel free to use the converted .ogg's in whatever you want. They aren't mine to start with, but I figure I better make the statement clear.
Enjoy
Dead link above
My compilation is on page 3 ~Mikey~
Thanks! Can't have too many random ringtones to choose from I say. Already got the giant mega audio resource list from the other topic that includes all the various android phones, this will just help more.
prash said:
Thanks! Can't have too many random ringtones to choose from I say. Already got the giant mega audio resource list from the other topic that includes all the various android phones, this will just help more.
Click to expand...
Click to collapse
I think this includes all of those, although if you find some that I'm missing, please post them. The main draw of this is that all of sound files are as tiny as possible, making it so you can fit them on internal memory if you want to, or just use less space. The entire thing is only 9.4 mb, and it includes the ringtones from the hero and magic.
Post any ringtones it doesn't contain so I can squish them down to tiny size too.
I can't find any media2sd scripts on the forum. Can any one point me in the right direction?
superGOAT said:
I can't find any media2sd scripts on the forum. Can any one point me in the right direction?
Click to expand...
Click to collapse
You don't have your rom in your sig, so my help will have to be very basic. I run cyanogen's experimental rom (not for the faint of heart) and huanyu's user customizable script. Other than that I can't offer much help. What I can say is that if you push the ENTIRE contents of this zip to your ext partition on your sd card and use huanyu's script with media2sd activated, you'll be fine.
Huanyu also has a version of his script for the stable series of cyanogens roms.
I have NO idea how to do media2sd on hero. I don't support hero as an os and will never use it unless the ENTIRE android community decides to go that route.
If you are using another rom let me know and I'll see what I can do.
I'm currently on Drizzy's newest hero build, but the guts are the same. I went back and did some research and that script is working thanks for the help.
superGOAT said:
I'm currently on Drizzy's newest hero build, but the guts are the same. I went back and did some research and that script is working thanks for the help.
Click to expand...
Click to collapse
No problem, and I'm glad they're working out for you. So far I've got over 100 downloads, so it seems people like this.
Anybody with any additional tones to be added? I'd really like to beef it up!
I'd love to give you some of miine but I don't have any that don't have a copyright next to it but if you want them anyway I'll upload them for you.
Thank you mate!
superGOAT said:
I'd love to give you some of miine but I don't have any that don't have a copyright next to it but if you want them anyway I'll upload them for you.
Click to expand...
Click to collapse
Are any of them for a released or soon to be released android phone? I could put together a "legal" and a "questionable" vesion, although the latter might have to be off the forum (hint hint). I'd like to keep the one on here being full of nothing but official android and htc ringtones for released and soon to be released (ie leaked) android devices.
Noob Question...
I'm running CyanogenMod-4.0.4 + Recovery 1.4 and the community hero rom and was wondering how I should go about implementing this audio resources zip. Do i apply the update from the recovery? Or is there some other way of getting them on?
You can push them to /system/media....but I'd recommend using hyanu's userinit.sh script instead. media2sd is FAR superior for the number of sound files were talking about here.
any chance of this being posted elsewhere? Was looking to download this, but the site doesn't seem to exist.
Can't use my host for any more hosting of FREE ringtones
awesome..! thanks
i may use it for DarkDream theme
Barina said:
awesome..! thanks
i may use it for DarkDream theme
Click to expand...
Click to collapse
I take no credit for creating these............
the #.ogg files in the notification folder are made by moonspoon.
BTW i just installed your theme..WOW
I couldn't get CMupdater to download it but i got it from your site
thanks im glad you like it
i tried the new cmupdater in 1.6 and i cant add my theme server without FC
I'f i was you till cmupdater is fixed, place a direct link to the file on your site
thanks for posting this stuff! very nice
Sorry for being such a noob. But could I bother someone to give me steps on pushing this to my phone? (mytouch).

Ideas for a Custom Rom

Hello everyone,
I was reading all the posts about Custom Roms and I wanted to make something like an "XDA-Rom"... Maybe it would be better if I explain what I mean
Beginning from the system, I'd say it should be a very lightweight Rom (like the Gilgamesh one), so, without almost all the LG crapware. But I'd keep only few things of this softwares:
- contact manager (so far it's the best one I've found, but maybe because I lack of experience)
- keyboard (on some videos they say it's the fastest one, but I may be in error)
- LG home and Home switcher, so that we can keep the mirroring app working when needed.
Then, I'd add the last MoDaCo kernel (the ROM should be working in EXT4, if I understtod correctly, this shall make the phone faster), maybe we could make a proper boot animation, and just few app that are (in my opinion) the only really needed, like the gmail app, the calendar one and only the basic things. We could even update the baseband and root the phone directly from the rom, so that after a fresh install it's already running. I'd replace even the LG lockscreen, that is really nice, but it's too slow (when I switch on the screen, I see the home and then the locked screen, this shouldn't happen with the default lockscreen).
Ofc, any suggestion is welcome
Thanks for reading, and I hope my idea is not that bad
I agree on the bootanimation.
Only on that? d'oh, I wrote for half an hour btw, I'd add Root Explorer as default as well... but I don't know how to do, I mean, would be enough to create the ROM with the kitchen (really a nice tool!) and then edit the *img files adding the software I want in the /system/app directory? Maybe this is a noobish question, but it's the first time I even get closer to creating a custom rom
Oh, integrate BLN to have notifications would be a great idea ! (if you touch the kernel)
tiwiz said:
Only on that? d'oh, I wrote for half an hour btw, I'd add Root Explorer as default as well... but I don't know how to do, I mean, would be enough to create the ROM with the kitchen (really a nice tool!) and then edit the *img files adding the software I want in the /system/app directory? Maybe this is a noobish question, but it's the first time I even get closer to creating a custom rom
Click to expand...
Click to collapse
the root explorer is not for free.. so forget about this
Why? Install modaco and use filexplorer and delete all thing u dont want instead
Sent from my LG-P990 using XDA Premium App
For the experience, I'd like to test
Just use the online kitchen...
I was actually 30 mins from posting a pretty close ROM to what you mention here yesterday, but built the one I'd like online instead (except for some tweaks I put in laster on).
If people is more open for a ROM like this for direct download, I'm happy to compile/maintain it Just thought that it wasn't needed...

Potential Security Issue - with EMAIL/EXCHANGE APK's for ICS ROMS

I have been using aosp's rom v13, within it there are the googleemail and googleexchange apk's
within rom v21 those have been replaced with email and exchange apks
i have ran CRC checksums on those two versions and they're both the email and exchange apks are different between them. The v21 file sizes are substantially bigger but nothing in the change log tells us why.
the gapps from koushes ics thread has different crc's for those apks than aosp's v13 or v21; they don't match either of aosp's included apks.
This could all be nothing but I think we need an answer here.
Can someone talk about what's going on here? Since these are GAPPS they are the most sensitive apps, I'm sure people will get mad for me making a thread about this but I'm honestly surprised no one has questioned this earlier. I trust the dev's, otherwise I wouldn't be here flashing their roms, but that doesn't mean I shouldn't be able to question something like this openly either. I just want to understand why the email apk and exchange apk are so different from rom to rom within the same dev as well as why they're different from dev to dev when they share the same version.
Thanks
You have my support. I would like to know what the explanation is. I don't assume any I'll intent but it is a valid concern.
I looked at each apk content and there are some extra images in aosp version and the manifest file also but I don't think it was him putting it there. My best guess would be that he compiled it using different options.
If I'm not mistaken, email.apk is part of android os and therefore source is available. When compiling from source, not all files will come through the same.
I would still prefer that Jim stops by this thread and explain why his version is different. I'm sure he has a reason.
...and still no reply? Can anyone reach out?
I'd suggest going to the dev's thread, asking the question and linking to this thread.
Did that to no avail. I'm back to gingerbread.
Will someone get access to my emails, etc.? Some fill me up on this? Please.
You can set different levels of compression when making the APK files. Some devs remove stuff and others add, no two will be exactly the same.
Use apktool to decompile the packages and then beyond compare to compare to see the difference.
Most devs deodex the packages so they will be larger when compared to a Nexus dump from Google that has the odex files.
I have checked out most ICS ROMs in this forum and nothing fishy like that is going on. I always look at the ROMs before installing just to be safe.
AndroidUser00110001 said:
You can set different levels of compression when making the APK files. Some devs remove stuff and others add, no two will be exactly the same.
Use apktool to decompile the packages and then beyond compare to compare to see the difference.
Most devs deodex the packages so they will be larger when compared to a Nexus dump from Google that has the odex files.
I have checked out most ICS ROMs in this forum and nothing fishy like that is going on. I always look at the ROMs before installing just to be safe.
Click to expand...
Click to collapse
Thank you! I don't know how to use apktools so I just want to be clear...you've looked at the apk for email and exchange for both the v13 and v19 vs what's included in the gapps from koush and you've determined that they're all actually the same?
For what it's worth, if the dev uses a different system key to sign everything, it will cause the checksums to be off. ODex vs DeODex (Optimized vs nonoptimized) can very easily double things in size. Nothing creepy about that.
In addition, Mail and Exchange are not part of GAPPs, they're part of system apps, meaning the source for them are released (as opposed to GAPPs). This means they go through the compilation steps just the same as the rest of ICS.

Topics and questions regarding compiling AOSP based Roms vs other sources like CM

I have decided to rework the thread to ovoid any confusion as the intent of posting this thread was to ask questions about compiling custom Roms from AOSP source that someone like myself who gained their development experience on other devices that building from pure AOSP code was not an option and are not as familiar working with AOSP. In the past my own experience comes from using and modifying for example the Cyanogenmod source so after attempting to now base my Rom on AOSP this time around with Lollipop have run into a few unfamiliar differences. As each question or topic is addressed I will update the Op. The hope is not only will I find solutions or answers to my own questions but that others in the same position will also be able to find use of the discussions posted in this thread.
Compiling the AOSP source into a format that can be safely flashed using a custom recovery. This was a 3 part question the first was just simply how to compile AOSP in a format other then .img files that can be flashed using a custom recovery without the need of flashing through fastboot or needing to use the adb sideload option.
1, Compiling AOSP into the for of an update.zip.
This was answered in short by know.patience by suggesting to use the “make otapackage” command in place of "make" to start the build. Was also made aware that a few modifications would need to be made to avoid producing an update package that does not use the new block format but instead the old style zips we are most used to seeing.
2, Now can create an update.zip using the “make otapackage” command ran into an issue that by flashing the update.zip produced would in the process replace the custom recovery used to flash with the Nexus Stock recovery. This was answered by Lethargy who suggested and provided a Link for the following commit.
For getting rid of the AOSP recovery:
https://github.com/Lethargy/android_build/commit/48521e167c642db76c9d4f52b1c63f9abc7f707f
https://github.com/Lethargy/android_build/commit/1d9224bd45ef2b4f5601a157de2bfe3bb1c95558
3, Now can create an update.zip using the “make otapackage” and after applying the above commit are now able to flash the update.zip without replacing the recovery Lethargy also provided links for the following commits.
To get rid of the block-based zip format:
https://github.com/Lethargy/android_build/commit/4d458300d935a3a9d893a590286cb578dcf54db2
You'll also want to make sure you have this commit so it doesn't flash awfully slow in recovery (8~ minutes, but only around 1-2 minutes with this commit):
https://github.com/Lethargy/android_system_extras/commit/52f8d5fc3edfacd112827d0a41516c1dc5f4a468
This one isn't required but you may as well:
https://github.com/Lethargy/android_build/commit/242be9ae4f05e3cb1d39d635cac7147ff904700c
Compiling using the AOSP Master branch vs release branches. In following the directions provided on the Google development site are given the command for downloading the source code using the Master branch. Using the Master branch as apposed to a release branch such as android-5.0.2_r1 or lower have found that the source compiles just fine but have run into one issue and just a general question that a little explanation would be helpful for general understanding of the AOSP Master branch.
The issue is that after flashing a Rom compiled using the Master branch everything in the Rom works as expected other than the radio. I have so far using the same exact vendor blobs as compiling a release branch have not had a signal and baseband version is listed under about phone as unknown.
The general question is that the android version listed compiling a Rom using the Master branch is version 5.0.50.50.50.50. In general I have yet to understand what this version number represents and very little to no information available via the Google Box.
Between the both I now wounder if the Master branch is intended for actual use or if so what changes are required so the baseband version is recognized and radio / Ril will work?
Quick Answer:
Google first commits new code into master and then is later tagged with an update for realease so in generall many things can be broken and the master branch is and not intended to be stable so if building from master expect that things will be broke or buggy.
Compiling Rom and Kernel together. For those of us again used to compiling using say the CM code are now used to compiling the Kernel along with the rest of the code. I know it is easy to just compile the Kernel and include in the device tree but for those of us who would still like the Kernel compiles with the rest of the code there is no information available on the Google Developers site for doing so and there seems to be a few differences as have tried just using the lines used in the CM Hammerhead device repository. I have come across these commits from Cl3Kener that should help. Hate posting other developers code but is on Github so is there for the public at large. So far have only tested as is so will update if finding not all changes are necessary or can be modified.
Inline Kernel Building
https://github.com/OptiPop/device_lge_hammerhead/commit/7de8fd95b6df16cb6311161d5048874d69cf1cb1
https://github.com/OptiPop/device_lge_hammerhead/commit/87768896f4eb8fcd989ce3b8492ca65305513851
https://github.com/OptiPop/device_lge_hammerhead/commit/5460eb3aa76ea5d813f64a3b3bab6ace1be6de68
Adding Pre-Built APK's
Seems Sprint users need a few apk's for updating prl and what not that are included into the Stock release but are not part of the AOSP code. For some reason through vendor or even device have tried adding these apk's into the build. First try I created a sprint vendor section and received a few errors untill learning would need to add sprint into a vendor white list found in build. Will post link to file later. After found the extra "Services.jar" I found in the stock image not found in the aosp compiled Rom did copy into the build but the apk's had not. Looking in the other vendor blobs noticed lge adds "qcrilmsgtunnel.apk" so followed the example and even tried just adding the other spk's into lge expanding the list used for adding in "qcrilmsgtunnel.apk" but still no luck. Also have tried adding through the device files for Hammerhead just to get them into the Rom for testing and still no luck. If this was CM or any other Rom not using pure aosp this would have been a 5 minut project so need to do some aditional homework.
Again think this thread could be a good resource for developers who are new to building their Roms around AOSP so wanted to include everything I run into during the process of moving away from using a heavily modified CM based code as the base of my Rom to using AOSP in its place so developers who are or in the same process or for those in the future can use as a resource to quickly adjusting. I have been building CM based Roms like Starship for years and after hours of working on other aspects to suddenly be stumped by these small differences between platforms can be very frustrating.
to the OP:
answer to your first question comes in two parts.
a) use 'make -j# otapackage' will generate a zip that is flashable in custom recovery.
b) if you plan on adding other files after the zip is made, you will need this info here:
https://github.com/android/platform_build/commit/26e6619c37e294fe2ee63aaa759e0ac861775ce8
There are some modifications needed to generate the OG zip files instead of the new "block" format.
Google hasn't released the 5.0.1 image for the N5 but that doesn't mean you can't build it and install it yourself. I'm running it and it seems okay to me so far although I'm hardly an expert.
simms22 said:
op.. this section is only for developers, to get work done. if you have questions, they belong in the q&a section. you arent new, you should know this. again, this section is only for developers, mot for the normal xda folk to post questions. you have a q&a section just for asking questions. please, ask a mod to move your thread there.
Click to expand...
Click to collapse
I am building a customized AOSP Rom I am interested in sharing so was looking for help or direction in creating an update zip that can be flashed in a custom recovery like TWRP. I am not used to compiling AOSP and with the help of know.patience in the first reply am now able to compile an update.zip I can flash in TWRP but in doing so it also replaces TWRP with the Stock recovery. I have still been using the .img files to flash personally but am still trying to figure out how to solve the recovery replacement issue. I still have other features I am adding and testing before I would like to post my work but before I get to that point I still need to figure out my recovery replacement issue. Maybe using the words personal use may have been confusing but at the moment until ready I have only been using my work personally but would like to at some point post and share. I also have work that is not AOSP based I am sharing in the Android Development section but I have been building CM and other source based Roms and sharing for years. This is the first device I have been able to build AOSP and still have a few things to figure out before sharing any of my AOSP based work. I am otherwise not sure why you think these are questions for general Q&A.
I started this thread in Android Development as there was only about 4 posts in this section and I see many AOSP based Roms in Android Development who's developers obviously know the answers to my questions so tried to get away posting there in hope one of these developers could help or like in the first response point me in the direction of a commit before the thread was moved by a mod into this section. Do you think someone in the general Q&A section is better equipped to help answer questions about compiling an AOSP based Rom in the form of an update.zip that can be flashed in TWRP without also replacing TWRP with the Stock recovery?? Would also be nice knowing what changes in the code need to be made in compiling an old style update.zip that does not use the new block format. This would be a bonus but overall not %100 needed as instead of moving files around after the code has been compiled have added init.d support and first have all the files I want moved into a staging directory and then form an init,d bash script to move the files during first boot and remove those that are not needed like this example I used in my CM based version of the Rom I am trying to update for AOSP for 5.0.
https://github.com/Starship-Android/android_device_starship-common/blob/cm-11.0/app-update
https://github.com/Starship-Android/android_device_starship-common/blob/cm-11.0/cleanup
I must seriously be underestimating the knowledge and in general the types of questions being asked and answered in the general Q&A section.
Honestly if not for the amount of times thanked I would think this comment was not so much about helping or community but more about someone trying to puff themselves up by trying to appear important by making decisions about what questions are worthy of being asked but judging by the number of times they have been helpful I am thinking its either a case of not reading or understanding the question being asked or my own inability to express my questions in the proper manor. Either way its definitely not about taking up resources in a section with less than 10 total posts. The frustrating part as a community as I like to believe we are all in is that why I worked on other parts in updating my Rom had expected that at least more than one developer out of all the AOSP based Roms posted in the development section would have helped me with this one part. Its not like I am asking how to be a developer just a resource to help with two simple things I am sure I could have figured out and will most likely still figure out without any help. Overall my thoughts behind posting this question was that why I am working to figure out something a bit more time consuming at least more than one person would be helpful enough to copy and past a commit.
XDA is weird in that with other devices all the developers would join a team and start a shared group of repository’s for one another to use in trying to make the best possible experience and options for everyone. For example in the op I posted an example of hours of work I did showing what libraries are needed by one another just so others could use it also in trying to port as much as possible for in that case the Galaxy Mini. Then with other devices like seems to be the case with the N5 its all about competition and what I am starting to call the smartest person in the room syndrome. Its just a shame there are only 5 maybe 6 threads posted in this section and I think that says allot about the community in general. So many good things could come about if we just tried to be helpful and pull as much knowledge together as we could. Anyhow think its time for ending this rant.
chairshot215 said:
compiling an AOSP based Rom in the form of an update.zip that can be flashed in TWRP without also replacing TWRP with the Stock recovery?? Would also be nice knowing what changes in the code need to be made in compiling an old style update.zip that does not use the new block format.
Click to expand...
Click to collapse
To get rid of the block-based zip format: https://github.com/Lethargy/android_build/commit/4d458300d935a3a9d893a590286cb578dcf54db2
You'll also want to make sure you have this commit so it doesn't flash awfully slow in recovery (8~ minutes, but only around 1-2 minutes with this commit): https://github.com/Lethargy/android_system_extras/commit/52f8d5fc3edfacd112827d0a41516c1dc5f4a468
This one isn't required but you may as well: https://github.com/Lethargy/android_build/commit/242be9ae4f05e3cb1d39d635cac7147ff904700c
For getting rid of the AOSP recovery: https://github.com/Lethargy/android_build/commit/48521e167c642db76c9d4f52b1c63f9abc7f707f then https://github.com/Lethargy/android_build/commit/1d9224bd45ef2b4f5601a157de2bfe3bb1c95558
Lethargy said:
To get rid of the block-based zip format: https://github.com/Lethargy/android_build/commit/4d458300d935a3a9d893a590286cb578dcf54db2
You'll also want to make sure you have this commit so it doesn't flash awfully slow in recovery (8~ minutes, but only around 1-2 minutes with this commit): https://github.com/Lethargy/android_system_extras/commit/52f8d5fc3edfacd112827d0a41516c1dc5f4a468
This one isn't required but you may as well: https://github.com/Lethargy/android_build/commit/242be9ae4f05e3cb1d39d635cac7147ff904700c
For getting rid of the AOSP recovery: https://github.com/Lethargy/android_build/commit/48521e167c642db76c9d4f52b1c63f9abc7f707f then https://github.com/Lethargy/android_build/commit/1d9224bd45ef2b4f5601a157de2bfe3bb1c95558
Click to expand...
Click to collapse
Thank you this is well beyond what I was looking for and don’t worry I make it a point not to send out PM's with questions that can be helpful for others as well. Otherwise would have blown up the AOSP Rom posters in development but thanks for the information.
chairshot215 said:
.. and don’t worry I make it a point not to send out PM's with questions that can be helpful for others as well..
Click to expand...
Click to collapse
If you mean "I'll probably ignore you if you try asking for support over PM.", that's part of my forum signature.
If you need anything else feel free to @‬‬mention me in a thread, though.
I reworked the Op to avoid confusion as Mods have been moving the thread around into different sections. I personalty believe these questions are more geared towered development than general Q&A but at least at the moment I appear to be wrong about that. Never know though as in the past one day one of the mods may decide to move the thread back into its intended location but until then I guess these topics will be of better use to general users than developers.
chairshot215 said:
I reworked the Op to avoid confusion as Mods have been moving the thread around into different sections. I personalty believe these questions are more geared towered development than general Q&A but at least at the moment I appear to be wrong about that. Never know though as in the past one day one of the mods may decide to move the thread back into its intended location but until then I guess these topics will be of better use to general users than developers.
Click to expand...
Click to collapse
You should include the other commit (https://github.com/Lethargy/android_build/commit/1d9224bd45ef2b4f5601a157de2bfe3bb1c95558) which fixes building since the first one results in "IndentationError: unexpected indent".
Lethargy said:
You should include the other commit (https://github.com/Lethargy/android_build/commit/1d9224bd45ef2b4f5601a157de2bfe3bb1c95558) which fixes building since the first one results in "IndentationError: unexpected indent".
Click to expand...
Click to collapse
Thanks for the heads up, when testing these I also cherry picked a few other things that looked related. Have to double check but may have forked the repository’s from you so would receive credit if anyone decided to look over my repository’s. Well overall my personal Github has been pretty bare as in the past most work was done on more obscure Virgin Mobile devices with only a few developers so we would pretty much create an organization for all the developers to use.
https://github.com/MTDEV-CM7
https://github.com/MTDEV-CM10
https://github.com/vmobi-triumph
https://github.com/MTDEV-KERNEL
https://github.com/MTDEV-MIUIv4
https://github.com/MTCM9
https://github.com/MTCM10
https://github.com/HTCCM9
https://github.com/HTCCM10
https://github.com/HTCStarShip
https://github.com/HTCUbuntu
https://github.com/vmobi-shooter
https://github.com/vmobi-gogh
These days have been keeping everything under Starship-Android.
https://github.com/Starship-Android
Have 2 other members listed who I had worked with in the past but has otherwise been a solo organization with one of the other members who decided on going with the Moto X and Verizon over the N5 and showed little interest in his 2012 version of the N7 as it was intended for being a Nexus only device line up and the second being my Kernel Guru from a few devices back who mainly joined to help me out with a few things but ultimately what I am getting around to is this is the first time working %100 solo. Have to say without having anyone to bounce off ideas and share findings with things definitely move much slower and take a bit of getting used to. Is also the reason for starting threads like this. Most of this stuff looking in the developer section appeared to be pretty common knowledge but having never worked from pure AOSP before was slowing down other development for about a week just to figure out what seemed like half the community had already known and with what probably took at the most 5 or 10 minutes of copying and pasting commits probably saved me a weekend of sifting through github and testing. I hope by creating a thread like this will be able to do the same for others.
Hi guys,
Anyone manage to fix RIL problems with master branch?
I also build AOSP roms so for sure i will hangout here
Sent from my AOSP on HammerHead using XDA Free mobile app
malcho said:
Hi guys,
Anyone manage to fix RIL problems with master branch?
I also build AOSP roms so for sure i will hangout here
Sent from my AOSP on HammerHead using XDA Free mobile app
Click to expand...
Click to collapse
Never tried.
ODEXED
i am successfully build cm12 with fully odexed. now i like to odex some prebuilt apk also but LOCAL_DEX_PREOPT=true not odexing prebuilt apk. can somebody help me? already DEX_PREOPT=true working fine.
soorajj said:
i am successfully build cm12 with fully odexed. now i like to odex some prebuilt apk also but LOCAL_DEX_PREOPT=true not odexing prebuilt apk. can somebody help me? already DEX_PREOPT=true working fine.
Click to expand...
Click to collapse
Why do you need to odex a prebuilt apk?
Not sure if what you want is even possible.
But if odexing your prebuilt apk is necessary then why not odex it then include the .odex with the prebuilt?
Lethargy said:
Why do you need to odex a prebuilt apk?
Not sure if what you want is even possible.
But if odexing your prebuilt apk is necessary then why not odex it then include the .odex with the prebuilt?
Click to expand...
Click to collapse
suppose i want to odex gapps. how to?
malcho said:
Hi guys,
Anyone manage to fix RIL problems with master branch?
I also build AOSP roms so for sure i will hangout here
Sent from my AOSP on HammerHead using XDA Free mobile app
Click to expand...
Click to collapse
Nothing so far, I downloaded the master and 5.0.2_r1 branches and have loaded both in meld for looking over differences but have not yet identified from the dif between the 2 branches that is responsible for ril working in release branch but not master. Still have allot to look over though still. Still have not found a decent explanation of the master branch to know if its recommended to build from but still just for Knowledge sake am interested in knowing. At first thought maybe apn's but not so sure with baseband also listed as unknown from my Master branch builds.
chairshot215 said:
Nothing so far, I downloaded the master and 5.0.2_r1 branches and have loaded both in meld for looking over differences but have not yet identified from the dif between the 2 branches that is responsible for ril working in release branch but not master. Still have allot to look over though still. Still have not found a decent explanation of the master branch to know if its recommended to build from but still just for Knowledge sake am interested in knowing. At first thought maybe apn's but not so sure with baseband also listed as unknown from my Master branch builds.
Click to expand...
Click to collapse
As far as i know all the patches goes to master branch then from this branch ,if they are ok,is distributed to lower branches.I also didn't find info why is named as 5.0.50.50.I will try to investigate this ril problem
malcho said:
As far as i know all the patches goes to master branch then from this branch ,if they are ok,is distributed to lower branches.I also didn't find info why is named as 5.0.50.50.I will try to investigate this ril problem
Click to expand...
Click to collapse
Thanks will definitely update the Op with any findings. Was very surprised to find the thread again as it has now been moved 4 times by 4 different Mods, some bounce it to general Q&A and then is bounced back here by another. I understand its not comprised of the most advanced development topics but with that said is still way more advanced than the topics being discussed by general users over in the general Q&A section. I had just thought it would be a nice one stop place for learning the basics of AOSP development. With the constant moving and scolding messages being received one would think the threads very existence is up there with crossing the streams and threatens the existence of Android development.
@chairshot215 Thank you for starting this thread. Thank you @Lethargy for all of your insight. I like to do my own perosnal builds every once in a while for my nexus devices. What I have observed over the years is that the Master Branch will sometimes have funky version numbers like you have described. One thing to consider is what @malcho mentioned. If all commits indeed go there first before the respective branches(although this may not entirely be the case), then it is likely that some things may be broken in the master branch from time to time, hence the ril problem. I think with the galaxy nexus I ended up running into issues from time to time with the master branch, and from there learned to build for specific branches/tags. For instance, there are times when items within a specific branch will be ahead of master in some areas and behind it in others, as in this link to platform_build for lollipop release https://github.com/android/platform_build/tree/lollipop-release. So with that, it is probably in our best interests to just use specific branches.
Milly7 said:
@chairshot215 Thank you for starting this thread. Thank you @Lethargy for all of your insight. I like to do my own perosnal builds every once in a while for my nexus devices. What I have observed over the years is that the Master Branch will sometimes have funky version numbers like you have described. One thing to consider is what @malcho mentioned. If all commits indeed go there first before the respective branches(although this may not entirely be the case), then it is likely that some things may be broken in the master branch from time to time, hence the ril problem. I think with the galaxy nexus I ended up running into issues from time to time with the master branch, and from there learned to build for specific branches/tags. For instance, there are times when items within a specific branch will be ahead of master in some areas and behind it in others, as in this link to platform_build for lollipop release https://github.com/android/platform_build/tree/lollipop-release. So with that, it is probably in our best interests to just use specific branches.
Click to expand...
Click to collapse
Thanks for the response and have definitely learned its better building from branches with a release tag. Still very curious why and how the branches are structured so thanks for the explanations.
Way totally off topic for the thread but landed a brand new SSD and decided to install everything fresh. After everything was set back up and wanted to start building I ran my usual,
-j'grep 'processor' /proc/cpuinfo | wc -l'
a very old habit before fully understanding what number to use after -j so used grep to figure it out based on Googles recommendation. The command did not work so removed the grep and just made it -j4 but also with 0 success. At first just figued I missed somthing setting everything back up and "make" is just not working but wrong again as running "make" command without -j of any number works just fine.
Also tried this with CM12 as I am doing 2 versions of my Starship Rom. One from AOSP and one using CM. Figured AOSP would be special for Nexus users why also having a version for CM I can make most changes by adding a Starship Device Tree could easily port the Rom to any device running CM supported or not.
https://github.com/Starship-Android/android_device_starship-common/tree/cm-12.0
Also found why compiling CM that -j also results in an error
Invalid lunch combo: cm_hammerhead--j4
No such item in brunch menu. Try 'breakfast'
So far have not found anything using the Google Box so figured may as well ask. If have not figured out by now I have no shame in asking questions. Oddly enough that is for things that are probably relatively simple. Took a better part of a week figuring out how to start CM using the Now Launcher and setting up init.d bash scripts for moving around and replacing libs after learning the Gapps package includes libs that will not work so the solution needed to be that the CM Gapps package libs needed to be replaced with either stock or libs pulled after installing the Now Launcher from the Play Store after flashing Gapps and the Rom staring. Also then what if user updates and wipes the system partition after the new and updated llibs have been moved into place. Anyhow point of story is things like this I will just figure out without bothering anyone but for the cant believe I need to stop what I am working on to figure out something most likely very simple and can be answered with very little time spent I have no shame in just asking. Not that someone else’s time is less important but like I have mentioned before is frustrating just after spending hours or days figuring out something asked in dozens of threads is just frustrating getting caught up or loosing momentum and thought processes over something so simple there are little resources available. Also I assume most devs have the same experience when you have an idea or thought behind resolving an issue that once you stop and change direction it just sometimes never comes back and that short time you had I guess can be called an epiphany is gone once going back. Otherwise thats how I justify asking dumb ars questions.

APK Manager / Deodex / Odex Manager

So, I have put together an actual Windows program for a lot of Rom Builders. I used to build a lot of Roms, but really don't do much of it any longer. What I know though, is the tool I built is extremely easy to use and very effective. I thought some of you would very much enjoy this tool. It will also allow a lot more people to start theming and tinkering It has built in Draw9 support and will automatically detect what versions of Java you have and allow you to select which one you would like to use.
So I am going to post it here for now in the Note 4 forum for a few of you to install it and check it out. It will support many phones, if not all. All you have to do is make sure you have some type of Java program installed on your PC. The rest is all self-contained and updated.
The first thing you are going to need to do after install is to go into setup and setup the paths accordingly, to your liking. Once this program is setup it runs great. I have built it with threading, so it won't lag as you are working along.
I will post some screen shots for you all to check out.. I would use these as examples of what your environment should look like. Also, make sure you pull the system, from the adb options tab, from your phone as the first step before doing anything else, it will use the framework files as needed to work. This path is also where your deodex setup paths of originals should point to, the pulled files for app and framework.
Enjoy !!!
Link: https://drive.google.com/file/d/0B31X8bH_5Gl-eUtJODBhcUdPRDg/view?usp=sharing
Update: ** Updated file to fix a small issue.. ** EST: 10:24 p.m.
Thank you for this! Going to take a look into it here tonight!
Updated OP..
Made some modifications to the build..
Very Cool, thank you for creating this tool, I'm going to give it a try tonight after a few Christmas parties this evening.
Sounds like a useful tools. I will check it out when my retail phone gets rooted.
za33ck said:
Very Cool, thank you for creating this tool, I'm going to give it a try tonight after a few Christmas parties this evening.
Click to expand...
Click to collapse
Oh great, it will be even better after a few drinks in you..
Can you post source code as well ?
This looks awesome, so what do we use? Do we take a Odin flash able ROM....I don't understand how to use it?
Sent from my Definitive v1.4 Note 4 using Tapatalk
bdorr1105 said:
This looks awesome, so what do we use? Do we take a Odin flash able ROM....I don't understand how to use it?
Sent from my Definitive v1.4 Note 4 using Tapatalk
Click to expand...
Click to collapse
You just plug your phone in and wait for it to detect it.
From there you need to setup the program, look at the screen shots.
gatesjunior said:
You just plug your phone in and wait for it to detect it.
From there you need to setup the program, look at the screen shots.
Click to expand...
Click to collapse
So basically whatever mods you currently have you then make flushable?
I guess what I am asking is should we Odin the stock base that's odex, pull the folders with your program, deodex it and make whatever mods?
Biggest question, how do we make it flushable, I am extremely new to this
Sent from my Definitive v1.4 Note 4 using Tapatalk
Normal
Normal ? when selecting device? See attached Picture
bdorr1105 said:
So basically whatever mods you currently have you then make flushable?
I guess what I am asking is should we Odin the stock base that's odex, pull the folders with your program, deodex it and make whatever mods?
Biggest question, how do we make it flushable, I am extremely new to this
Sent from my Definitive v1.4 Note 4 using Tapatalk
Click to expand...
Click to collapse
So, I am assuming, you mean flashable. Look around for update.zip files associated with Android. You need to make sure you are rooted / dev edition in order to even pursue this. If you are then do some research on update.zip files and understanding our partition table for our phone or your phone, etc..
Wifi tethering unlock
I have my Note 4 DE ordered/shipped by Samsung. I have never used this program before, how easy is it to do your own Native WiFi Hotspot modification? Or is there any step by step I have missed somewhere? Basically, I am wanting to root, TWRP and then change a few things on my own.
Thanks!
gatesjunior said:
So, I have put together an actual Windows program for a lot of Rom Builders. I used to build a lot of Roms, but really don't do much of it any longer. What I know though, is the tool I built is extremely easy to use and very effective. I thought some of you would very much enjoy this tool. It will also allow a lot more people to start theming and tinkering It has built in Draw9 support and will automatically detect what versions of Java you have and allow you to select which one you would like to use.
So I am going to post it here for now in the Note 4 forum for a few of you to install it and check it out. It will support many phones, if not all. All you have to do is make sure you have some type of Java program installed on your PC. The rest is all self-contained and updated.
The first thing you are going to need to do after install is to go into setup and setup the paths accordingly, to your liking. Once this program is setup it runs great. I have built it with threading, so it won't lag as you are working along.
I will post some screen shots for you all to check out.. I would use these as examples of what your environment should look like. Also, make sure you pull the system, from the adb options tab, from your phone as the first step before doing anything else, it will use the framework files as needed to work. This path is also where your deodex setup paths of originals should point to, the pulled files for app and framework.
Enjoy !!!
Link: https://drive.google.com/file/d/0B31X8bH_5Gl-eUtJODBhcUdPRDg/view?usp=sharing
Update: ** Updated file to fix a small issue.. ** EST: 10:24 p.m.
Click to expand...
Click to collapse
Nice,
I just pulled my /system/
Thanks!!!
radionerd said:
Nice,
I just pulled my /system/
Thanks!!!
Click to expand...
Click to collapse
Great..

Categories

Resources