Related
Okay, I'm writing this because I want to help any other newbies trying to learn how to reverse engineer. The technical details involved in this are extremely daunting, so the purpose of this tutorial is to first explain in layman terms exactly what you're trying to accomplish and what to expect. Then we'll go over the details. That way you're not completely blind going into this. I'm fairly new to the scene, so I'm not as knowledgeable as everyone else. If you see any errors in my post, let me know so I can change. I'm going to assume you know a little bit of Java, can find your way around a computer, and know nothing about Android. The techniques used should work with other Android phones. For this tutorial I'm using Windows 7, Cygwin, and my stock (not rooted) EVO 4G mobile phone.
The FM tuner for the Evo is run by a Broadcom chip: BCM4329. This chip is pretty amazing in that it does wireless, bluetooth, and it has an FM receiver/transmitter. We're interested in the FM receiver / transmitter.
Now, all android phones are based on a Linux kernel. Basically they're Linux running computers. The Android operating system is then installed onto the linux system. Every app is then run off of Android.
Android is based on Java but it is not a Java system. It uses a virtual machine called Dalvik. Google did this to get around licensing issues with Sun Microsystems. So they pretty much invented their own machine language (called byte code) for the Java language. This makes things complicated for the reverse engineer because from what I've read, once Java is converted into this machine language or byte code, it can't be converted back.
So let's rehash.
If you were programming strictly in Java, you would see these extensions:
Java source code = .java
Compiled Java source code = Java byte code = .class
Compressed file to package your program = .jar (Java Archive)
But since you're programming in Android and Dalvik, you will see these:
Java source code = .java
Compiled Java source code = Dalvik byte code = .dex
Compressed file to package your program = .apk
(I haven't mentioned this, but HTC further Optimizes their .dex code)
Optimized Dalvik byte code = .odex
I'm writing all of these down because it's very easy to get confused with all of the extensions. (for me at least!). remember how I said once you go dex, you can't go back to java? That's where JesusFreke comes in. He's a senior member of XDA, and he created "baksmali" and "smali", two programs that can convert the Dalvik code back into a human readable format. These files have extensions of .smali
Decompiled Dalvik byte code = .smali
But what can you do with .smali files? That's where this other senior member, brut.all comes in: He developed apktool. apktool takes JesusFreke's work to the next level. This program in conjunction with NetBeans, actually lets you trace through any program using the .smali code taken from JesusFreke's programs!
apktool does this by converting those .smali files into "fake" .java files that can be used by the NetBeans (program that compiles and makes java programs) IDE. I say "fake" because apktool embeds the .smali code into java files as comments. However, once you attach a debugger to NetBeans, you'll see that the debugger will follow line by line every execution statement found in the smali code!
So...... you can take the program you want, plug it into Net Beans using a debugger (using the default ddms command provided by Android SDK), and you can trace everything you do in the program. I have it connected to my phone, so whenever I push a button while running my HTC FMRadio app or unplug my headphones,I see the corresponding response to the HTCFMRadio code I have loaded in NetBeans. I can now see in real-time how the program operates from my own interactions... JAM.
Technical Aspects: How to get from ground zero to tracing HTCFMRadio?
1.) Download Android SDK - Go to google development site and follow instructions: Make sure to download the latest Java JDK. Once that is installed, download NetBeans 6.8. Unfortunately, smali debugging does not work with the lastest versions of NetBeans.
Download the "Java SE" version for minimal space
http://netbeans.org/downloads/6.8/index.html
You can follow the rest of Google walkthrough and download Eclipse and ADT plugin, but it's not pertinent to this. You're going to be using adb and ddms from the android SDK extensively, so make sure the path for </android SDK/tools> is included in the PATH variable in your ENVIRONMENT SETTINGS. To get here, right click My computer, click properties, Advanced Settings, ENVIRONMENT SETTINGS.
2.) Search for 7z and download it. It is an awesome and free compression tool that will be extremely useful. It can be used to "unzip" .jar, .apk, and other compressed formats.
3.) Get the Radio app. You can do this by going to "shipped-roms" website, downloading the latest Supersonic image, and following the directions in the unlockr tutorial for HTC kitchens at the unlockr website... (once you have extracted the files from the image, you can look in the system/app and system/framework directories to get the files listed below) or:
you can pull the following files from your phone:
Using the command prompt type (and with phone plugged in, and with USB debugging enabled on phone):
adb pull /system/app/HtcFMRadio.odex
adb pull /system/app/HtcFMRadio.apk
adb pull /system/framework ./framework
This will put HtcFMRadio.odex and HtcFMRadio.apk in the current directory and create a framework directory with more files. A couple of the files in the framework are needed for the HtcFMRadio app, but for simplicity, we're just going to pull the whole directory.
Now that we have the files, we have to make a few changes to make the app installable and to be viewable by the debugger. To do this we have to decompile the .odex format into a human readable format we can edit. That brings us to:
3.) Download baksmali and smali from Project Hosting on Google Code (google search smali).
Usually an Android application is made up of one file, an apk file. Inside the apk file is an AndroidManifest.xml file, a classes.dex file (compiled Java code for the program), and other folders. The other folders contain either graphics or other .xml files that tell the program how it should look to the user. We don't have to worry about those for now. This is important because APKTOOL only opens programs set up this way. But wait up? We didn't download one .apk file, we downloaded an .apk file and an .odex file! What gives? Well, if you right click the apk file and open it (using 7z), you'll see that it's missing the classes.dex file. The dex file for the app is actually the HtcFMRadio.odex file we downloaded. So, to make this system app more like a nominal app, we have to find a way to convert the HtcFMRadio.odex to a classes.dex file. That's easy with baksmali and smali!
Once you download goto command prompt and type:
java -jar baksmali-<version>.jar -d framework -x HtcFMRadio.odex
(Remember to match baksmali-<version>.jar with the filename of baksmali you downloaded)
If done correctly, you should see a newly created \out directory
This creates an out\com\htc\fm directory with many .smali files.
Now let's reverse the process and put it back as a dex file. Type at command prompt:
java -jar smali-<version>.jar out -o classes.dex
If done correctly you'll see a newly created classes.dex.
now, right click on HtcFMRadio.apk (select 7z and open). Drag classes.dex into the file. Say yes to the prompt. Now you have a normal apk file APKTOOL can read!
4.) Download APKTOOL from Project Hosting on Google Code and the helper apps for your OS. (If you're extracting files for windows OS you should have apktool.bat and aapt.exe). Extract (again using 7z, don't you love this program?) apktool.jar (keep it as a jar file, don't extract the stuff inside of it), apktool.bat, and aapt.exe to the directory you're working on. To make things neat, you can also delete HtcFMRadio.odex (you don't need it anymore) and classes.dex (make sure you put it in the HtcFMRadio.apk file first!)
If this is the first time you're using apktool, then you have to install the htc framework so apktool can baksmali the Radio app. You only have to do this once:
apktool if ./framework/com.htc.resources.apk
Alright, at the command prompt:
apktool d -d HtcFMRadio.apk
This extracts the contents of HtcFMRadio.apk and places them in the HtcFMRadio directory. However, there are two major differences between this content and the content created in step 3. If you go into the smali directory you'll see that instead of .smali files, you'll see .java files. And if you go back and edit the AndroidManifest.xml file, you will also see that it's in text! Android applications convert their xml files to binary format. Now that APKTOOL has converted everything to an IDE friendly format, we can use NetBeans to edit everything. The first thing we're going to do is edit AndroidManifest.xml (using notepad) and add the following:
android:debuggable="true" to the Application tag.
IT should now look like this:
<application android:theme="@android:style/Theme.Black.NoTitleBar" android:label="@string/fm_app_name" android:icon="@drawable/fm_radio" android:taskAffinity="android.task.fmradio" android:description="@string/htc_corp" android:allowTaskReparenting="true" android:debuggable="true">
This permission lets the debugger watch the program while it's running on the phone.
We are going to run into two problems if we try to install this program. One is that Android doesn't let you install more than one copy of a system app. The second issue is that if we change the signature of our system app, then we'll have to change the signatures of our other system apps as well! Ahh.... So, to get around that, we're going to trick Android into thinking we have a completely new program. We're going to do that by renaming the com.htc.fm class to com.htc.modradio class. Next step:
5.) Cygwin (or Linux virtual machine)
The easiest way that I can think of to replace strings in multiple files is by using linux. You can most definitely do it in WIndows, but I dont know how. If you let me know how, I can put it in this tutorial.
(update: you can use Notepad++ to easily find/replace strings in multiple files for Windows. You still, however, want to download Cygwin if you're going to develop with Android-NDK.)
For now, just search for Cygwin (Cygwin is a program that lets you run Linux commands from a command prompt using your Windows directories), and install it. Make sure to have the Perl option selected. You'll need Perl to make the following commands work.
Once you get Cygwin up and running
cd <to your HtcFMRadio directory>
in my case it's
cd /cygdrive/c/Users/Jerry/Desktop/HtcFMRadio
now type the following commands in this order:
this command changes all occurances of htc/fm to htc/modradio in your xml and .java files.
find ./ -type f | xargs perl -pi -e 's/htc\/fm/htc\/modradio/g'
this command changes all occurances of htc.fm to htc.modradio
find ./ -type f | xargs perl -pi -e 's/htc.fm/htc.modradio/g'
If you don't follow this order, your source code will get messed up.
If using cygwin, a bunch of .bak files will be created. Using windows search, find all .bak files in your HtcFMRadio directory, then select them all and delete them (Make sure they are only files with .bak!)
Now just rename the fm directory to modradio. It is located in HtcFMRadio/smali/com/htc
Now go to your windows command prompt and type:
apktool b -d .\HtcFMRadio modradio.apk
Now sign and install modradio.apk on your phone.
adb install modradio.apk
If you have never signed before, then you need to use keytool and jarsigner. These two files are in your JDK directory, so make sure you include your JDK directory in the PATH variable of your ENVIRONMENT SETTINGS. (To get here, right click on My Computer, click Properties, Advanced Settings, Environment Variables. Once you make change, open up a new COMMAND prompt to see changes).
cd to the directory which has modradio.apk
now type:
keytool -genkeypair
Answer all questions, then use the same password for all password prompts.
Next type:
jarsigner -verbose modradio.apk mykey
Type in the password you created in the above step. Your apk should now be signed.
Next install:
adb install modradio.apk
Success!
6.) Testing the app on phone
Go to your phone and you'll now see a new FMRadio icon next to your first. Click on it and watch it open. It should now be able to play music. Keep it open.
7.) Using Netbeans
Go into HtcFMRadio and delete the build directory created by APKTOOL.
Now open up Net Beans and click on File, New Project, Select Java Project with Existing Sources, click on Next
Select HtcFMRadio directory for Project Folder, rename Project Name to whatever you want. Let's type in ModRadio. click on Next
Next to "Source Package Folders" click on "Add Folder" and select the smali directory.
Click Finish. For a quick tutorial by Brut.all, search APKTOOL in youtube and click on: Apktool Demo 2 - Smali improvements
Right click on Libraries. Click on "Add Jar / Folder". You want to add Android.Jar. Since I have Android 2.1 loaded I went to /platforms/android-7 located in my android SDK directory.
Your project is now ready for editting!
8.) Running the Debugger to trace through program.
Next go back to Windows command prompt and type ddms. This runs the Dalvik Debug Monitor. A window should open up. In the left hand side you should see com.htc.modradio. That's our app! To the right you're going to see 2 numbers, you're interested in the one to the right, 4 cells away from com.htc.modradio. This number is a port number, and you're going to use it to communicate with NetBeans. (In my case it is 8603)
Go back to NetBeans and click on Debug, Attach Debugger.
In the host field type: localhost
In the Port field: type in the second number you saw. (8603)
If everything is working you'll see a bug appear next to com.htc.modradio in the Dalvik Debug Monitor. Look at the bottom bar of NetBeans for feedback. If you get errors make sure the numbers match, or try port 8700 and make sure you select com.htc.modradio in the Dalvik Debug Monitor. Port 8700 is the default port used for whatever program you select in Dalvik Debug Monitor.
9.) Setting a breakpoint
I'm making this a seperate step because it is completely arbitrary. When creating a break point be sure to follow this rule:
You must select line with some instruction, you can't set breakpoint on lines starting with ".", ":" or "#".
Rather than looking for a spot to breakpoint, though, I'll tell you where to put one so you can quickly see how the debugger traces through the code. You aren't "REQUIRED" to do the next step, but if you want to trace you have to put a breakpoint somewhere.
In Net Beans click on the Project tab, click on Source Packages, com.htc.modradio, and then doubleclick on BroadcomFMTuner.java
We're going to insert a breakpoint. Scroll down to line 3226 and on your keyboard press: CTRL-SHIFT-F8, select line in dropdown box and hit ok. (To keep it simple, I usually look for "invoke" instructions to set breakpoints at)
Now go to your phone and click on the physical "back" button on your phone. This will clear the radio,(you should still be able to listen to music). Drag your status bar down. You should see a radio icon. Click on it again. The radio backgroudn will appear, but you wont' see any text or anything. Now go back to your netbeans application. You should now see debug options highlighted! Click on Step Over (F8) to step through!
nice tutorial
Nice tutor! I'm glad that finally someone is interested in smali debugging feature ;-)
About package name changing: I must warn you, that this isn't always that easy. It's advanced task, you must understand, what are you doing - otherwise you will get FCs for some apps and you won't know, why. And you don't have to change Java classes package name, so actually changing com.example.android should be enough - there is no need for changing com/example/android and dir names.
And I have few words about the background/theory: dexes, smali, (de)compiling, etc., but I will write them tomorrow
So I don't have to change the directory names for all of the invokes? Which means I don't have to rename the directory either? That sounds much easier. So you're saying to only replace the name in the application tag in the AndroidManifest.xml file?
Wow I'm a noob
Your badass tutorial just made me realize how much further I have to go. Great work!
BTW, if someone could figure how to make use of the FM transmitter and create an FM modulation app I think that could be popular. Not everyone has cars with input jacks and I know I really could of made use of it for my vacation I just took.
Once you understand how the software interacts with the Broadcom chip it shouldn't take too much should it? I would envision something working just like wifi tether does. No need to turn on the radio, the app just takes control.
Cool! Thanks! Will this work with eclipse also?
oikjdfkrjhr said:
Cool! Thanks! Will this work with eclipse also?
Click to expand...
Click to collapse
According to Brut.all, no.
"Google smali debugging - you'll find an article written by Brut.all"
Eclipse can open the files, but certain workarounds have to be done to get the same tracing to work.
A FM Transmitter that is able to transmit audio to a receiver without any addition cords hardware etc would IMO make the EVO 4G Un-Stoppable!!! I'll donate to support the dev/s in this effort
Will this get FM Radio working on any android phone with that broadcom chip?
Wow, great tutorial. I was looking for the hitch-hackers guide to my new galaxy and I think I found it. Cheers
Thanks this is great. I almost got it 100% working. But there's one problem. I'm debugging some other apk. And I can't set any breakpoints because, since the apktool made fake java files, all the code is comments, so there's no place to set any breakpoints since there's no real executable code!
Help how to get around this?
At the beginning of a class I tried to add something like... int a=0; while keeping the same amount of lines... just before comment start...
Code:
package com.example.app; class MainActivity {
int a = 0; /*
.class public Lcom/example/app/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"
and put a breakpoint there, but it still says its not an executable location.
Any ideas? This is cool and I'm so close with your great tutorial. Thanks!
oikjdfkrjhr said:
Thanks this is great. I almost got it 100% working. But there's one problem. I'm debugging some other apk. And I can't set any breakpoints because, since the apktool made fake java files, all the code is comments, so there's no place to set any breakpoints since there's no real executable code!
Click to expand...
Click to collapse
http://code.google.com/p/android-apktool/wiki/SmaliDebugging
I tried to use Eclipse, but seems it forbids to add breakpoint on unknown (commented out) line :-/ I workarounded this and added breakpoint, then I was able to debug normally, but you should treat apktool debuging as unworkable on Eclipse - at least until someone will find some solution.
Click to expand...
Click to collapse
And actually midnjerry said this to you just few posts above.
neomagik said:
Will this get FM Radio working on any android phone with that broadcom chip?
Click to expand...
Click to collapse
Unfortunately not.
Refer to IntersectRaven's posts regarding enabling the FM Tuner for the Nexus One. He needed to create drivers for a custom Linux kernel to be used with a Desire ROM.
Smali debugging is important, however, because it allows developers to learn the code that implements the "undocumented" hardware for their phone (in this case, HTC phones with a working FM Radio app).
oikjdfkrjhr said:
Thanks this is great. I almost got it 100% working. But there's one problem. I'm debugging some other apk. And I can't set any breakpoints because, since the apktool made fake java files, all the code is comments, so there's no place to set any breakpoints since there's no real executable code!
Help how to get around this?
At the beginning of a class I tried to add something like... int a=0; while keeping the same amount of lines... just before comment start...
Code:
package com.example.app; class MainActivity {
int a = 0; /*
.class public Lcom/example/app/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"
and put a breakpoint there, but it still says its not an executable location.
Any ideas? This is cool and I'm so close with your great tutorial. Thanks!
Click to expand...
Click to collapse
if you're using NetBeans, just keep trying to insert breakpoints at every "invoke" type statement.
A really interesting thread. Thanks for sharing your knowledge with us. A topic like this should have its own Forum like ‘Android Engineering Tutorial’. We need more tutorials like this one!
Bluetooth Driver Files released by HTC!
Just went to
http://developer.htc.com/
Bluetooth driver files released! We should be able to better control the radio now.
Any progress? I'll donate to the first person who gets an app to broadcast my music to my radio.
Sent from my HTC EVO using XDA App
@midnjerry,
sorry if this is way off topic, but it does deal with the fundamental aspects that you have established here.
Can I use this method to reverse engineer the Google Voice app, so that I can have the same program installed twice for my two different Google voice accounts?
I just want to name the application something else, so that I can install it twice with two different sign in names.
reekotubbs said:
@midnjerry,
sorry if this is way off topic, but it does deal with the fundamental aspects that you have established here.
Can I use this method to reverse engineer the Google Voice app, so that I can have the same program installed twice for my two different Google voice accounts?
I just want to name the application something else, so that I can install it twice with two different sign in names.
Click to expand...
Click to collapse
Yeah, I think you can do that. Just change package name of an app to something else.
Brut.all said:
Yeah, I think you can do that. Just change package name of an app to something else.
Click to expand...
Click to collapse
@Brut.all
Can I do that in Eclipse or do I need to use need to use Smali Debugging? Just asking because I am not looking to debug the program only install it twice.
I am currently working on a major update to the apk manager application as well and changing the name to APK Multi-Tool with some new added features and also to fix some issues with some code errors.
I am also changing a lot of the features as well since a lot of the code has been outdated for a while.
I have compiled the latest Version of APKTOOL which is 1.4.2 snapshot
Updates done so far in this new upcoming release
Updated APKTOOL to the latest snapshot
I have downloaded the latest changes to the source and compiled the latest Version of APKTOOL which is 1.4.2 snapshot
Updated Android SDK TOOLS
I have updates all the android tools to the latest Version from the android SDK revision 13
Included tools:
zipalign
adb
aapt
Updated Sox
Downloaded the latest Source and compiled to update Sox
Replaced roptipng v0.6.3 with optipng v0.6.5
I have removed roptipng v0.6.3 and replaced it with the latest Version of optipng v0.6.5 which I freshly compiled from source as roptipng was just v0.6.3 and there has been some major bug fixes to optipng
Roptipng is bloated with no compression when compiled also the modifications made to optipng that the original Arthur of roptipng are pointless as all they do is add directory recursion, which is redundant.
If you are interested in recursion, use this with the original optipng:
for FILE in `find . | grep "\.png"`; do optipng "$FILE"; done
If you want to do it in windonkey , something like this
for /r %FILE in "*.png" do optipng "%FILE"
(note: reason for it being shorter in donkey mode is that the "for" command is a
*LOT* weaker -- it can only search through the filesystem whereas the unix command iterates through anything you throw at it, therefore we need the extra command to go out and do the search).
New Added Features done so far in this new upcoming release
New Section to the command line
Batch Theme Image Transfer TOOL
Batch Theme Zipalign APK TOOL
Batch Theme optipng TOOL
These tools allow you to update/port your favorite theme pack from any rom to your Current Rom In use.
(Note: You do not have to worry about signing the apk files using this method as it is automated with the transfer Function)
Batch Theme Image Transfer TOOL
This tool makes the process of transferring images from one APK to another APK File of the same file making it easier to update themes or even transferring a theme update.zip of one ROM to another Rom allowing the porting of theme to be much faster.
(Note: You will have to manually replace the progress_horizontals.xml from the framework-res since this file is needed with Theme Changes)
Batch Theme Zipalign APK TOOL
This tool makes it easier to Zipalign all the apk files in your newly ported/updated theme pack.
Batch Theme optipng TOOL
This tool optimizes all the images in all of the apk files for the toolset to allow you to be able improve compression of the images.
TO DO LIST
Add new feature to Randomly Generate a new Key File for signing the apk files after modifying and recompiling of the apk files this will also allow of uploading to the android market as this added feature will allow you to sign apk files that you may of compiled without signing beforehand.
Modify the Signapk script to be compatible with the Randomly Generation feature in the works
and a few other added features are in the works as I am redesigning the application and rewriting a lot of the code to fix issues as well as some of the new features have broken parts as some features have been moved and broken some command line prompts.
Its nice to know this project is still alive.
A couple of suggestions:
To save the masses asking later on........
Add an option to install the required info into environment variables.
Maybe an option to install a registry edit to enable right click compile/ decompile. I created one myself, but I think you would do a better job
forum.xda-developers.com/showthread.php?t=935967
Other than that it looks like a complete tool.
Thank you very much.
I have released a Alpha Build of the APK Mulit-Tool on the main website feel free to test out the application and remember some features may be broken
BUG: I noticed this in the APK Man. before. After decompiling..compiling etc then finishing up and trying to quit option '24' in 5.0 and '27' in APK Multi-tool, it echos the text for when your compiling and keeping orig. files.
"In the apk manager folder u'll find.." not letting you exit the program. I have to force close it.
Anyway of being able to add in a command where you can create ur own private signing keys and an option to then sign ur apks with the private keys. I have a tutorial on how to make ur own and the commands to make and sign if ud like me to send it to u
Alpha 02 is now out.
I completely redesigned the layout of the app so it is totally different so there is some learning to be done.
thegoo said:
BUG: I noticed this in the APK Man. before. After decompiling..compiling etc then finishing up and trying to quit option '24' in 5.0 and '27' in APK Multi-tool, it echos the text for when your compiling and keeping orig. files.
"In the apk manager folder u'll find.." not letting you exit the program. I have to force close it.
Click to expand...
Click to collapse
I believe I fixed this bug now by adding a kill script to the exit
Papa Smurf151 said:
Anyway of being able to add in a command where you can create ur own private signing keys and an option to then sign ur apks with the private keys. I have a tutorial on how to make ur own and the commands to make and sign if ud like me to send it to u
Click to expand...
Click to collapse
the Private key gen script I am adding is a randomly key generator script I have done a while back and but sure feel free to send away
http://db.tt/nD4dePl5
Here's a link to a rff file that is written up with cmd oaths on how to created a private key and then how to sign with it. The script would need to be written by u but with what uve been able to do I'm sure it wouldn't be a problem and IMO would be very useful
Papa Smurf151 said:
http://db.tt/nD4dePl5
Here's a link to a rff file that is written up with cmd oaths on how to created a private key and then how to sign with it. The script would need to be written by u but with what uve been able to do I'm sure it wouldn't be a problem and IMO would be very useful
Click to expand...
Click to collapse
That way is overly complicated there is a way easier way
Code:
cd C:\openssl\Bin
set RANDFILE=.rnd
openssl genrsa -out key.x509.pem 2048
openssl req -new -key key.x509.pem -config “C:\OpenSSL\ssl\openssl.cnf” -out request.pem
openssl x509 -req -days 99999 -in request.pem -signkey key.x509.pem -out certificate.pem
openssl pkcs8 -topk8 -outform DER -in key.x509.pem -inform PEM -out key.pk8 -nocrypt
this will generate a key used for signing with a modified signer script which I use besides the one in the application as with this signing method requires a modifications from the
signer.bat
Code:
@echo off
if (%1)==(1) goto next
if (%1)==(2) goto log
COLOR 0A
echo Signing "%~n1"
java -Xmx%heapy%m -jar signapk.jar -w testkey.x509.pem testkey.pk8 "../place-apk-here-for-signing/%~n1%~x1" "../place-apk-here-for-signing/signed.apk"
del /S /Q "../place-apk-here-for-signing/%~n1%~x1" > nul
ren "../place-apk-here-for-signing/signed.apk" "%~n1%~x1"
goto quit
:next
COLOR 0C
cd ..
type log.txt
PAUSE
goto quit
:log
mode con:cols=24 lines=2
echo Leave this open for 10s
adb logcat >> adblog.txt
:quit
raziel23x said:
That way is overly complicated there is a way easier way
Code:
cd C:\openssl\Bin
set RANDFILE=.rnd
openssl genrsa -out key.x509.pem 2048
openssl req -new -key key.x509.pem -config “C:\OpenSSL\ssl\openssl.cnf” -out request.pem
openssl x509 -req -days 99999 -in request.pem -signkey key.x509.pem -out certificate.pem
openssl pkcs8 -topk8 -outform DER -in key.x509.pem -inform PEM -out key.pk8 -nocrypt
this will generate a key used for signing with a modified signer script which I use besides the one in the application as with this signing method requires a modifications from the
signer.bat
Code:
@echo off
if (%1)==(1) goto next
if (%1)==(2) goto log
COLOR 0A
echo Signing "%~n1"
java -Xmx%heapy%m -jar signapk.jar -w testkey.x509.pem testkey.pk8 "../place-apk-here-for-signing/%~n1%~x1" "../place-apk-here-for-signing/signed.apk"
del /S /Q "../place-apk-here-for-signing/%~n1%~x1" > nul
ren "../place-apk-here-for-signing/signed.apk" "%~n1%~x1"
goto quit
:next
COLOR 0C
cd ..
type log.txt
PAUSE
goto quit
:log
mode con:cols=24 lines=2
echo Leave this open for 10s
adb logcat >> adblog.txt
:quit
Click to expand...
Click to collapse
U r correct but in my case I sign with my private keys to go into the market so when I make updates the key name can't be random or the market will not take it.
Papa Smurf151 said:
U r correct but in my case I sign with my private keys to go into the market so when I make updates the key name can't be random or the market will not take it.
Click to expand...
Click to collapse
Well the script above was just a example script there will be some changes to it to tie the keys to the applications so that when you sign the apk files they will have a key assigned to them
raziel23x said:
Well the script above was just a example script there will be some changes to it to tie the keys to the applications so that when you sign the apk files they will have a key assigned to them
Click to expand...
Click to collapse
Sounds great to me I can't wait
I am getting this error, can anyone help?
--------------------------------------------------------------------------
|Tue 10/18/2011 -- 14:48:48.53|
--------------------------------------------------------------------------
'mode' is not recognized as an internal or external command,
operable program or batch file.
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)
Could Not Find C:\Documents and Settings\WirelessZone\Desktop\Apk_Multi-Tool\place-apk-here-for-modding\../place-apk-here-for-modding/signedSystemUI.apk
Could Not Find C:\Documents and Settings\WirelessZone\Desktop\Apk_Multi-Tool\place-apk-here-for-modding\../place-apk-here-for-modding/unsignedSystemUI.apk
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Loading resource table from file: C:\Documents and Settings\WirelessZone\apktool\framework\1.apk
I: Loaded.
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x010300a3
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x010300a3
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x010300a3
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x010300a3
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x010300a3
I: Decoding file-resources...
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.setDataElements(ByteInterleavedRaster.java:529)
at java.awt.image.BufferedImage.setRGB(BufferedImage.java:971)
at brut.androlib.res.decoder.Res9patchStreamDecoder.drawVLine(Res9patchStreamDecoder.java:99)
at brut.androlib.res.decoder.Res9patchStreamDecoder.decode(Res9patchStreamDecoder.java:58)
at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:34)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:100)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:68)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:132)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:93)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:98)
at brut.apktool.Main.cmdDecode(Main.java:120)
at brut.apktool.Main.main(Main.java:57)
Click to expand...
Click to collapse
I have my paths set up like this.
C:\Program Files\Java\jdk1.6.0_27\bin;C:\Program Files\Java\jdk1.6.0_27\jre\bin;C:\Program Files\Android\android-sdk;C:\Program Files\Android\android-sdk\platform-tools;C:\Program Files\Android\android-sdk\tools
Click to expand...
Click to collapse
If you can PM, perfect!
work on gnu/linux?
great to hear but afaik apktool revision you use still got no latest baksmali/smali updated - am i correct ?
$omator said:
great to hear but afaik apktool revision you use still got no latest baksmali/smali updated - am i correct ?
Click to expand...
Click to collapse
I am using the latest Versions from https://github.com/brutall/brut.apktool
using these instructions
http://code.google.com/p/android-apktool/wiki/BuildApktool?tm=4
ass you see latest update is from may while:
8-22-11 smali/baksmali v1.2.8 is out. This fixes a problematic bug that crept into 1.2.7
8-13-11 smali/baksmali v1.2.7 is out. This is a bugfix release, with a small additional feature (helper comments for synthetic access methods)
i think those 2 updates are not merged
I am currently Forked all of Brut.all's Repositories into my github account that i setup for APK Multi-Tools.
I am currently looking over his code and making changes updating the Smali Code used with the APKtool updating it to the most updated version off of http://code.google.com/p/smali/ and hopefully I will have a more updated Alternative version of apktool
This thread here is more along the lines of for Development purposes and coding suggestions
For Releases and bug reports Visit this post
[Windows XP/VISTA/7][UTILITY][TOOL] APK Multi-Tool
First off, awesome job, thanks for this...I have one quick question... everytime I had ever gotten errors with this or even the apk manager 5.0.2 it was the same situation. I would, for example, be trying to decompile mms.apk and errors would occur. What solved this was to place my framework-res.apk in C:\Documents and Settings\Owner. This is where the apktool\ framework folder is located. I then had to open a command prompt and type apktool if framework-res.apk. That would place a 1.apk file in apktool\framework. Then using this or apk manager 5.0.2 would work flawlessly without errors. Is there any way to skip all that and create that 1.apk file using your setup before I decompile an app? I thought decompiling with dependency file would do it, but it always says that is not a dependee file. Any thoughts... sorry for the long post and thanks again.
I guess I could add a script to do a adb pull of the fw-res from your phone and install it from that
Sent from my DROID using xda premium
Script.bat close after making any selections (Same as APKManager 5.0.2)
any help?
Code:
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
At was unexpected at this time.
Guide to decompile android application
REQUIREMENT
Apktool [click here to download][Thanks to brut.all for this apktool]
Java JDK/JRE 32 bit [please google it guy's]
Little knowledge on cmd
_________________________________________________________________________________________________________________________
Preparation before WORKING
Process :-
1)now install the java in your pc/lappy
then copy the apktool.zip & goto directory C:/
make a folder name apktool (u can name it by watever u like)
now goto that folder & paste the zip
extract that zip there...
2) now copy the .apk or jar file which u wnt to decompile
& paste it on apktool folder.....
also copy the framework-res.apk of that rom &
paste it on that folder..
Decompiling application
3) now open cmd
Your cmd will probly look like this..
C:\users\yourname>
so type in
cd.. (yes include the '..' and press enter after you type each command)
this will get you to back directory so now you will see
C:\users>
so type again
cd..
you should now see this:
C:\>
now type
cd apktool (and you are in the apktool directory)
4)Installing Framework
Now that you are in directory we need to install the device's framework to your system for it to compile correctly so type this:
apktool if framework-res.apk
this will install the devices framework to your system (need to do this)
5)now to decompile the apk you want to edit.. type this:
apktool d music.apk mod
music.apk is the apk your decompiling
mod is the folder you're creating for the decompiled apk
do whatever you want to do with your apk...
NOW RECOMPILING
6)now to recompile your new apk type this:
apktool b mod music-new.apk
mod is the folder with your edited files
music-new.apk is your new apk file
Now we are NOT done... we cannot use the new apk's...
now make two separate folder a & b
copy-paste the original music.apk in 'a'
& music-new.apk in 'b'
use something like 7zip, take the 'resources.arcs' file and any other xml files you edited out of the "new-edited" apk and copy them into Original apk
now add to archive ...the origanl apk in zip format
& at the end of the file name .apk ( i mean give the file format name as .apk insted of .zip)
Now you are almost done.....:thumbup:
IF it is a system app then don't sign it....otherwise u have to sign that app....
[=>Guide On How To Sign The Moded App<=]
NOTE:- If you are getting this error =>" java is not a recognized internal or external command "
[=>Then Follow this Guide<=][Thanks to KartzXDA]:good:
That's all
don't forget to hit thanks or comment....:good:
All Mod-Rom by Abhijit Guha(mee)
1} X-zooM[V2] (Netlock free : Transparent Rom):good:
2}Tutorial On Decompiling Android Apps
3.Guide To Make Transparent Power Widget.
4.Guide To Change Statusbar Clock & Notification colour.
5.Guide On How To Sign The Moded App.
6.Guide On How To SetUp Environmental Variables
cool.........
thank for nice guide
sent from my ass ®
Insted of so much to cd folder just right click the folder while holding shift button and you will see adbance options... now open command prompt.. It will save time and is very easy ....
Sent from my GT-S7500 using xda premium
lokeshsaini94 said:
Insted of so much to cd folder just right click the folder while holding shift button and you will see adbance options... now open command prompt.. It will save time and is very easy ....
Sent from my GT-S7500 using xda premium
Click to expand...
Click to collapse
I think you haven't followed something...... this guide is for begginers...so it should be simple one.... not eeky
This is simple method to cd a folder in cmd without all that long commands.... I always use it... Try it once and you will know what i am trying to say....
Sent from my GT-S7500 using xda premium
Thank s for this awesome guide
Sent from my Galaxy Nexus using Tapatalk 2
Awesome guide, very simple to decompile and recompile with it.
Cool guide! I will use it to do some tests with my apks
solved problem lol ... good tutorial ...
xda facebook page should share more tutorials like this!!
Yeah mine says java is not a recognized internal or external command, operable program or batch file. I probably have to add the environment variable, but im not sure how to.
EDIT: got it.
AlwaysDroid said:
Yeah mine says java is not a recognized internal or external command, operable program or batch file. I probably have to add the environment variable, but im not sure how to.
EDIT: got it.
Click to expand...
Click to collapse
You getting this error coz you giving those command in some other directory.........
Note:- First u have to go th that directory or folder where ur apktool files are kept...... then u will not get such error......
Follow that guide from begging then u will get wat I wanna say. best of luck :good:
aguha1044 said:
You getting this error coz you giving those command in some other directory.........
Note:- First u have to go th that directory or folder where ur apktool files are kept...... then u will not get such error......
Follow that guide from begging then u will get wat I wanna say. best of luck :good:
Click to expand...
Click to collapse
No, I just forgot to add the java bin to PATH variable. All good
Sent from my GT-I9000 using xda premium
For the OP. Some ROMs like miui ROM use two frameworks ( framework-res.apk and framework-miui-res.apk) so you need to specify that on the guide. I am just trying to help
tapatalked² cowsquadGnex®
AlwaysDroid said:
No, I just forgot to add the java bin to PATH variable. All good
Sent from my GT-I9000 using xda premium
Click to expand...
Click to collapse
can you tell how to add JAVA bin? I am getting the same error on cmd. thank you
How to setup the environment variable
zain0300 said:
can you tell how to add JAVA bin? I am getting the same error on cmd. thank you
Click to expand...
Click to collapse
TECHNICAL INFORMATION
The PATH is the system variable that your operating system uses to locate needed executables from the command line or Terminal window.
The PATH system variable can be set using System Utility in control panel on Windows, or in your shell's startup file on Linux and Solaris.
SOLUTION
Here PATH represents the bin path of installed version of Java that contains classes. (e.g. C:/jdk1.6.0/bin)
Setting Path on Windows
Windows 7
1. Select Computer from the Start menu
2. Choose System Properties from the context menu
3. Click Advanced system settings > Advanced tab
4. Click on Environment Variables, under System Variables, find PATH, and click on it.
5. In the Edit windows, modify PATH by adding the location of the class to the value for PATH. If you do not have the item PATH,
you may select to add a new variable and add PATH as the name and the location of the class as the value.
6. Reopen Command prompt window, and run your java code.
Windows XP
1. Start -> Control Panel -> System -> Advanced
2. Click on Environment Variables, under System Variables, find PATH, and click on it.
3. In the Edit windows, modify PATH by adding the location of the class to the value for PATH. If you do not have the item PATH,
you may select to add a new variable and add PATH as the name and the location of the class as the value.
4. Close the window.
5. Reopen Command prompt window, and run your java code.
Windows Vista
1. Right click My Computer icon
2. Choose Properties from the context menu
3. Click Advanced tab (Advanced system settings link in Vista)
4. In the Edit windows, modify PATH by adding the location of the class to the value for PATH. If you do not have the item PATH, you may
select to add a new variable and add PATH as the name and the location of the class as the value.
5. Reopen Command prompt window, and run your java code.
Setting Path on Solaris and Linux
To find out if the java executable is in your PATH, execute:
% java -version
This will print the version of the java executable, if it can find it. If you get error java: Command not found. Then path is not properly set.
To find out which java executable the first one found in your PATH, execute:
% which java
Below are the steps to set the PATH permanently,
Giving instructions for two most popular Shells on Linux and Solaris.
For bash Shell:
Edit the startup file (~/ .bashrc)
Modify PATH variable:
PATH="$PATH":/usr/local/jdk1.6.0/bin
export PATH
Save and close the file
Open new Terminal window
Verify the PATH is set properly
% java -version
For C Shell (csh):
Edit startup file (~/ .cshrc)
Set Path
set path="$PATH":/usr/local/jdk1.6.0/bin
Save and Close the file
Open new Terminal window
Verify the PATH is set properly
% java -version
Hit "Thanks" if anyone helped you. :good:
Xperia Arc LT15i
Rooted/Bootloader Unlocked
JellyBean - FXP137/CM10
KartzXDA said:
TECHNICAL INFORMATION
The PATH is the system variable that your operating system uses to locate needed executables from the command line or Terminal window.
The PATH system variable can be set using System Utility in control panel on Windows, or in your shell's startup file on Linux and Solaris.
SOLUTION
Here PATH represents the bin path of installed version of Java that contains classes. (e.g. C:/jdk1.6.0/bin)
Setting Path on Windows
Windows 7
1. Select Computer from the Start menu
2. Choose System Properties from the context menu
3. Click Advanced system settings > Advanced tab
4. Click on Environment Variables, under System Variables, find PATH, and click on it.
5. In the Edit windows, modify PATH by adding the location of the class to the value for PATH. If you do not have the item PATH,
you may select to add a new variable and add PATH as the name and the location of the class as the value.
6. Reopen Command prompt window, and run your java code.
Windows XP
1. Start -> Control Panel -> System -> Advanced
2. Click on Environment Variables, under System Variables, find PATH, and click on it.
3. In the Edit windows, modify PATH by adding the location of the class to the value for PATH. If you do not have the item PATH,
you may select to add a new variable and add PATH as the name and the location of the class as the value.
4. Close the window.
5. Reopen Command prompt window, and run your java code.
Windows Vista
1. Right click My Computer icon
2. Choose Properties from the context menu
3. Click Advanced tab (Advanced system settings link in Vista)
4. In the Edit windows, modify PATH by adding the location of the class to the value for PATH. If you do not have the item PATH, you may
select to add a new variable and add PATH as the name and the location of the class as the value.
5. Reopen Command prompt window, and run your java code.
Setting Path on Solaris and Linux
To find out if the java executable is in your PATH, execute:
% java -version
This will print the version of the java executable, if it can find it. If you get error java: Command not found. Then path is not properly set.
To find out which java executable the first one found in your PATH, execute:
% which java
Below are the steps to set the PATH permanently,
Giving instructions for two most popular Shells on Linux and Solaris.
For bash Shell:
Edit the startup file (~/ .bashrc)
Modify PATH variable:
PATH="$PATH":/usr/local/jdk1.6.0/bin
export PATH
Save and close the file
Open new Terminal window
Verify the PATH is set properly
% java -version
For C Shell (csh):
Edit startup file (~/ .cshrc)
Set Path
set path="$PATH":/usr/local/jdk1.6.0/bin
Save and Close the file
Open new Terminal window
Verify the PATH is set properly
% java -version
Hit "Thanks" if anyone helped you. :good:
Xperia Arc LT15i
Rooted/Bootloader Unlocked
JellyBean - FXP137/CM10
Click to expand...
Click to collapse
i read all this but still could not figured it out since there were few options i did not find on my windows 7 laptop.
Edit: Ok i found all the options now but what does this mean "modify PATH by adding the location of the class to the value for PATH"?
zain0300 said:
i read all this but still could not figured it out since there were few options i did not find on my windows 7 laptop.
Edit: Ok i found all the options now but what does this mean "modify PATH by adding the location of the class to the value for PATH"?
Click to expand...
Click to collapse
Under system variables, find for the variable Path. Click on Edit. Then one window will come up with two text boxes. One is variable name and another one is variable value. Edit the variable value of text box. Add the the path of bin ( e.g., ; C:\jdk\bin [Don't forget to add semicolon before the path]) to the text box.
Please have a look at the attachments.
Hit "Thanks" if anyone helped you.
Xperia Arc LT15i
Rooted/Bootloader Unlocked
JellyBean - FXP137/CM10
KartzXDA said:
Under system variables, find for the variable Path. Click on Edit. Then one window will come up with two text boxes. One is variable name and another one is variable value. Edit the variable value of text box. Add the the path of bin ( e.g., ; C:\jdk\bin [Don't forget to add semicolon before the path]) to the text box.
Please have a look at the attachments.
Hit "Thanks" if anyone helped you.
Xperia Arc LT15i
Rooted/Bootloader Unlocked
JellyBean - FXP137/CM10
Click to expand...
Click to collapse
thankx for your replies. I mistakenly deleted all the other paths that were already there, can I bring them back?
thanks button pushed.
zain0300 said:
thankx for your replies. I mistakenly deleted all the other paths that were already there, can I bring them back?
thanks button pushed.
Click to expand...
Click to collapse
copy this in the path variable value after that add ;C:\jdk....\bin
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShel l\v1.0\
Hit "Thanks" if anyone helped you. :good:
Xperia Arc LT15i
Rooted/Bootloader Unlocked
JellyBean - FXP137/CM10
PORTING ROMS FOR MEDIATEK
FEATURE OF THIS GUIDE- NOOB -> EXPERT
I DONT KNOW THE METHOD I USE TO PORT WILL WORK FOR OTHER CHIPSET DEVICES OR NOT AS I ONLY USED MEDIATEK DEVICE.
IF YOU ARE IN A HURRY THEN SEE HERE MY 1-MIN PORTING GUIDE.
AND YOU CAN FIND HERE MY TRICKY CONCEPT- "X" TO SAVE MONEY,TIME,NET DATA.
Credits
@dsixda for awesome android kitchen @rua1 for Mtk Dorid Tools @knzo for tweaks @https://www.otaupdatecenter.pro/ and their team for OTA. @tech mashido As Helper
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
WORK BEGINS
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
THINGS NEEDED
(INSTALL BELOW THINGS AS PER YOUR OS BIT VERSION,IF YOU HAVE 32 BIT OS THEN INSTALL 32 BIT STUFFS AND IF YOU HAVE 64 BIT OS THEN CHOOSE 64 BIT STUFFS.
WIndows Running PC or Laptop.
JAVA - Download
Cygwin - Download
7zip Compressor-Download
Notepad++ -Download
Android Kitchen- Download
Time(as per you how much take to understand)
Your Base Rom(stock Rom,in any format-CWM flashable or SP_tools Flashable,Prefer to have Both)
CWM Recovery
SD card & Card Reader.(some phones do not have SD slot so no worry for them,i have alternative way)
APKTOOL- DOWNLOAD
SP_Flash Tools to Unbrick In case Device Get Bricked- Download
SETTING UP IMPORTANT THINGS FIRST
JAVA
Download Java From Above link as per your OS type.
Install it by running its setup like normal softwares.
CYGWIN
Download Cygwin From Above link.
Extract the Zip
By default it will be installed at c:\cygwin .i also recommend to install at default location.
Run Setup and Select "Install from Local Directory"
Then is will ask for packages location.Verify it.
Hit next-next and finish at the end.
Now you see a Cygwin folder under "C" drive and a shortcut Icon at desktop.
*For some 64 BIT users this method might not work,they can download setup from here-Download & install it from internet instead from local packages and select all packages during installation.
7ZiP
Download 7Zip From Above link as per your OS type.
Install it by running its setup like normal softwares.
Notepad++
Download Notepad++ From Above link as per your OS type.
Install it by running its setup like normal softwares.
dsixda's Android Kitchen
Download dsixda's Android Kitchen From Above link.
Extract it and then it will be like this- Android-Kitchen-0.224\Android-Kitchen-0.224\orgianal_update,tools etc....
Now open Android-Kitchen-0.224 folder and you will again find Android-Kitchen-0.224 folder,then rename it to only " kitchen " (small letters).
Now directory will look like this- Android-Kitchen-0.224\kitchen\orgianal_update,tools etc....
Now copy that kitchen folder which we renamed and paste to c:\cygwin\home"your_username""paste here"
Now your cygwin directory will look like this- C:\cygwin\home\your_username\kitchen\orignal_update,tools,etc.....
To check Kitchen is working,open cygwin from desktop and type - "cd kitchen" and hit enter(small letters).
If no error shown then you have sucessfully installed it or if error like- bash:cd :kitchen:No such file or dirctory hen you should check above steps again.
>>OPENING KITCHEN- open cygwin,type "cd kitchen" hit enter,now type " ./menu " and hit enter.Now kitchen will load.
PORTING CWM RECOVERY(PORT IF YOUR DEVICE DO NOT HAVE IT)- ROOT REQUIRE
Download and install ADB drivers on PC first.DOWNLOAD
Get MTK Droid tools From Here and Extract-HERE
Now go to developers option and enable USB debugging.If you cant find Developers option then go to settings/about Phone and press 7 times on BUILD NUMBER then you will see Developers option under settings.
Open MTK Droid tools on pc and then plug your device(turned on) via usb cable.Now the tool will recognise your device and connect to it(if asked for root permission on device then grant).
If the colour indicator in the bottom left corner is green in MTK Droid Tools,then you already have root shell,and can go on to the next step, if it is yellow, click on the root button at the bottom, and wait for the progress bar, if the indicator stays yellow, or you get an error message, this probably means you do not have Busybox installed, you can install it from the Google play store. When the indicator turns to green you have root shell which is necessary for this operation.
Now click on 'root,backup,recovery' and then select 'to use boot from phone'
Now click on 'recovery and boot'
Then you will see a dialogue box will appear asking if you want to 'make cwm recovery automatically' click yes.
The tool will then create the recovery and then another dialogue box will appear asking to 'install created recovery to phone', click yes.
Now you reboot into recovery mode and check that it is working fine or not.
You can find generated cwm recovery under MTK Droid Tools location.
If you want to revert to stock recovery then take recovery.img from your stock rom(sp_tools) and paste into sd card.And then install mobileuncletools from playstore and click on update recovery and select your stock recovery from SD.Same method for installing CWM recovery.
WHICH ROMS YOU CAN PORT
Port rom should be of same android version as your stock rom.Like if your stock rom is 4.2 then you should only try with 4.2.In some cased you can port higher versions like kikat too,it will require Custom kernel but we are skipping that.
The device from you porting should have same chipset,like if your device is MT6589 then you shoul only try with MT6589 chip-sets.You can port from MT6589T to MT6589 or MT659M but you cannot port from MT6592.
Choose the port rom from most close specification device,like screen size,screen resolution,dual-sim,etc....higher resolution to lower resolution resolution or lower to higher can be ported but not all boots up.
Some Sites To get Port Rom:-
anzhuodiy.com
romzj.com
dashi.com
shendu.com
needrom.com
Porting begins
MAKING PORTING ENVIRONMENT
Registering Your Device To Kitchen:-This step will help to write updater script automatically.
Open kitchen and select option 0(advance options) and then select option 12(tools for unpack and repack boot.img etc.) and press "a"(Extract kernel+ramdisk from boot.img,recovery.img etc.) and hit enter.
Now a folder will be created Under kitcehn directory named like this- bootimg_040714_132352
Now copy your CWM recovery.img for your device to this folder and check that the name must be - recovery.img if not then rename it. and hit enter in kitchen terminal.It will extract your recovery in that folder.
Open up boot.img-ramdisk folder, and look for /system/etc/recovery.fstab or /etc/recovery.fstab or similar FSTAB file location. Open this file by notepad++ to find the mount points.
Download below file and paste it to C:\cygwin\home\username\kitchen\tools\edify_defs .Now rename it to your device code name.Mine is A110Q so i used this file. You can use as your choice also.
Then open this file and recovery.fstab with notepad++ and compare and replace mount points and save it.Means copy mount points from recovery.fstab and paste/replace into Your device codenamed file.
Now if you done all above steps right then kitchen will make updater script for you.
If you porting for Micromax A110Q then just Download the below File and paste it.No need to edit.Just paste it.
>>>>>>Micromax A110Q file - http://d-h.st/Qa5
>>>>>>IF you have any confusion or you are unable to create this file then PM me your recovery.fstab file and i will make it.
GET BOTH ROMS- STOCK AND PORT
STOCK-Your stock rom which was provided by device manufacturer.
PORT- The Rom you selected to port after comparing your device to port device.
GETTING STOCK ROM SYSTEM FOLDER
IF your Stock ROM is in already in form of CWM flashable zip then create a Stock Folder in any drive of Computer and extract it for further Use.
Basic Strurture od CWM FLASHABLE ZIPs
META-INF
SYSTEM
DATA
boot.img
IF YOUR ROM IS SP_TOOLS FLASHABLE THEN DO THESE TO EXTRACT SYSTEM FOLDER FROM IT:-
Basically IN SP_TOOLS flashable zips the folder structure is-
DATABASE
boot.img
cache.img
EBR1
EBR2
IK.bin
logo.bin
MBR
MT65xx_Android_scatter_emmc.txt
Preloaded_xxxxxx.bin
recovery.img
secro.img
system.mg
userdata.img
[STEPS]
Extract system.img from stock rom zip to C;\cygwin\home\username\kitchen\original_update
*You should add kitchen folder to favorites panel in my computer as you will be using this folder very frequent.
Now open cygwin,type "cd kitchen" hit enter,now press- " ./menu " then android kitchen will load with lots of functions numbering from 1 to ...
Press 1 to setup working folder now again hit Enter.Now it will ask you to choose an option to select working folder.Select system.img one folder by pressing its value and hitting enter.
Now it will ask about changing working folder name,leave it as default and hit enter.So kitchen will now start copying rom to working folder.
After Copying files it will auto prompt and open Ext2Explore application.In some cases it will show that error message that "unable to read disk,please make sure you are running appliacation with administrative rights."But don't worry,click ok.
Now after Ext2Explore opened,click on "FILE" on upper left corner and click on "OPEN IMAGE".Now browse to kitchen directory and go through newly created working folder and you will find "ext4_system.img" under system folder.Select it.
Right click on file selected in Ext2Explore and Click on SAVE,now browse to same folder where "ext4_system.img" was.Means newly created working folder/system under kitchen directory.
Then it will extract "ext4_system.img" to same folder.After finishing extraction close the Ext2Explore application.Now hit Enter in kitchen,again it will say "warning,no boot.img found" .Do not worry,HIT ENTER and go with default.
It will ask to view Rom info,you can skit this.
So finally you got system folder under working folder.So copy that system folder to any drive and rename it to Stock rom folder for further use.
[TIP:-]
>>IF your Rom is odexed then you should deodexed it before copying to any other drive for further use.<<
HOW TO CHECK THE ROM IS ODEXED:-
GO TO SYSTEM/APP and SYSTEM/FRAMEWORK folder and see that for every file there is clone file ending with .odex .If there is then your rom is odexed.
WHAT IS DEMAERIT OF ODEXED ROM FOR DEVELOPERS-
You will not able to theme and modify your rom if system and framework is odexed so better deodex the rom.Deodexing will combine file and its clone .odex to one unit.
DEODEXING:-
AFTER SETTING UP WORKING FOLDER AND DOING ALL ABOVE STEPS,now hit 0 in kithcen and select 11 option and hit enter.
IT will show number of odex files in your Rom.Now Select "b" option to deodexing all files,it will take some time.
After done,it will show that "0" files left odexed in Rom,now exit kitchen and Now you should copy your system folder to any drive for furter use.
GETTING STOCK ROM BOOT.IMG EXTRACTED
[STEPS]
Now open Kitchen and select 0(advance options) and Hit enter,now select option 12(tools for unpack and repack boot.img etc.)
Under 12th option,press "a"(Extract kernel+ramdisk from boot.img,recovery.img etc.) and hit Enter
Now a folder will be created Under kitcehn directory named like this- bootimg_040714_132352 Now copy your boot.img and paste into this folder.
Now switch to Kitchen Terminal and press Enter.Then it will do some process and extract your boot.img,Now copy that folder and save it to any drive and Rename it to stock boot for further use.
NOW DOWNLOAD PORT ROM YOU CHOOSED TO PORT AND MOVE TO NEXT STEP BELOW.
PORTING
PORTING
>>>>Follow STEP I if you have port rom flashable via cwm.To check that your rom is flashable vai cwm see above post for structure.Those who having SP Tools flashable port rom follow StepII directly.<<<<
First we will port and check that rom boots or not by simple way,then if it boots then we will modify it and tweak it by using kithcen.Or you can skip this step I and directly follow step II but you have to do almost all things from step I in Step II except modifying updater script.If you do these things in step I then no need to do in Step II.
STEP I
[*]Make a folder and name it as you want and copy and paste your port rom zip in it,means make a clone file of it and we will be working with clone zip,always keep in mind.I said to copy paste as if your rom did not boot up then you have a backup of clean port rom.
[*]Now create a folder under original update of kitchen- " WORKING_XXXX "
[*]Then open zip using 7zip(make 7zip is as default app) and drag drop boot.img to " WORKING_XXXX " folder.Now Open kitchen and Press 1 to setup working Folder.And go with default in all steps forward.(keep 7zip opened,you will need to drag back boot.img in it)
[*]After working folder setuped.Now press 0 for advance option and hit enter.Now press 12 and hit enter.Now you press "w" to extract boot.img from working folder.
[*]After sucessful extraction you will find a folder under kitchen named BOOT EXTRACTED.
[*]Now you have to copy zImage from stock boot extracted folder(which was created by you in second post last step) to this BOOT EXTRACTED folder and replace it.
[*]Then switch to kitchen and press "b" to build boot.img from BOOT EXTRACTED folder then after repacking boot.img finish,you have to drag and drop only boot.img(kitchen/working folder)(not meta-inf) to port rom zip.
[*]Now Open System Folder In port Zip and drag drop build.prop file out of it to anywhere you wish.
[*]Now edit it with Notepad++.
[*]Add this line if you are porting from a higher resolution device- ro.sf.lcd.density=220 .Change its value after rom boots as to your display resolution.If after rom boots up and everything looking large then reduce the value and if looking small then increase it.
[*]You can Edit These Values as desired:-
Code:
ro.build.id=
ro.build.display.id=
ro.custom.build.version=
ro.build.version.release=This is Andriod version That Displays in Settings
ro.product.model=
ro.product.brand=
ro.product.name=
ro.product.device=
ro.product.manufacturer=
ro.build.bluetooth.name=
[*]EDIT BELOW LINES TO SET YOUR TIMEZONE AND AREA REGION.You can find your default details in your stock rom's build.prop which you extracted earlier.
Code:
ro.product.locale.language=(en for English,ru for Russian and other similar codes for other language)
ro.product.locale.region=(us for usa, IN for india etc.)
persist.sys.timezone=( Asia/kolkata for india,Asia/... different for different regions)
[*]Now after editing done drag build.prop to port zip.
[*]Now keep opened port zip one side and open stock rom system folder which we extracted in post 2.
[*]Open System/etc/firmware in both zip and stock folder.Now drag modem.img from stock folder to zip and drop it.
[*]Now head to lib folder in both.Here you have to drag and drop libcamercustom.so file to port zip.
[*]Go to system/lib/modules now,here drag and drop mtk_stp_wmt.ko file to port zip.If rom did not boots forward then you should drag and drop whole modules folder under system/lib of port zip.
[*]Go to usr/keylayout in both and drag drop Generic.kl file from stock to port zip.
[*]Lastly drag and drop a launcher like nova,apex or any to system/app/ of port zip in case port launcher did not worked.
[*]IF you rom did not booted by applying all above steps then replace these folder/files from stock to port:-
1)system/etc/firmware
2)system/lib/hw
3)system/lib/modules
4)system/vendor
[*]If your cwm port rom zip have these files then delete those.
---uboot.bin
---preloader
---logo.bin(you can keep it but you need your stock logo.bin which is available in sptool flahable roms.I will also tell you how to create own logo.bin and bootanimation in below post.)
[*]Your zip should look like this-
--Meta-inf
--system
--boot.img
--data (in some roms)
[*]After deleting the extra files you need to modify the updater script which can be found under,Meta-inf/com/google/android/updater-script...we are modifying by own only this time as we have to check only.During building rom from kitchen,it will be automatically created
as we registered our device.If we do not register our device in kitchen then during making roms from kithcen our current updater script will converted to update script which will be again converted to updater script and that will cause installation aborted error.
[*]Now drag and drop updater script from zip to anywhere and open it with notepad++,now find lines below-
Code:
format("ext4", "EMMC", "/dev/block/[COLOR="DarkOrange"]mmcblk0p7[/COLOR]", "0");
format("ext4", "EMMC", "/dev/block/[COLOR="DarkOrange"]mmcblk0p5[/COLOR]", "0");
mount("ext4", "EMMC", "/dev/block/[COLOR="Red"]mmcblk0p7[/COLOR]", "/data");
mount("ext4", "EMMC", "/dev/block/[COLOR="Red"]mmcblk0p5[/COLOR]", "/system");
[*]Here you have to deal with text in red.Your updater script may be different so use your brain and understand what i am saying forward.Text in red is mount point.In above mmcblk0p7 is mount point of data folder and mmcblk0p5 is mount point of system folder.So you need to replace mount points of updater script with your device mount points.You must found mount points of your device during registering device to kitchen.So open recovery.fstab or that kitchen/tool/edify_defs/your file with notepad++ and copy replace mount points from your device file to updater-script of port zip.If you find those lines any more places in updater script then also replace there.Here you only need some mind to use.For example if you edited and replaced red text then you must also replace orange text as they are also same.
[*]Remove the lines of the files which you removed in zip if there,like uboot.bin,logo.bin,preloader etc...they will look like below codes,you only need to find the line matching to the file you removed and deleat that.
Code:
package_extract_file("uboot.bin", "/dev/uboot");
or
assert(package_extract_file("uboot.img", "/tmp/uboot.img"),
write_raw_image("/tmp/uboot.img", "uboot"),
delete("/tmp/uboot.img"));
or
assert(package_extract_file("preloader.img", "/tmp/preloader.img"),
write_raw_image("/tmp/preloader.img", "preloader"),
delete("/tmp/preloader.img"));
[*]And replace this line
Code:
assert(package_extract_file("boot.img", "/tmp/boot.img"),
write_raw_image("/tmp/boot.img", "bootimg"),
delete("/tmp/boot.img"));
From this if any error occurs during installtion like boot.img assert failed.
Code:
package_extract_file("boot.img", "/dev/boot");
[*]Drag back the updater-script to zip from where it was taken from.
What we have done above is that we drag and drop some stock files from stock rom to port zip without extrating it.
Now you are good to flash your ported rom.Make CWM backup if you want to go back to previous rom or rom did not booted.After that wipe data factory reset,wipe cache partition,wipe dalvic cahce under advance option and then format system under mount and storage OF CWM RECOVEY then install zip from sd card and install your zip.I said SD card in first post if your rom did not booted and you understood your mistake and modified your port rom zip then you can do that directly by transferring zip to sd and flash instead of installing or restoring another rom.But for the users with not sd card must save their CWM backup or a working cwm flahable Rom zip otherwise they will have to reflash the rom by SP tools if rom didnot booted.
STEP II
NOTES BEFORE BEGINNING STEP II :-
If you ported your ROM using STEP I and booted then for modifying use this STEP II.
If you tried porting rom using STEP I but it is showing installation aboted then follow this STEP II directly.
IF you have SP Flash tools format port rom and you extracted system folder and boot.img from your stock rom using my method then Follow STEP II directly.
STEP II contains some steps from STEP I,so if you already did those steps in STEP I and using same zip here then you can skip steps here.If you get confused then again do all steps.
STEP(A)- ADDING A WORKING FOLDER IN KITCHEN
FOR CWM ROM:-
Create a folder " WORKING_XXXX " under kitchen/original _update if you haven't.If you having it then check that it is empty.
Now open your port zip (or zip you ported through STEP I and was booted) and extract its System and boot.img to "WORKING_XXXX " folder.
Open kitchen and press "1" to setup a working folder.
Press Enter and select "WORKING_XXXX " folder by it assigned digit and hitting Enter
Now it will ask for name,you may change it or leave it,it does not matter.Skip it by pressing Enter.
It will start copying files to a working folder,wait sometime.
After it will ask to view Rom info,then press Y and see its info as your wish.
Now you have a working folder setup-ed.
FOR SP TOOLS ROM:-
Extract system.img & boot.img from port rom zip to C;\cygwin\home\username\kitchen\original_update
Run Kitchen and press "1" to setup working folder and hit enter.
Now again hit Enter,this time it will ask you to choose an option to select working folder,Select system.img&boot.img one folder by pressing its value and hitting enter.
Now it will ask about changing working folder name,leave it as default and hit enter.So kitchen will now start copying rom to working folder.
After Copying files it will auto prompt and open Ext2Explore application.In some cases it will show that error message that "unable to read disk,please make sure you are running appliacation with administrative rights."But don't worry,click ok.
Now after Ext2Explore opened,click on "FILE" on upper left corner and click on "OPEN IMAGE".Now browse to kitchen directory and go through newly created working folder and you will find "ext4_system.img" under system folder.Select it.
Right click on file selected in Ext2Explore and Click on SAVE,now browse to same folder where "ext4_system.img" was.Means newly created working folder/system under kitchen directory.
Then it will extract "ext4_system.img" to same folder.After finishing extraction close the Ext2Explore application.Now hit Enter in kitchen and go with default then Press y to view ROM info as per your wish.
Now you have a working folder setup-ed.
STEP(B)-Porting Rom
PATCHING BOOT.IMG:-
After successful creation of working folder you will find a new folder created named like-"WORKING_041214_135729".
Open kitchen then Press 0 for advance option and hit enter.Now press 12 and hit enter.Now you press "w" to extract boot.img from working folder.
After sucessful extraction you will find a folder under kitchen named BOOT EXTRACTED.
Now you have to copy zImage from stock boot extracted folder(which was created by you in second post last step) to this BOOT EXTRACTED folder and replace it.
Now switch to kitchen and press "b" to build boot.img from BOOT EXTRACTED folder then after repacking boot.img finish press x to exit and back to main menu.
Editing Build Prop:-
you will find build.prop under kitchen/your_working_folder/system/
Edit build.prop with notepad++
You can Edit These Values as desired:-
Code:
ro.build.id=
ro.build.display.id=
ro.custom.build.version=
ro.build.version.release=This is Andriod version That Displays in Settings
ro.product.model=
ro.product.brand=
ro.product.name=
ro.product.device=[B][U][COLOR="Red"]NAME OF FILE WHICH YOU USED TO REGISTER YOUR DEVICE TO KITCHEN[/COLOR][/U][/B]
ro.product.manufacturer=
ro.build.bluetooth.name=
EDIT BELOW LINES TO SET YOUR TIMEZONE AND AREA REGION.You can find your default details in your stock rom's build.prop which you extracted earlier.
Code:
ro.product.locale.language=(en for English,ru for Russian and other similar codes for other language)
ro.product.locale.region=(us for usa, IN for india etc.)
persist.sys.timezone=( Asia/kolkata for india,Asia/... different for different regions)
Add this line if you are porting from higher resolution deice or lower resolution device.If from higher to lower then put lower values and if lower to higher then put higher values.
Code:
ro.sf.lcd_density=xxx
Now after editing done save it and exit.
Patching Rom With Some STOCK Rom Files:-
Copy modem.img from stock Rom- System/etc/firmware to kitchen/working_folder/system/etc/firmware and replace it.
Copy libcamercustom.so file from stock Rom- System/lib to kitchen/working_folder/system/lib and replace it.
Copy mtk_stp_wmt.ko file from stock Rom- System/lib/modules to kitchen/working_folder/system/lib/modules and replace it.If ROM not booted then replace whole modules.
Copy Generic.kl file from stock Rom- System/usr/keylayout to kitchen/working_folder/system/usr/keylayout and replace it.
Download any launcher apk from net link nova,apex etc and paste into kitchen/working_folder/system/app/
If after Building rom from next step,your rom did not booted then replace these files from stock to port then build rom.
1)system/etc/firmware
2)system/lib/hw
3)system/lib/modules
4)system/vendor
Building Rom
After all above steps done,now switch to kitchen and press 99 to build ROM.
But before pressing 99 check that you put name of file by which you registered your device to kitchen in build.prop/ro.product.device="".If you registered with name x then put like this-ro.product.device="x"
If you have not done above step then you will get installation aborted error during installation.If you are confused to register device send me required fies as asked by me in above post.
After all checked now press 99
Select Build Option 1 then hit Enter
Now it will ask to zip-lang the apk,do as your wish.
After that step it will convert Updater Script and ask two option,Proceed or cancel,then Proceed by pressing "y".
It will then start making update.zip.Wait some time.
Next it will ask to sign the zip or not?You should go with default by signing update zip by hitting Enter or Pressing "y" then pressing enter.It will take some time.
After that if you want to change your ROM name then put desired name by pressing y or leave as it is by hitting Enter or 'N' then enter.
Collect you rom.zip from Output_zip folder created under kitchen directory.
Flash it and check it.
If you find some bugs then see post below to solve bugs or if you are not able to find bug solution below then post it.I will tell you how to solve it if i know.
I have ported 10+ Roms using this method,this should work for you too.Hopes that your ROM will boot.Good Luck.
SOLVING BUGS
BUG SOLVING USES HIT AND TRIAL METHOD.I mentioned one or more ways to solve,you try one by one and see which works for you.
FM NOT WORKING:-
COPY THESE FILES FROM STOCK TO PORT:-
\system\lib\libaudio.a2dp.default.so
\system\lib\libaudio.primary.default.so
\system\lib\libaudiocompensationfilter.so
\system\lib\libaudiocustparam.so
\system\lib\libaudioeffect_jni.so
\system\lib\libaudioflinger.so
\system\lib\libaudiosetting.so
\system\lib\libfmar1000.so
\system\lib\libfmcust.so
\system\lib\libfmjni.so
\system\lib\libfmmt6616.so
\system\lib\libfmmt6620.so
\system\lib\libfmmt6626.so
\system\lib\libfmmt6628.so
OR try this
system/etc/firmware/mt6620_patch_e3_hdr.bin
system/etc/firmware/mt6620_patch_e6_hdr.bin-> If yours is MT6628, you'll need to patch all mt6628_fm_*_*.bin too
system/etc/firmware/WMT.CFG-> This is the antenna cfg, without this, FMradio cannot receive clearly
system/lib/modules/mtk_fm_drv.ko
system/lib/libfmcust.so
For WiFi Bluethooth:-
system/lib/modules/mtk_wmt_wifi.ko -> After patching, both works & can be individually switch on/ off
system/lib/libbluetooth_mtk.so
system/lib/libbluetoothem_mtk.so -> MTK Engineering will show MT6628 if not patch...
system/etc/firmware -> if yours is MT6628, you'll need to patch all WIFI_RAM_CODE_* too
For GPS:-
->>>> system/xbin/libmnlp
or, If you porting From MT6628 to MT6620, some apps at system/vendor/operator/ is blocking GPS so just delete all apps & use MTK Engineering mode to confirmed it...
Edit in build.prop
fmradio.driver.chip=1 -> if yours is MT6628 then change it to 3
mediatek.wlan.chip=MT6620 -> if yours is MT6628 then change last digit to 8
mediatek.wlan.module.postfix=_mt6620 -> if yours is MT6628 then change last digit to 8
For Camera:-
->Unpack boot.img again and go to BOOT-EXTRACTED/boot.img-ramdisk/init.project.rc and edit with notepad++,also open stock bootextracted/ramdisk/init.project.rc.Now find camera permissions and replace whole camera line with stock camera lines.
->then open init.rc of both port and stock and find camera lines and copy/replace camera lines from stock to port.
->Now repack boot.img
OR
copy these from stock to port
system\lib\hw\camera.default.so --- (if you have two files like camera.goldfish.so delete this the one with the goldfish)
\system\lib\libcamera_client.so
\system\lib\libcameracustom.so
\system\lib\libcameraprofile.so
\system\lib\libcameraservice.so
or
copy from system/lib of stock to port.
- libmhal.so
- libmhalcontent.so
- libmhaldrv.so
- libmhalmdp.so
- libmhalpipe.so
- libmhalscenario.so
- libmhalutility.so
or
Put libcamdrv.so of rom only or campare the file of size of your porting rom file and the base rom then whose size is same leave it and whose size is greater in ur stock rom jst add and replace that file only.
or
lib3a.so
liba3m.so
libacdk.so
libaudioflinger.so
libc.so
libcam.camadapter.so
libcam.campipe.so
libcam.camshot.so
libcam.client.so
libcam.paramsmgr.so
libcam.utils.so
libcam_camera_exif.so
libcamalgo.so
libcamdrv.so
libcamera_client.so
libcamera_jni_eglfence.so
libcamera_metadata.so
libcameracustom.so
libcameraservice.so
libgn_camera_feature.so
libexif
libfeatureio.so
libfrsdk.so
libft.so
libgcomm_jni.so
libgoggles_clientvision.so
libgui.so
libimageio.so
libja3m.so
libjni_mosaic.so
(Skip if any missing)
or
Replace camera.apk in sysyem/app
And do a ctrl+f search in system/lib for anything called 'camera', 'camrecorder', or just 'cam' and replace those.
Storage mount Problem Fix:-
copy paste sytem/etc/vold.fstab from stock to port
USB NOT MOUNTING IN PC FIX:-
copy init.usb.rc from stock boot.img extracted to port and repack.
Audio Problem Fix:-
copy paste sytem/lib/all audio lib file from stock to port.(search by ctrl+f)
ICON RESIZER:-
see these
http://forum.xda-developers.com/showthread.php?t=2219584
http://forum.xda-developers.com/showthread.php?t=2380513
DATE AND TIME ERROR FIX:-
check build prop region and compare and replace from stock build prop.
or
Use gravity box date and time fix
Minimum Brightness:-
ro.init.screen_brightness=110 in build prop
If App Force Closing:-
Use Updated App or if only rooted apps are getting Force close then Check Root
If nothing helped then removed that apk from system folder.
If a weird image Showing Between Boot logo and boot animation:-
Use stock rom's system/media/images/boot_logo in port.
TWEAKING&MODIFICATION
BUILD.PROP TWEAKS
HOW TO ADD:-Open Build.prop with Notepad++ and copy and paste these tweaks lines and save it.
Force launcher into memory
Code:
ro.HOME_APP_ADJ=1
Raise JPG quality to 100%
Code:
ro.media.enc.jpeg.quality=100
VM Heapsize; higher the RAM, higher the hp can be.
Code:
dalvik.vm.heapsize=48m
Render UI with GPU
Code:
debug.sf.hw=1
Decrease dialing out delay
Code:
ro.telephony.call_ring.delay=0
Helps scrolling responsiveness
Code:
windowsmgr.max_events_per_sec=150
Save battery
Code:
wifi.supplicant_scan_interval=180
pm.sleep_mode=1
ro.ril.disable.power.collapse=0
Disable debugging notify icon on statusbar
Code:
persist.adb.notify=0
Increase overall touch responsiveness
Code:
debug.performance.tuning=1
video.accelerate.hw=1
Raise photo and video recording quality
Code:
ro.media.dec.jpeg.memcap=8000000
ro.media.enc.hprof.vid.bps=8000000
Signal (3G) tweaks
Code:
ro.ril.hsxpa=2
ro.ril.gprsclass=10
ro.ril.hep=1
ro.ril.enable.dtm=1
ro.ril.hsdpa.category=10
ro.ril.enable.a53=1
ro.ril.enable.3g.prefix=1
ro.ril.htcmaskw1.bitmask=4294967295
ro.ril.htcmaskw1=14449
ro.ril.hsupa.category=5
Net speed tweaks
Code:
net.tcp.buffersize.default=4096,87380,256960,4096,16384,256960
net.tcp.buffersize.wifi=4096,87380,256960,4096,16384,256960
net.tcp.buffersize.umts=4096,87380,256960,4096,16384,256960
net.tcp.buffersize.gprs=4096,87380,256960,4096,16384,256960
net.tcp.buffersize.edge=4096,87380,256960,4096,16384,256960
Disable blackscreen issue after a call
Code:
ro.lge.proximity.delay=25
mot.proximity.delay=25
Fix some application issues
Code:
ro.kernel.android.checkjni=0
Phone will not wake up from hitting the volume rocker
Code:
ro.config.hwfeature_wakeupkey=0
Force button lights on when screen is on
Code:
ro.mot.buttonlight.timeout=0
Disable boot animation for faster boot
Code:
debug.sf.nobootanimation=1
Miscellaneous flags
Code:
ro.config.hw_menu_unlockscreen=false
persist.sys.use_dithering=0
persist.sys.purgeable_assets=1
dalvik.vm.dexopt-flags=m=y
ro.mot.eri.losalert.delay=1000
Init.d TWEAKS
HOW TO ADD:-
-->>For adding init.d tweaks you must add init.d support from kitchen by using option "14" then you will see a new folder will be created under system/etc/"init.d"
-->>Now open a empty file with notepad++ and add- " #!/system/bin/sh " at top and then add below lines then save it with name as you wish.Make separate file for each tweak.
[*]Strict minfree handler tweak
Code:
echo "2048,3072,6144,15360,17920,20480" > /sys/module/lowmemorykiller/parameters/minfree
[*]Internet speed tweaks
Code:
echo "0" > /proc/sys/net/ipv4/tcp_timestamps;
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse;
echo "1" > /proc/sys/net/ipv4/tcp_sack;
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle;
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling;
echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes;
echo "30" > /proc/sys/net/ipv4/tcp_keepalive_intvl;
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout;
echo "404480" > /proc/sys/net/core/wmem_max;
echo "404480" > /proc/sys/net/core/rmem_max;
echo "256960" > /proc/sys/net/core/rmem_default;
echo "256960" > /proc/sys/net/core/wmem_default;
echo "4096,16384,404480" > /proc/sys/net/ipv4/tcp_wmem;
echo "4096,87380,404480" > /proc/sys/net/ipv4/tcp_rmem;
[*]Vm management tweaks
Code:
echo "4096" > /proc/sys/vm/min_free_kbytes
echo "0" > /proc/sys/vm/oom_kill_allocating_task;
echo "0" > /proc/sys/vm/panic_on_oom;
echo "0" > /proc/sys/vm/laptop_mode;
echo "0" > /proc/sys/vm/swappiness
echo "50" > /proc/sys/vm/vfs_cache_pressure
echo "90" > /proc/sys/vm/dirty_ratio
echo "70" > /proc/sys/vm/dirty_background_ratio
[*]misc kernel tweaks
Code:
echo "8" > /proc/sys/vm/page-cluster;
echo "64000" > /proc/sys/kernel/msgmni;
echo "64000" > /proc/sys/kernel/msgmax;
echo "10" > /proc/sys/fs/lease-break-time;
echo "500,512000,64,2048" > /proc/sys/kernel/sem;
[*]Battery tweaks
Code:
echo "500" > /proc/sys/vm/dirty_expire_centisecs
echo "1000" > /proc/sys/vm/dirty_writeback_centisecs
[*]EXT4 tweaks (greatly increase I/O)
(needs /system, /cache, /data partitions formatted to EXT4)
Code:
tune2fs -o journal_data_writeback /block/path/to/system
tune2fs -O ^has_journal /block/path/to/system
tune2fs -o journal_data_writeback /block/path/to/cache
tune2fs -O ^has_journal /block/path/to/cache
tune2fs -o journal_data_writeback /block/path/to/data
tune2fs -O ^has_journal /block/path/to/data
[*]Perfect mount options
Code:
busybox mount -o remount,noatime,noauto_da_alloc,nodiratime,barrier=0,nobh /system
busybox mount -o remount,noatime,noauto_da_alloc,nosuid,nodev,nodiratime,barrier=0,nobh /data
busybox mount -o remount,noatime,noauto_da_alloc,nosuid,nodev,nodiratime,barrier=0,nobh /cache
[*]Flags blocks as non-rotational and increases cache size
Code:
LOOP=`ls -d /sys/block/loop*`;
RAM=`ls -d /sys/block/ram*`;
MMC=`ls -d /sys/block/mmc*`;
for j in $LOOP $RAM
do
echo "0" > $j/queue/rotational;
echo "2048" > $j/queue/read_ahead_kb;
done
[*]MicroSD card speed tweak
Code:
echo "2048" > /sys/devices/virtual/bdi/179:0/read_ahead_kb;
[*]Defrags database files
Code:
for i in \
`find /data -iname "*.db"`
do \
sqlite3 $i 'VACUUM;';
done
[*]Remove logger
Code:
rm /dev/log/main
[*]Ondemand governor tweaks
Code:
SAMPLING_RATE=$(busybox expr `cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency` \* 750 / 1000)
echo 95 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold
echo $SAMPLING_RATE > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/sampling_rate
[*]Auto change governor and I/O Scheduler
Code:
echo "vr" > /sys/block/mmcblk0/queue/scheduler
or
echo "sio" > /sys/block/mmcblk0/queue/scheduler
[*]Governor (Best: Minmax > SavagedZen > Smoothass > Smartass > Interactive) - needs kernel with these
Code:
echo "governor-name-here" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
[*] Disable normalize sleeper
Code:
mount -t debugfs none /sys/kernel/debug
echo NO_NORMALIZED_SLEEPER > /sys/kernel/debug/sched_features
GPS.conf TWEAKS
How To:-Create or edit your /system/etc/gps.conf with a Notepad++.
Benefit:-For improving GPS lock time and signal.
-->>SE supl for A-GPS (better than Nokia's or Google's)
Code:
SUPL_HOST=supl.sonyericsson.com
SUPL_PORT=7275
Or DOWNLOAD this patched gps.config
APN TWEAKS
-->>apns-conf.xml located at system/etc/"apns-conf.xml"
-->>Edit apns-conf.xml with notepad++ to add desired apns.
-->>Use CyanogenMOD's APN list file - it's one of the most complete.Download from google.
-->>You can use Mine one too- Downlaod
ADS BLOCK TWEAK
(Lots of developers are supported Through it so please think twice before adding it.)
-->>You can use mine hosts file.Download
-->>You can refer these url for getting file content-
http://www.mvps.org/winhelp2002/hosts.txt
http://pgl.yoyo.org/adservers/serverlist.php?showintro=0;hostformat=hosts
-->>hosts file are located to system/etc/"hosts"
USE LATEST SUPERUSER APP AND SU BINARY
Downlaod From here
USE PORTED APPS IN YOUR ROM
HERE IS LINK OF HUGE COLLECTION OF PORTED APPS:-CLICK
How to Implemant Ported Apps?
->Download it and open its zip.
->Now open system folder in zip and drag and drop all files to port rom means copy all system folder contents only to port system folder.
More things will be added soon.
THEMING
I will discuss very short on Theming,rest search on Google.
[START]
SETTING UP APKTOOL:-
->>If you have installed apktool and java then you can start.
->>Now go to the extracted apktool folder and hold "SHIFT" keyboard button and then right click mouse.
->>Here select-Open command window Here" option.
->>For Theming you need to decompile the apk which you want to theme,so grab those apks first and put into apktool folder.
-->>Also take framework-res.apk and medaitek-res.apk and put these also in apktool folder.
->>For decompiling system folder apk,you need to install framework-res.apk and medaitek-res.apk first.So in command window input-
Code:
apktool if framework-res.apk
apktool if mediatek-res.apk
->>hit enter one after one.So you will get message that apk installed to....for both apks.
->>Always write words carefully in command terminal,write same words as apks in apktool folder.
NOW YOU CAN DECOMPILE SYSTEM APKS OF THE ROM WHOSE FRAMEWORK YOU HAVE INSTALLED.IF YOU DONE WITH THAT ROM AND WANT TO MODIFY NEXT ROM APKS THEN
GO TO C:\users\yourusername\apktool and delete all present apks.
Lets start Decompiling:-
->>Open command terminal under apktool,if you already opened then good.
Lets assume that you are decompiling launcher.apk then,
->>Type this below command to decompile apk.You need to replace only apk name....
Code:
apktool d launcher.apk
->>and hit enter.It will decompile in same apktool folder.
->>Now open it and modify it as you wish.
->>For editing its images and theme and look,go to drawable-hdpi folder replace pngs with same resolution pics or edit with photoshop or gimp etc.
->>You can do major modification in thems with systemUI.apk
->>And for rest take help from google.I will update this and add more stuffs when i get time.
->>Now after all modifications done,now lets compile apk.Use command below and replace apk name....
Code:
apktool b launcher.apk
->>Hit enter.Now you have to drag and drop meta-inf and AndroidManifest.xml of launcher.apk which was placed under apktool directory for decompiling(use 7 zip to open apk and drag files from it) to apktool directory/launcher/build/apk/ and replace when prompt.
->>Now again repeat this command in command bar-
Code:
apktool b launcher.apk
->>hit enter,Now this time you can collect you compiled apk from- apktool directory/launcher/dist/"launcher.apk"
->>I know you may get confused by all these steps so watch an awesome video by nero young to clear your confusions-VIDEO
MAKING PATCHES ZIP
IT WILL BE VERY EASY FOR YOU TO MAKE PATCHES ZIP IF YOU DOWNLOAD THESE BELOW 4 FILES :-
1) ONLY BOOT.IMG PATCH ZIP
2) ONLY SYSTEM FOLDER PATCH ZIP
3) SYSTEM FOLDER + BOOT.IMG PATCH ZIP
4) KERNEL ZIP & KEREL REVERT ZIP.
Download above Zips.
First zip is for extracting only boot.img patch .
Second zip will patch system folder's all folder.
Third Zip will allow you to patch both boot.img and system folder contents of your rom.
Fourth one will allow you to flash any custom kernel if available for your device.
How to use all above patches.zip?
->For first one open zip using 7zip and drag the boot.img you want to patch to it then flash it with cwm
->For second one,if you want to add an apk or any other lib files or replce lib file or any other system folder files to your rom then drag and drop that file to second zip with correct folder path.
->Third one will allow first and second to flash at once.
->Fourth zip is for custom kernel,Custom kernel contains two part,boot.img and another system/lib/modules/lots of file.For custom kernel flashing or reverting with stock kernel,you need to drag and drop boot.img and system/lib/modules/ to fouth zip and flash via cwm.
IF YOU WANT TO ADD UBOOT.BIN TO ROM OR FLASH UBOOT.BIN THEN USE BELOW LINE IN UPDATER SCRIPT:-
package_extract_file("uboot.bin", "/dev/uboot");
Click to expand...
Click to collapse
ADDING OTA UPDATE
You will need to download its apk first- OTA_UPDATER_DWONLAOD
You will also require all 4 patch zips from above post.
STEPS TO ADD OTA UPDATE :-
Put OTAUpdater-1.0.5.apk in system/app folder.
Edit build prop by notepad++ and add these three lines:-
Code:
otaupdater.otaid=<ROM ID any you can pick>
otaupdater.otatime=<Date/time of this build in yyyymmdd-hhmm format>
otaupdater.otaver=<The human-readable version number/name>
EXAMPLE FROM MY ROM:-
Code:
otaupdater.otaid=xos
otaupdater.otatime=20130930-1553
otaupdater.otaver=1.0
Now you are good to receive and send OTA update to your Rom....but first you have to setup account online.
Registering Device Online
Go to https://www.otaupdatecenter.pro/ and Register there.
After successful registration,click on +Add Rom.A form will be opened then.Fill it.
1)Enter Rom name same as you written in build prop display id.
2)Enter ROM OTA ID (as in build.prop)
3)Enter ROM version (as in build.prop)
4)Enter OTA date/time here (yyyymmdd-hhmm, as in build.prop).
5)Enter download url.(put any URL right now,we are just adding rom first)
6)Enter MD5 file-hash.(put any file md5 check sum.we will edit it when we provide update)
7)Put any Change log...write anything
8)On last column put the name of your device same as in build prop "ro.product.device= ".In my case i use a110q and here is my code in build prop:-
Code:
ro.product.device=a110q
Lastly do not tick on check box as it will make OTA private.
Now your device is registered.
PROVIDING OTA UPDATE:-
Create update using any of my 4 files which you need to update.Lets assume you want to update an apk or add an apk,so you will use my only system folder patch zip.
Now open my provide zip using 7zip and drag and drop your apk with its path.As i provided patch with only system folder and no path forward.So open system folder and right click and create folder,name it "app" and then open app and drag apk in it.
If you were updating bootanimation then you should create media folder under system folder of my zip.
Now after making patches done.Download the Sign-em! from HERE and extract it anywhere.
You will get input,output and some more files....put your zip in input and run "sign-em.bat",it will sign your update zip and also give you its md5checksum.Signing your update is necessary.
After signing zip upload it to drop-box (suggested and tested) and after upload finished,click on download button and copy its url which is generated after that.Means copy url which is prompt in download manager if you using.If you do not use this url then OTA will not work.
Again open https://www.otaupdatecenter.pro/ and go to rom list and click on update rom.
This time put download URL which was generated after clicking download button on dropbox in URL box and also put its md5 checsum which was generated in output folder text file of sign-em!!
And change version also,put 2.0 in version if earlier 1.0,you can also put 1.1 or 1.2 any you want but change it.
And lastly put new date and time as per its format and give your update description if you want.
Check all things then click Update.All done you are good to get update.
Your mobile should have data connection enabled all time during this process.
if any confusion ask me or see faq on https://www.otaupdatecenter.pro/
WIP
ADDING CUSTOM KERNEL
CUSTOM KERNEL ZIP STRUCTURE:-
->>Meta-inf
->>system/lib/modules
->>boot.img
For Adding it to your rom extract your kernel zip or drag and drop system/lib/modules/all files to port rom and replace all.
Then switch to kitchen and press "0" for advance option and then 12 for extracting boot.img.Here press "a" for extracting boot.img from any folder.Hit enter,you will see a folder created named like "bootimg_041114_230352" and put your custom kernel boot.img in it.
Now press Enter then kitchen will extract it in same folder.
Then back to kitchen 12 th menu of extraction of boot.img,here press "w" to extract boot.img from working folder,so it will extract boot.img from port rom(which is present in working folder) to BOOT-EXTRACTED folder under Kitchen.
Now copy zImage from previous extracted folder "bootimg_041114_230352" to BOOT-EXTRACTED folder and replace it.
Press b in kitchen to repack boot.img.All done.
What we have done above- We used zImage(from boot.img) of custom kernel in port rom boot.img and used all system/lib/modules folder from Custom kernel zip.
ADDING SMALL BUT COOL STUFFS
ADDING DESIRED TEXT DURING ROM INSTALLATION:-
After Finishing your Rom,drag and drop Meta-inf/com/google/android/"Updater-script" to anywhere in your pc.
Now open it with Notepad++,and use this code to dislpay your texts in installation:-
Code:
ui_print(" ");
Put any alphabet or symbol or digit between (" ") and it will show during Installation.
For generating cool Ui prints you can search Google about text to ASCII converter websites and put your text and get cool texts for installation window.
After all modifications done,drag and drop back updater script to zip.
For Example:-
Code:
ui_print("========STARTING INSTALLATION===========");
ui_print("========================================");
ui_print(" |\ _,--------._ / | ");
ui_print(" | `.,' `. / | ");
ui_print(" ` ' BEAST ,-' ' ");
ui_print(" \/_ _ ( / ");
ui_print(" (,-.`. ,',-.`. `__,' ");
ui_print(" |/*\ ),-','*\`= ,'.` | ");
ui_print(" `._/) -'.\_,' ) ))| ");
ui_print(" / (_.)\ . -'// ");
ui_print(" ( /\____/\ ) )`'\ ");
ui_print(" \ |V----V|| ' , \ ");
ui_print(" |`- -- -' ,' \ \ _____ ");
ui_print(" ___ | .' \ \ `._,-' `- ");
ui_print(" `.__,`---^---' \ ` -' ");
ui_print(" -.______ \ . / ______,- ");
ui_print(" `. ,' ");
ui_print("=== STOCK BEAST ROM BY DIGYVIJAY KR. ===");
ADDING AROMA INSTALLER:-
Take help from HERE
And here is an HELPFUL VIDEO.
I will explain these stuffs later
ADDING CUSTOM BOOT ANIMATION & SHUT-ANIMATION:-
You Can find bootanimation and shutanimation under system/media folder.If you ported from larger resolution device or smaller resolution device then animation will look weird.so you need to resize it or add own made one.
[*]For adding own or editing previous boot-animation you will need this software-Download thanks to @despotovski01 for this)
[*]Now install it.You will also need to know your mobile resolution for making or resizing boot-animation or shut-animation to your size.
FOR RESIZING BOOT-ANIMATION & Shutanimation:-
[*]Take bootanimation.zip from system/media and extract it to any folder.
[*]Now you will see lots of images in it under its sub folder like part0 part1...
[*]Resize all images to your screen resolution.You can use some softwares to resize them easily.Find on Google.(do not mess with serial number order)
[*]Now make a New folder and make another folder under it named- "part0" and put your all resized pngs to it.(from all folders you have in your bootanimation.zip)
[*]Start Boot Animation Factory and Click on "create a new boot-animation",then choose "folder" and click OK.
[*]Now click choose folder button and browse your created folder in which you put part0 folder.DO not choose part0 folder,choose is outer folder.
[*]Here Click on add loop then select part0 folder in prompt dialog box and click on add.
[*]If you want to repeat animation then tick repeat.Now you should preview it first before saving.you can adujust animation speed by clciking on text above your loop created,and click to edit it and then edit FPS according to need.Here is the example line:-30 is FPS here and rest is reso...
Code:
480,854,30
[*]If everything fine then click save boot-animation and save it with name same as in sytem/medaia folder and then replace it.Its all done.
[*]Same process for shut-animation.
FOR CREATING BOOT-ANIMATION & Shutanimation:-
You will have to use own creativity skill for creating its frames.Some knowledge of Photoshop required.
Design your boot animation frames and manage it serially.
Create a folder with any name and create another sub folder in it named "part0" and put all your designed pngs in it.
Start Boot Animation Factory and Click on "create a new boot-animation",then choose "folder" and click OK.
Now click choose folder button and browse your created folder in which you put part0 folder.DO not choose part0 folder,choose is outer folder.
Here Click on add loop then select part0 folder in prompt dialog box and click on add.
If you want to repeat animation then tick repeat.Now you should preview it first before saving.you can adujust animation speed by clciking on text above your loop created,and click to edit it and then edit FPS according to need.Here is the example line:-30 is FPS here and rest is reso...
Code:
480,854,30
If everything fine then click save boot-animation and save it with name same as in sytem/medaia folder and then replace it.Its all done.
Same process for shut-animation.
ADDING DESIRED BOOT LOGO:-
Download logo builder-Download And install.
Get Stock logo.bin -Get the file from your device (/dev/logo) or from stock Rom sp tools flasher.
Open Logo-builder and Click Create New Project
.,? ,1
Now Select the logo.bin file you extracted from the device or took from stock rom.
Make a new folder for the project, any name will work
0Select the folder and click on OK
You will see a progress bar running down. After finishing, you will get a whole bunch of images in the above selected folder
After that,Open the folder containing all the images which you made earlier.
Here Edit or replace" img1.png and img39.png " but keep one thing in mind that use same name and same resolution and same format(png) for replacing.
Click on "make" button on LogoBuilder and you will get update.zip in the folder you made for this project.You can flash this update.zip directly via cwm or you can add to your rom by using below step.
For using logo in your rom,extract logo.bin from update.zip and drag and drop to port rom zip or you can also put this in working folder of kitchen before making Rom.After that,add below code in updater-script to extract your logo-
Code:
package_extract_file("logo.bin", "/dev/logo");
Reserved.
Great Guide
Best Guide Thanks For Helping New Developer like me
yes best guide ever seen for Mediatek devices ....please add seperate section in this thread for MIUI and Lewa os framework and bug solving:fingers-crossed:
excellent guide
Not booting
Everything i done mentioned by you .... But, after flashing with the ported rom created by me , my device stucks in booting.... i don't understand where is the problem actually....
I just ported to this rom
http://forum.xda-developers.com/can...-april-note-3-chrizelnotethree-v3-7a-t2707462
for my mmx canvas 2 plus a110q....
plz help me.....
sawankumar2012 said:
Everything i done mentioned by you .... But, after flashing with the ported rom created by me , my device stucks in booting.... i don't understand where is the problem actually....
I just ported to this rom
http://forum.xda-developers.com/can...-april-note-3-chrizelnotethree-v3-7a-t2707462
for my mmx canvas 2 plus a110q....
plz help me.....
Click to expand...
Click to collapse
remove uboot.bin if present.And also try replacing bootclasspath from stock init.rc to port init.rc
srinath2912 said:
yes best guide ever seen for Mediatek devices ....please add seperate section in this thread for MIUI and Lewa os framework and bug solving:fingers-crossed:
Click to expand...
Click to collapse
Ok i will add them next time i modify the post.....all suggestions are welcome,,,
chanti548 said:
excellent guide
Click to expand...
Click to collapse
thank-you my friend.......
DevendraMilmile121 said:
Best Guide Thanks For Helping New Developer like me
Click to expand...
Click to collapse
thanks milee
digyvijaykumar123 said:
remove uboot.bin if present.And also try replacing bootclasspath from stock init.rc to port init.rc
Click to expand...
Click to collapse
In which directory i found init.rc & bootclasspath .........
sawankumar2012 said:
In which directory i found init.rc & bootclasspath .........
Click to expand...
Click to collapse
under extracted boot.img/ramdisk/init.rc.........you will find bootclass path there.
sawankumar2012 said:
In which directory i found init.rc & bootclasspath .........
Click to expand...
Click to collapse
I'm uploading some screenshot here... It may help u to find my problem... these are the port roms screenshot which i wanna port for my mmx a110Q
Hello, when you using phh's GSIs, you may found bugs on auto brightness, battery usage data, etc (e.g: Xiaomi, Huawei, etc.). For this, you can make an overlay files for your mobiles.
Requirements:
framework-res.apk on your stock rom. (It may on /system/framework/framework-res.apk)
apktool (to extract framework-res.apk)
git (to clone repo)
Linux (to build overlay files)
Steps:
1. Fork phhusson/vendor_hardware_overlay on GitHub.
2. Clone Repository which you forked, and make a new branch for your works.
3. Copy a device which similar for your device, and rename it to your own device.
4. Edit <Your device>/Android.mk (Just modify the contents of the brackets, same as below)
Code:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PACKAGE_NAME := treble-overlay-[Manufacturer of your device]-[Name of your device]
LOCAL_MODULE_PATH := $(TARGET_OUT)/overlay
LOCAL_IS_RUNTIME_RESOURCE_OVERLAY := true
LOCAL_PRIVATE_PLATFORM_APIS := true
include $(BUILD_PACKAGE)
5. Edit <Your device>/AndroidManifest.xml
Code:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.phh.treble.overlay.[Manufacturer of your device].[Name of your device]"
android:versionCode="1"
android:versionName="1.0">
<overlay android:targetPackage="android"
android:requiredSystemPropertyName="ro.vendor.build.fingerprint"
android:requiredSystemPropertyValue="+[write as similar format]*"
android:priority="[Take next number of last used]"
android:isStatic="true" />
</manifest>
If you don't know how to take androidriority, you can execute this commands to list priority which used already:
Code:
cd [Path of repository]
find -name AndroidManifest.xml |while read manifest;do packagename="$(xmlstarlet sel -t -m '//manifest' -v @package -n $manifest)";priority="$(xmlstarlet sel -t -m '//overlay' -v @android:priority -n $manifest)";echo -e "$priority\t$packagename";done|more
(the single line command split here, just for viewing or making a shell script):
Code:
find -name AndroidManifest.xml |while read manifest;do
packagename="$(xmlstarlet sel -t -m '//manifest' -v @package -n $manifest)";
priority="$(xmlstarlet sel -t -m '//overlay' -v @android:priority -n $manifest)";
echo -e "$priority\t$packagename";
done
It will print a list for you (unsorted), and you just take an unused priority.
You can find device fingerprint on /vendor/build.prop, or execute following commands (on your device or adb shell):
Code:
getprop ro.vendor.build.fingerprint
If you can't find ro.vendor.build.fingerprint, you can find ro.vendor.product.name or ro.product.vendor.device, then change android:requiredSystemPropertyName and android:requiredSystemPropertyValue what you found.
Huawei seems to use ro.hw.oemName to detect phone, and others manufacturer maybe have their own detection, too. But it should be unique for other phones with same manufacturer.
(It's NOT recommended unless your device don't have ro.vendor.build.fingerprint.)
6. Extract framework-res.apk with apktool on another side. (to avoid commited by mistake)
7. Replace <Your device>/res/xml/power_profile.xml to which power_profile.xml for your device.
It will on <Extracted framework-res.apk>/res/xml/power_profile.xml.
Or you can find whoever's device tree, it may have this file, too.
8. Edit <Your device>/res/values/config.xml
Find each key on following files what for your device:
Code:
[Extracted framework-res.apk]/res/values/arrays.xml
[Extracted framework-res.apk]/res/values/bools.xml
[Extracted framework-res.apk]/res/values/fractions.xml
[Extracted framework-res.apk]/res/values/integers.xml
And then replace values into <Your device>/res/values/config.xml
9. Add your device into <Path of repository>/overlay.mk
Just write like other lines.
10. Build overlays
Just execute following commands:
Code:
chmod u+x [Path of repository]/build/build.sh
[Path of repository]/build/build.sh
If You get this, Do what it said:
Code:
Please install aapt (apt install aapt should do)
Or if you get this:
Code:
OpenJDK Server VM warning: You have loaded library /root/overlay/vendor_hardware_overlay/build/signapk/libconscrypt_openjdk_jni.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.conscrypt.NativeCrypto.get_cipher_names(Ljava/lang/String;)[Ljava/lang/String;
at org.conscrypt.NativeCrypto.get_cipher_names(Native Method)
at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:764)
at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:56)
at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:49)
at com.android.signapk.SignApk.main(SignApk.java:942)
I have no solution, either. Try to build on another computer.
11. Test overlay with tests.sh and yourself
For general checks (symtax, etc.), just execute following command:
Code:
chmod u+x [Path of repository]/tests/tests.sh
[Path of repository]/tests/tests.sh
You should fix errors what reported for your device, and then restart from step 10.
If it reported errors but not for your device, just ignore it.
When check passed, you can find overlay file on <Path of repository>/build/treble-overlay-<Manufacturer of your device>-<Name of your device>.apk, just copy it into your phone's /system/overlay/, and set permission to rw-r--r-- / 0644.
And then reboot your phone to test your overlay.
12. If it works for your device, don't forget to perform a pull request for phhusson/vendor_hardware_overlay, to support his awesome works.
Thanks for the guide @minadzuki
but i'm getting this error after step 10:
(core dumped) aapt package -f -F ${name}-unsigned.apk -M $path/AndroidManifest.xml -S $path/res -I android.jar
even when i try to build for existing devices I got the same error
king1990 said:
Thanks for the guide @minadzuki
but i'm getting this error after step 10:
(core dumped) aapt package -f -F ${name}-unsigned.apk -M $path/AndroidManifest.xml -S $path/res -I android.jar
even when i try to build for existing devices I got the same error
Click to expand...
Click to collapse
Oh...I forgot this, sorry.
Because I haven't encountered this error, so I don't have a way to solve it, either. (I tried to built it on three remote servers only)
And...is it cause segment fault?
Or you can try to install google-android-build-tools instead of aapt. (because I can't find aapt on archlinux but found this)
Very nice guide, thanks!
I'll link it as part of a "how to contribute"
For aapt, there is an aapt included in the git. If it doesn't work for you (like @king1990's segfault), know that the one included in the git has the lowest priority. It will pick up aapt from the system first.
(but then you'll need to have a system-wide aapt).
Or if you have an Android SDK somewhere, you can set your PATH to include it.
Edit: I just realized that what I just described might actually be the issue. If there is a system-wide aapt, it will use the libc++ in the git, which would explain the crash.
I fixed this case in my current git.
If there is a system-wide aapt it will use it.
If for some reason, system-wide aapt isn't suitable, you can run build.sh with --local-aapt to force the use of the in-git aapt (i.e. it will have higher priority than system's so no conflict should happen)
king1990 said:
Thanks for the guide @minadzuki
but i'm getting this error after step 10:
(core dumped) aapt package -f -F ${name}-unsigned.apk -M $path/AndroidManifest.xml -S $path/res -I android.jar
even when i try to build for existing devices I got the same error
Click to expand...
Click to collapse
Could you check again with latest git?
If it still doesn't work, can you try to call build.sh --local-aapt ?
@phhusson Thanks now it working fine and building without faults
I have few questions regarding the AndroidManifest.xml :
1- for android:requiredSystemPropertyValue how do I know which name to use ? is it trial and error ?
2- for androidriority does matter which number I choose ?
3- some vendors have this overlay (framework-res__auto_generated_rro.apk) under "vendor/overlay". Does is affect the device overlay in system/overlay ?
4- to install the overlay is it just as @minadzuki says ?
and thanks again for your great work
king1990 said:
@phhusson Thanks now it working fine and building without faults
I have few questions regarding the AndroidManifest.xml :
1- for android:requiredSystemPropertyValue how do I know which name to use ? is it trial and error ?
2- for androidriority does matter which number I choose ?
3- some vendors have this overlay (framework-res__auto_generated_rro.apk) under "vendor/overlay". Does is affect the device overlay in system/overlay ?
4- to install the overlay is it just as @minadzuki says ?
and thanks again for your great work
Click to expand...
Click to collapse
1. For example, Xiaomi Mi 6X has this fingerprint:
xiaomi/wayne/wayne:8.1.0/OPM1.171019.011/8.7.12:user/release-keys/
So you can take xiaomi/wayne to use, and android:requiredSystemPropertyValue will be: +xiaomi/wayne*
2. it will affect to build images, or affect the detection on System. If you got this:
Code:
F: .xxx/AndroidManifest.xml: priority xx conflicts with another manifest
You just take next number and try again, until now priority 53 has been taken (without pull request), you can take priority since 54.
3. Sorry, I don't know for this.
4. Yes, just simply copy and permission change.
king1990 said:
@phhusson Thanks now it working fine and building without faults
Click to expand...
Click to collapse
Cool
3- some vendors have this overlay (framework-res__auto_generated_rro.apk) under "vendor/overlay". Does is affect the device overlay in system/overlay ?
Click to expand...
Click to collapse
overlays in /system/overlay and /vendor/overlay are the same thing, and on my GSI both are loaded, so yes it affects it.
But if your vendor has a framework-res__auto_generated_rro.apk, you probably don't need an overlay file for your phone, because it's already there.
(Please note that /system/overlay doesn't exist in AOSP, that's a change specific to my ROM, and custom ROMs based on it. AOSP only has /vendor/overlay)
@minadzuki Thanks for answering my questions. @phhusson its clear now , I don't know if this is related to your treble approach or not but some GSI ROMs refuse to go the minimum value in the brightness curve no mater what value I set in the curve, it never achieved.
is this treble or ROM related ?
king1990 said:
@minadzuki Thanks for answering my questions. @phhusson its clear now , I don't know if this is related to your treble approach or not but some GSI ROMs refuse to go the minimum value in the brightness curve no mater what value I set in the curve, it never achieved.
is this treble or ROM related ?
Click to expand...
Click to collapse
Brightness is a bit complex on Android Pie... (well it already was before, but it got even worse)
Do you have a link to your current overlay, so I can take a look at which code path you'd go to?
What's the lowest backlight value you get in /sys/class/backlight/panel0-backlight/brightness or /sys/class/leds/lcd-backlight/brightness?
Also what's your device? Does it have extended brightness range? (what's the value of getprop persist.sys.qcom-brightness // is it a samsung device?)
phhusson said:
Brightness is a bit complex on Android Pie... (well it already was before, but it got even worse)
Do you have a link to your current overlay, so I can take a look at which code path you'd go to?
What's the lowest backlight value you get in /sys/class/backlight/panel0-backlight/brightness or /sys/class/leds/lcd-backlight/brightness?
Also what's your device? Does it have extended brightness range? (what's the value of getprop persist.sys.qcom-brightness // is it a samsung device?)
Click to expand...
Click to collapse
for overlay this the extracted files from the overlay apk (my device is Axon7)
The lowest backlight is 10 (once manually edit it to 1 it goes to really dim brightness)
what I don't understand that I already built two GSI ROMs one is DU13 & other Liquid pie both report the same backlight light value at 10 at minimum value but in DU its very dim and in liquid its still bright ?!
The command did not give back any information so I assume we don't extended brightness range.
Thanks
Edit : it was overlay problem , fixed after modifying it
I tried to create an overlay for my Honor View 10 (Berkeley)
Is there a list of recommended settings to copy over from the stock ROM? I started with copying everything listed in tests/knownKeys and it seems to work
There's a power_profile.xml in the framework-res.apk I dumped from my stock ROM but the battery capacity is set to 1000 instead of 3750. Is that right?
There's also a power_profile_test.xml in there with a much more sane value of 3000 mAh. Should I use this one instead?
Copperhead100 said:
I tried to create an overlay for my Honor View 10 (Berkeley)
Is there a list of recommended settings to copy over from the stock ROM? I started with copying everything listed in tests/knownKeys and it seems to work
There's a power_profile.xml in the framework-res.apk I dumped from my stock ROM but the battery capacity is set to 1000 instead of 3750. Is that right?
There's also a power_profile_test.xml in there with a much more sane value of 3000 mAh. Should I use this one instead?
Click to expand...
Click to collapse
I don't have any Huawei phones, sorry.
Maybe you can referrer /Huawei/kirin970/CLT or /Huawei/kirin970/EML, Honor V10 maybe have its OEM name and called "BKL"
Copperhead100 said:
I tried to create an overlay for my Honor View 10 (Berkeley)
Is there a list of recommended settings to copy over from the stock ROM? I started with copying everything listed in tests/knownKeys and it seems to work
There's a power_profile.xml in the framework-res.apk I dumped from my stock ROM but the battery capacity is set to 1000 instead of 3750. Is that right?
There's also a power_profile_test.xml in there with a much more sane value of 3000 mAh. Should I use this one instead?
Click to expand...
Click to collapse
On Huawei, you'll find real power_profile.xml somewhere in /odm or /product. I'd say /product/etc/power_profile.xml
phhusson said:
On Huawei, you'll find real power_profile.xml somewhere in /odm or /product. I'd say /product/etc/power_profile.xml
Click to expand...
Click to collapse
Thanks. It's actually /product/etc/xml/power_profile.xml
There's a new pull request incoming
is it possible to create an overlay in Widows usingGIT for Windows?
JEANRIVERA said:
is it possible to create an overlay in Widows usingGIT for Windows?
Click to expand...
Click to collapse
Yes, you can write source code everywhere (don't forget to replace CRLF to LF), but maybe you should build it on Linux, or you have a way to build it on Windows (e.g.: WSL, Mingw, etc.)
@minadzuki I can't find a config.xml in my framework-res.apk, am I missing something? or that gets created somehow in the process?
another question
on step 5 you say to edit AndroidManifext.xml, does that means delete everything in it and copy paste what you put on the code box? or just add that at the end of the xml file?
JEANRIVERA said:
@minadzuki I can't find a config.xml in my framework-res.apk, am I missing something? or that gets created somehow in the process?
another question
on step 5 you say to edit AndroidManifext.xml, does that means delete everything in it and copy paste what you put on the code box? or just add that at the end of the xml file?
Click to expand...
Click to collapse
framework-res.apk doesn't contain config.xml, it split into several files: arrays.xml, bools.xml, fraction.xml, integers.xml. just create config.xml or copy from other devices and find values on these files (to replace it).
and step 5, just replace values which for your device, like what other devices wrote.
minadzuki said:
framework-res.apk doesn't contain config.xml, it split into several files: arrays.xml, bools.xml, fraction.xml, integers.xml. just create config.xml or copy from other devices and find values on these files (to replace it).
and step 5, just replace values which for your device, like what other devices wrote.
Click to expand...
Click to collapse
thanks for the response but I am really lost here those 4 xml has way to much data in it, should I just copy everything to config.xml?
to be honest what I am trying to fix are 2 things the battery stats not showing and the auto brightness and brightness slider and if the led light is fixable by an overlay that too, I can provide you all the files needed could you build it for me please? my device is an HTC U12+
JEANRIVERA said:
thanks for the response but I am really lost here those 4 xml has way to much data in it, should I just copy everything to config.xml?
to be honest what I am trying to fix are 2 things the battery stats not showing and the auto brightness and brightness slider and if the led light is fixable by an overlay that too, I can provide you all the files needed could you build it for me please? my device is an HTC U12+
Click to expand...
Click to collapse
you can check like this:
https://github.com/phhusson/vendor_hardware_overlay/blob/master/Xiaomi/Mi8/res/values/config.xml
then take values from those 4 xmls.