Sei sulla pagina 1di 34

1.5.

2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

xda-developers Android Development and Hacking Android Software Development [GUIDE]


[ICS/JB/common] Definitive FAQ for newest miui porting by Lens_flare

Post Reply
1

Subscribe to Thread

11

51

FORUMS

Email Thread

101

Android Software Development

Last

Android General

SearchThread

Android Q&A, Help & Troubleshooting

[GUIDE][ICS/JB/common] Definitive FAQ


for newest miui porting

Android Software and Hacking General


[Developers Only]

Discussion Q&A

Lens_flare
OP

Miscellaneous Android Development

Thanks: 2,467

Account currently disabled

17th July 2012, 06:16 AM | #1

[More]

I know there is a Proxuser's guide - "How to Port MIUI v4 for

your device" and GREAT thread intended to eliminate porting

MOST THANKED

ALL-TIME

quirks.

104

which could be helpful for new users porting newest releases

Lens_flare OP

FAQ assumes questionaire, but my format will be more look

96

My goal is to collect all the experience we got in that thread,


of miui.

like a guide but as collection, it could be treated as FAQ.


Structure will be Stage-divided to ease of use.

Stage 1. Initial port

Let's start with first moment -

MENU

bases choice.

is great and

and also miui release you choose.

which is Qualcomm S2

Let's assume - just "Base" will mean rom for your device with
ICS/JellyBean, such as Cyanogen Mod or AOKP or AOSP and

their variations(I don't know if it is possible to use stock rom

tuto above didn't

for porting and wouldn't recommend it), when "MIUI base"

means any miui rom you prefer (my preference and advice -

MIUIandroid crespo [nexus S] or MIUIandroid maguro (Galaxy


Nexus) release). You could use any miui base but results will
be unpredictable and may very vary from guide stands, for

those cases I prepared common debugging stage, which will


MIUI for nexus S and Galaxy Nexus are now upgraded to Jelly

2012-Nov-04 6:43

(quote) what are you porting? MIUI V5 4.1 or 4.2


or MIUI V4?

Notorious

2012-Jul-17 1:17

New things on this release: etc/telocation.idf

Lens_flare OP

2012-Jul-17 1:16

Stage 3 Third part mostly touches cases where

Lens_flare OP

2012-Jul-17 4:42

Stage 2 Recently I had an Acer Liquid MT,

Register Login

Under base I will mean rom which could be used to port miui

help to eliminate bugs I haven't listed.

Stage 4 Last part. We recently ported miui, all

Lens_flare OP

63

RECENT

2013-Jul-20 20:40

XDA PORTAL POSTS

Do You Agree with the Verges Best Keyboard


Choices?
The Verge did some testing of all the major
Android keyboards and came to the more

http://forum.xdadevelopers.com/showthread.php?t=1777999

1/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Bean. That actually means - you couldn't use their miui bases
to port ICS roms(which still under support).

For those who stuck at ICS the situation is as follows:

If version number is not crucial, you might just stick at MIUI

2.8.10 http://weedy.ca/miuiandroid/ and use old kind Nexus


S/Galaxy Nexus roms. In guide I will describe steps right for
you with mark "ICS-only".

By Emil Kako

If for you version number is crucial - stop reading this guide

Samsung Galaxy Tab A Hits


USA, but Is It Cheap
Enough?

and just use PatchROM (though rom will be based on Stock


rom).

There is third variant, but it needs a device with nearly same

Samsungs tablet repertoire

specs:

keeps growing, this time

you might just replace some files in miui-supported device

rom with files from your stock rom. For now that case is only
tested on xperia 2011 products (play,live with walkman,ray,

abandoning the S for more


By Mario Toms Serrafero

mini, pro, mini pro etc) - arc s [lt18i] miui base and xperia 2012

Googles latest foray into


making Android run every

When base choosen, start to port:

facet of our daily lives is their

Copy unpacked base rom (so set of folders) to any folder you

system - folder on which we will work more often

30 Apr 2015

Android Auto: A Better


Choice

(u,p, sola etc) - S miui base.

prefer (let's name it "MIUI"), it usually contains:

30 Apr 2015

push into the more


By Mike McCrary

30 Apr 2015

boot scripts, config files etc.

LG G4s Evolution:
Abandoning Trends, or
Starting Them?

META-INF - contains certificates and signature for

The LG G4 has met a lot of

data - may contain something necessary such as first

signcheck, updater-script(we also will work on it)


update-binary (updater-script command processor)
boot.img, kernel and ramdisk packed together, touch

positive feedback since its


unveiling at this more
By Mario Toms Serrafero

30 Apr 2015

only if kernel should be changed to something more


recent or if your preference is not similar with base rom
maker's, but keep in mind that you have to place
modules that provided with kernel to lib/modules [or in
place where .ko files are]

Starting with system:


delete:

app
framework
media
fonts

then open miui archive and extract those folders to system.

Don't close archive.


Open lib folder in system to add from the same
archive:
http://forum.xdadevelopers.com/showthread.php?t=1777999

2/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

content-types.properties [for themes]


liblbesec.so [for LBE Guard - MIUI superuser]
liblocSDK_2.2.so [for baidu location service, prevents
network location provider FC]
JellyBean-only:
libjni_resource_drm.so [themes DRM, actually involves
download online themes screen]

Open etc folder in system to add from the same


archive:
yellowpage.db [Phone calls ability]
ICS-only
telocation.td (as for nexus S and telocation.db in others)
[location provider dependency]
JellyBean-only:
telocation.idf (possible new telocation.db)

go to permissions folder in etc to add:


com.nxp.mifare.xml [NFC]
miui-framework.xml [activates miui framework, near all
apps won't work without that]
com.google.android.media.effects.xml [gallery]
com.google.widevine.software.drm.xml [something also
related to google may affect play market]
com.google.android.maps.xml [gmaps]

Open xbin folder in system to add from the


same archive:
su [replace, don't even use base one!]
invoke-as [binary with near busybox and toolbox
functionality, need everywhere in system, mostly in
themes and SU]

that's all about additional files. Devices which don't have

NFC(Near Field Communication chip) also shouldn't have


Nfc.apk in app folder!

Let's modify build.prop then, to add:


Code:

http://forum.xdadevelopers.com/showthread.php?t=1777999

3/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

ro.build.id=MIUI
ro.build.display.id=MIUI
ro.build.version.incremental=2.x.x
ro.config.ringtone=MI.ogg
ro.config.notification_sound=FadeIn.ogg
ro.config.alarm_alert=GoodMorning.ogg

ro.build.version.incremental points to MIUI you port, so


specify it.

At your base you will most likely see these lines


Code:

ro.config.ringtone=
ro.config.notification_sound=
ro.config.alarm_alert=
ro.config.sms_received_sound=
ro.config.sms_delivered_sound=
are filled with ringtones that only base have, soo just change
them as MIUI do have different ringtone set.
Initial port done, in system part,

let's talk about

Updater-script:

any release of miui you port should have that line:


Code:

set_perm(0,0,06755,"/system/xbin/invokeas");

for example you have that bunch of code [which is mostly


common for CM9 release]:
Code:

http://forum.xdadevelopers.com/showthread.php?t=1777999

4/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

set_perm_recursive(0,0,0755,0644,"/system");
set_perm_recursive(0,2000,0755,0755,"/system/bin");
set_perm(0,3003,06755,"/system/bin/ip");
set_perm(0,3003,02750,"/system/bin/netcfg");
set_perm(0,3004,02755,"/system/bin/ping");
set_perm(0,2000,06750,"/system/bin/runas");
set_perm_recursive(1002,1002,0755,0440,"/system/etc/bluetooth");
set_perm(0,0,0755,"/system/etc/bluetooth");
set_perm(1000,1000,0640,"/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002,3002,0444,"/system/etc/bluetooth/blacklist.conf");
set_perm(1002,1002,0440,"/system/etc/dbus.conf");
set_perm(1014,2000,0550,"/system/etc/dhcpcd/dhcpcdrunhooks");
set_perm(0,2000,0550,"/system/etc/init.goldfish.sh");
set_perm_recursive(0,0,0755,0555,"/system/etc/ppp");
set_perm_recursive(0,2000,0755,0644,"/system/vendor");
set_perm_recursive(0,2000,0755,0755,"/system/xbin");
set_perm(0,0,06755,"/system/xbin/librank");
set_perm(0,0,06755,"/system/xbin/procmem");
So line I pointed should be somewhere there, for example:
Code:

set_perm(0,0,06755,"/system/xbin/librank");
set_perm(0,0,06755,"/system/xbin/procmem");
set_perm(0,0,06755,"/system/xbin/procrank");
set_perm(0,0,06755,"/system/xbin/su");

set_perm(0,0,06755,"/system/xbin/invokeas");

IF you have problems with SU, that line may


help:
Code:

symlink("/system/xbin/su","/system/bin/su");

paste it somewhere after


Code:

symlink("busybox"[laterbigcodebunchlike"/system/xbin/["etc]

but before
Code:

unmount("/system");

Your own MIUI is now ready to be flashed, but only, if your


device is SOOO near on hardware part with MIUI base

For those who didn't met that rule I prepared next parts http://forum.xdadevelopers.com/showthread.php?t=1777999

5/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

framework mods and common debugging and


troubleshooting. See next 2 posts.

Last edited by Lens_flare; 4th November 2012 at 11:44 AM. Reason:


jellybean

The Following 143 Users Say Thank You to Lens_flare For This Useful Post:

[ View ]

Lens_flare
OP

Thanks: 2,467

Account currently disabled

17th July 2012, 06:16 AM | #2

Stage 2

Recently I had an Acer Liquid MT[now bricked], which is

Qualcomm S2 device(msm7x30) and my guide defines also

assume you have device with Qualcomm inside. But some of


guide moments[first stage is not exception] are common for
most devices with other chips.

I also used Cyanogen Mod 9 as base, so some of these defines


wouldn't be applicable to your porting using AOSP base.

That was on ICS, and I will count that in while describing for
those who don't care about miui version and porting
something before MIUI 2.8.10.

Now I have MIUI-supported Xperia Arc S. But its MIUI is based


on stock rom (such a shame). So as FXP provides us CM 10, I
started to port over it to bring latest and greatest of MIUI

jellybean on that device. So again Qualcomm, but with stock

ICS, which means lesser quirks on porting. I again will assume

you are on Qualcomm but I have to say that all defines of this
stage are nomore device-specific.
Returning to guide:

Stage 2. Framework mods to make


it boot

Rom not booting? - that is most likely a framework issue, that

is remained from Nexus S/Galaxy Nexus. But don't run to base


to grab all framework and paste it to base, else you will have
a base rom instead of miui
My suggestion is port.

For those who are new in apktool disassembling, I suggest to


http://forum.xdadevelopers.com/showthread.php?t=1777999

6/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

read something like that http://forum.xda-

developers.com/show....php?t=1511730 or that

http://forum.xda-developers.com/show....php?t=1752201 or
google it to understand common principles of work.

For framework-res.apk mods we will use Connor-apktool and


scripts for ease of use: http://code.google.com/p/android-

apktool/downloads/list (choose only dependencies for your


platform, don't replace AAPT from them). Always choose
latest one!

Let's assume again:


disassemble something - usually means issuing
Code:
apktoold[fullnameofapkorjar]

command on file I specify if more info not specified


assemble something - usually means issuing
Code:

apktoolb[disassembledapkorjarfolderwithout.apkinnameorwith".out"attheend

command on file I specify


better way to assemble is drag assembled classes.dex(or
resources.arsc and xmls at rest folders in case of
assembling framework-res.apk) from [file you
modified]/build/apk to original file, opened as archive (in
windows you also have to check out a compression rate
to make it the same as there were before dragging,
which prompts to you as compression method like
"Normal" and "Store")
smali - piece of code on dalvik bytecode language, are
part of nearly any disassembled file
smali tree/just "tree"/"*.smali" - usually means set of files
with the same name in the beginning but with different
end(usually with $ before), for example
Code:

RIL*.smalimeans:
RIL.smali
RIL$1.smali

Let's start with framework mods:

All frameworks are located at system/framework.

framework.jar
http://forum.xdadevelopers.com/showthread.php?t=1777999

7/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Mostly issues are produced there.

Disassemble framework.jar from MIUI port you are working so

you will see framework.jar.out. Go to smali folder in it. Later all


actions we will produce from there (except assembling).

First replace some files from your base framework.jar (fist

disassemble base rom's framework.jar and move all files I will


specify, replace if asked).

Listing all smali I had to replace in framework.jar:


ICS-only:
Code:

android/os/Power.smali
org/codeaurora/Performance.smali
android/media/MediaRecorder*.smali
android/graphics/Paint.smali
android/os/Environment.smali
android/view/HardwareCanvas.smali
android/net/wifi/WifiNative.smali
Common:
Code:

android/view/Gles20*.smali(notonlycanvasbutallwithgles20atthebeginning)
android/hardware/Camera*.smali
android/server/BluetoothA2dpService*.smali
android/content/res/PackageRedirectionMap*.smali

JellyBean Only:
Code:

android/bluetooth/HeadsetBase*.smali
com/android/internal/app/ActivityTrigger.smali
android/webkit/HTML5*.smali
android/webkit/SelectActionModeCallback
I highlighted those could be common for all chips, not only for
Qualcomm ones.

But some of smalis are not following common rules.

The weirdest exception of that - WebviewCore. If you replace


only WebViewCore tree, Gmail, Facebook, Browser, HTML

viewer and all that is using this class WON'T WORK. What was
my solution is to replace Webview*.smali tree, so I met all
dependencies that class may work with.
ICS-only:

That class, and Sound Recorder are in need of one property

from SystemProperties.smali, which is located at android/os/.


But don't run to base to take it and replace immediately as
you read

It have to be patched

end of ICS-only

I highlighted it as ICS-only as you will just replace it on


http://forum.xdadevelopers.com/showthread.php?t=1777999

8/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

JellyBean - it's now hard to patch, but easy to replace.

>>Common Remark about patching smalis


Patching (usually named diffing, diff, that means "find

differences and eliminate them") in our context is a process of


comparing two files and adding contents of one of them to
another and not replacing anything. Our diff process will

consist of base->miui content addition so smali we modify

could live in dual life - for your base and for MIUI remained

framework. For start of diff you should have both base and
miui files you want to modify, and a diff tool (in windows -

beyond compare,total commander, winmerge or notepad++),


my preference - Meld diff viewer[really simple and visual-

oriented], the only thing - it's running on linux environment

and I don't know if there is a windows version. Then just open


files in tool and start adding. Sometimes you have to add all

entries are not present in miui one from base, sometimes you
should be smart enough to mod only part which needed and
nothing more and also sometimes to replace pieces of code
which are actually safe to do so. That's a whole process.

>>

Example - our SystemProperties.smali:

Actually after opening you see it is full of differences from


base:

http://minus.com/mbmfprmG4K/

you see those green blocks? Each of them signs a missing part
of code you should add, in Meld it's just about of clicking little
arrow that represents that block. As for windows tools, they
should have something like "add all" and many other things
could do it in a batch way.

A little piece of smartness:

that file is the only one I discovered which allow replacing


.line with big code pieces, see that:
http://minus.com/mdnAholnL/

do you see ".line 126" and HUGE code block against it? you

may forget about ".line 126" and copy block against it with no

doubt. Note that line numbers etc could change, always check
before doing something.

That line also became a dealbreaker on JellyBean, that's why

we decided it would be better to just replace it. Ecample will


give you a clue just about common patch process.

>>

Another file has to be modified in same way -

AssetManager.smali, which is located at android/content/res.

Beware of replacing anything on it[only add, as stand before],


if something went wrong, it might produce awful logcat

nobody could understand so you have to re-port rom again to


catch a causer.

http://forum.xdadevelopers.com/showthread.php?t=1777999

9/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Another interesting patch you should perform if you have


different than RIL telephony class.

To determine which ril class you have, seek for following line
in your build.prop:
Code:

ro.telephony.ril_class=

If you don't have such, mostly it means you are using RIL class
and don't need a patch.
in my case it was:
Code:

ro.telephony.ril_class=LGEQualcommRIL

so I'll describe a process for it, pointing what is common.

All ril classes located at com/android/internal/telephony, so


go to it.

LGEqualcommRIL have a single smali, so copy only that one[if


your class also have another smali with the same name, for

example LGEStarRIL$1.smali, copy them too], Also, unlike most


classes in CM, LGEQualcommRIL have a dependency -

QualcommSharedRIL, which tree you should also move to that


folder near LGE one.

Classes that are also have that dependency:


LGEQualcommUiccRIL
HTCQualcommRIL
SamsungQualcommUiccRIL

Others are dervied from RIL and don't have any dependencies
like that. As CM involves more and more devices, to

determine what dependencies you actually need, ask source


code:

Code:

publicclassLGEQualcommRILextendsQualcommSharedRILimplementsCommandsInterface

extends means your dependency you have to also add to


MIUI, if it is "RIL", go ahead and continue porting.

To make your class work instead of RIL, you should modify


MIUI' PhoneFactory.smali located at the same folder in
following way:
Code:

.line136
newinstancev8,Lcom/android/internal/telephony/RIL;

invokedirect{v8,p0,v4,v0},Lcom/android/internal/telephony/RIL;><init>(Landroid/con
http://forum.xdadevelopers.com/showthread.php?t=1777999

10/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

->
Code:

.line136
newinstancev8,Lcom/android/internal/telephony/
invokedirect{v8,p0,v4,v0},Lcom/android/internal/telephony/
it changes a constructor of RIL class to LGEQualcommRIL class.
If my lines incorrect, just type RIL in search in Phonefactory, it
will show you exactly 2 defines with "RIL" involved.
Another case for patching is

android/media/AudioFormat.smali.

Copy all missing lines from base to miui, it would be enough. I

have decide to not replacing it coz of constructor that is differ


and might one day turn into bomb.

The most complicated smali case, WebSettingsClassic. It do

contains lines that should be added, also lines that should be


slightly modified.

Let's try to make the process bit easier with these steps:
first of all, find those fields:
Code:

.fieldprivatemMediaPreloadEnabled
.fieldprivatemWebGLEnabled:Z
they are at the beginning of file, marked as green blocks.

Attention: then there is a listing that asks you about default


value, like that:
Code:

.line91
iputbooleanv2,p0,Landroid/webkit/WebSettingsClassic;>mMediaPreloadEnabled:Z
DON'T EVEN TOUCH THEM! Even if you know what are you

doing - it will fail on boot if you placed that lines in miui file.
interesting place here.. when you will search for webgl from
the beginning, you will hit such block, marked as blue
(incompatible):
Code:

goto/16:goto_1
.endmethod
.methodprivatenativenativeIsWebGLAvailable()Z

while miui file will show just that:


Code:
http://forum.xdadevelopers.com/showthread.php?t=1777999

11/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

goto:goto_1

and ".end method" after. "You f***n kiddng?" - will you ask..
yeah, pure cheat. Let's fix it up:
paste only:
Code:

.endmethod
.methodprivatenativenativeIsWebGLAvailable()Z
before ".end_method" but after "goto :goto_1", so that full
block will be instantly turned to whie:
Code:

goto:goto_1
.endmethod
.methodprivatenativenativeIsWebGLAvailable()Z

except "goto", which will show as differ, but who cares?

After searching "webgl" on base file you will possibly see a


code block starting with:
Code:

.methodpublicdeclaredsynchronizedisWebGLAvailable()Z

add it without any thought. You should do the same with


following methods:
Code:

.methodpublicdeclaredsynchronizedsetMediaPreloadEnabled(Z)V
.methodpublicdeclaredsynchronizedsetWebGLEnabled(Z)V
btw, those methods are so-called "setters" - methods in class
that intended to adjust value to class field.

DON'T ADD ANYTHING ELSE, IT WILL POSSIBLY BREAK


BOOTING AGAIN! You've been warned.
Framework.jar port done!

the only thing to do - assemble it.

services.jar

Unlike framework.jar, there are lesser things to do. But they


are also significant for porting process.
ICS-only:

InputManager*.smali - the only thing should be replaced [and


located in com/android/server/wm/].

http://forum.xdadevelopers.com/showthread.php?t=1777999

12/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

On JellyBean it is located at com/android/server/Input ands


also have to be replaced.

You may also replace usb folder, but actually those who have
MTP(devices with kernel 3.0 or so, that are having new "USB

gadget framework" drivers, consult with development branch


for details) are in no need to do so, as for others (as of mine

instance on MT development) you have to replace it. In stage

4 I will present my ways to make usb subsystem work on miui.


Also, there is a new smali on Jellybean: watchdog*.smali. Just
replace whole tree of this in com/android/server/.

As for diff files, there is one: PowerManagerService.smali(may


I shorten its name to PMS?)

there is no matter to diff it like others as it have too much

dependencies to resolve and may cause your system crash.


ICS-only:

So, it only asks about nativeStartSurfaceFlingerOffAnimation


method. but hey, PMS do have such method, but its name is
nativeStartSurfaceFlingerAnimation, so without "Off"; my
solution is to add "Off" to it, see that stack:
http://minus.com/lY4DiQfJ451Aq

that's where you should find you first entry (there are 2)
second entry showed there:

http://minus.com/lchMVcHtKe46T

after editing , you should see a huge block to add:


http://minus.com/lbmNygeJBs9klv
add it, and that smali is ported.
end of ICS-only

On jellybean porting it more trivial:

nativeCPUBoost is missing. You will have some defines in base


file. Use search by keyword "cpuboost" in base file to

determine where they are and just add them to miui one.
defines will be:
Code:

.methodprivatestaticnativenativeCpuBoost(I)V

-method definition.
Code:

.methodpubliccpuBoost(I)V

-method code block.


and nothing extra.

Assemble new services.jar.out to services.jar when complete.


Done those but still not boots or boots but functions

improperly? see next Stages- 3 and 4, I will enlighten all

moments of debugging what's wrong and also additional


http://forum.xdadevelopers.com/showthread.php?t=1777999

13/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

tweaks for specific devices that faced problems with porting


[It's just impossible to do that for each device, so there is a

great thread you could always ask what's wrong if my advices


didn't help].

Last edited by Lens_flare; 4th November 2012 at 10:15 AM. Reason:


jellybean

The Following 96 Users Say Thank You to Lens_flare For This Useful Post:

Lens_flare
OP

Thanks: 2,467

Account currently disabled

17th July 2012, 06:17 AM | #3

[ View ]

Stage 3

Third part mostly touches cases where tuto above didn't


resolved boot problems, also cases where there is no

confidence 2nd stage will work/cases when people are trying


to investigate themselves but mostly not xperienced in

such(the most respectable case). To understand what's going


on with your build it would be better to be CM/AOSP/AOKP

dev, so you will most likely know where to find an answer. But
if it is not about you, let me point on some moments could
help.

Stage 3. Understanding logs and


debugging

Yes, exactly understanding. Most likely people are going to


forum and just posting logcat (that might contain common
error). My goal is show you - logcat is not shuch thing you
should fear to investigate!
First of all,

let's assume something:

adb - powerful tool, in our case the must have thing to


make a log. Article on android devs most likely describes
all the moments about adb power:
http://developer.android.com/tools/help/adb.html
logcat/log - one of the android advantages that allows
you to debug what's going on with your system. by
"make log" I will assume issuing
Code:
adblogcat>log.txt

command, last argument - log.txt is a text file with log


http://forum.xdadevelopers.com/showthread.php?t=1777999

14/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

system provided to you (you could use any name).


sometimes we need an answer about things that are
going on with baseband (so-called radio). In those cases
I usually asking to take radiolog. That's how it could be
produced:
Code:
adblogcatbradio>log.txt

reading it might be a pain, as terms of it are too much


hardware-specific, but it anyway complies with
principles I will put below.
debug/debugging - process of analyzing code which
helps to eliminate bugs (that's why de-bug)

Some people experiencing problems

with log, most

common are:

-wrong MIUI base which prevents usb subsytem to start


(nexus S base most likely allows you to use log)
-no/corrupted/wrong usb drivers on PC
-Windows

most likely is about new usb subsystems etc,

so advice is the only one - try on ubuntu (not working without


udev rules)

-somewhat corrupted/inconsistent usb port

-lack of "persist.sys.usb.config= mass_storage,adb" in


build.prop, specifically "adb" in this line.
Note: if your log only consists of:
Code:

linksystem/bin/shfailed:nosuchfileordirectory

or something like that, you should contact a CM dev, else, you


are most likely know what happened ;]

Alright when we got a log, it consist of many many lines that


are looping if your system not boots. That's why that kind of

situation is sometimes called bootloop. System may repeat a


error eternal time it lives, so log might be huge.

To parse what's going on there are some


advice:
keywords:

search in log you got some keywords, that might be useful on


debugging boot issue;

most common keywords are:


"E/" - error
"E/dalvikvm" - possibly crucial system error
http://forum.xdadevelopers.com/showthread.php?t=1777999

15/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

"No such file or directory" - says it all


"couldn't" - android likes that, mostly shows faulty
things.
"fail"/"failed" - mostly crucial error
"W/"/"warning" - says it all, but not always warn could be
a boot failure cause
"exception"(especially NullPointerException) - points you
that something went wrong in framework or application
work

I/ tags could be also useful at debugging, but most helpful are


errors and warnings.

Most common constructs:


"couldn't find native method", the most common reason
of a bootloop.
For instance:
Code:

E/dalvikvm(100):ERROR:couldn'tfindnativemethod
E/dalvikvm(100):Requested:Landroid/view/GLES20Canvas;.nStartTileRendering:(IIIII)V
E/JNIHelp(100):RegisterNativesfailedfor'android/view/GLES20Canvas',aborting
Let's parse that construct to extract parts we will fix.

First of all. smali path might be extracted from that line:


Code:

E/JNIHelp(100):RegisterNativesfailedfor'android/view/GLES20Canvas',aborting

->
Code:

android/view/GLES20Canvas

that's it, smali we are looking for is GLES20Canvas.smali. But..


android/view.. where it is? Answer comes from android

source, it took some time to analyze frameworks.. Just let's


assume: all that starting with "android" in path belongs to
framework,jar.

What if path doesn't contain "android" at the beginning?

Again the answer is in source. Paths like"org/" are belong to


framework.jar.

"com/android/server" - services.jar (there is the same folder at


framework.jar but most likely you don't need to touch it).
another place we could be mixed up:

"com/android/internal" - framework.jar

"com/android/internal/policy/impl/" - android.policy.jar

for framework.jar path ends up on internal, which represents


telephony folder. policy/impl is the only android.policy.jar
http://forum.xdadevelopers.com/showthread.php?t=1777999

16/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

folder.

Other frameworks are actually not used in port as they


contain core android functionality which is common.
Note about smali you found:

it might be not smali you are looking for, most likely


when code points you to android functionality and
widgets (control elements) like combobox or listview,
it's a sign to think twice what have you done on your
system to port it
it might be tree of smali(remember 2nd stage assumes?),
to ease of use, always replace smali with its tree, and
only if error becomes worse, think about single smali or
about diff(2nd stage assumes again

from
Code:

E/dalvikvm(100):Requested:Landroid/view/GLES20Canvas;.nStartTileRendering:(IIIII)V

we could extract a method which is missing -

nStartTileRendering. In some cases only that method should


be added and nothing more.

" android.content.res.Resources$NotFoundException:
Resource ID #XXX"
Example:
Code:

E/AndroidRuntime(3047):***FATALEXCEPTIONINSYSTEMPROCESS:WindowManagerPolicy

E/AndroidRuntime(3047):android.content.res.Resources$NotFoundException:ResourceID#0x3060
E/AndroidRuntime(3047):atandroid.content.res.Resources.getValue(Resources.java:1022)

E/AndroidRuntime(3047):atandroid.content.res.MiuiResources.getValue(MiuiResources.java:56

E/AndroidRuntime(3047):atmiui.util.ResourceMapper.resolveReference(ResourceMapper.java:9)

E/AndroidRuntime(3047):atmiui.util.HapticFeedbackUtil.updateSettings(HapticFeedbackUtil.j

E/AndroidRuntime(3047):atmiui.util.HapticFeedbackUtil$SettingsObserver.observe(HapticFeed
E/AndroidRuntime(3047):atmiui.util.HapticFeedbackUtil.<init>(HapticFeedbackUtil.java:75)
Wrong MIUI base, mostly. Appear when something changed
by previous porter (miui) which affects resources you won't
have, banal link error.

" Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)"

Hope all of you heared about C language. That error is a form


of C "exceptional case"(in other words - exception).
You will see if it happen:
Code:

http://forum.xdadevelopers.com/showthread.php?t=1777999

17/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

F/libc(2698):Fatalsignal11(SIGSEGV)at0xdeadbaad(code=1)
I/DEBUG(130):************************************************
I/DEBUG(130):Buildfingerprint:'tmous/htc_doubleshot/doubleshot:4.0.3/IML
74K/275847.101:user/releasekeys'
I/DEBUG(130):pid:2698,tid:2698>>>zygote<<<
I/DEBUG(130):signal11(SIGSEGV),code1(SEGV_MAPERR),faultaddrdeadbaa
d
I/DEBUG(130):r0deadbaadr100000001r2a0000000r300000000
I/DEBUG(130):r400000000r500000027r64086fbfdr700000036
I/DEBUG(130):r840253f04r940233a7e100000904cfp00009062
I/DEBUG(130):ip4028b240spbefcfa60lr401043c1pc40100adccpsr600
00030
yaa.. ENORMOUS code block, build fingerprint, fatal signal and
stack trace.. welcome to hell

One little thing: error is right above that block, don't even try
to parse its contents, ignore it.

WE ALL DIE!!!111

yaa, series of "died" errors:


Code:

I/ServiceManager(1478):service'media.audio_flinger'died
I/ServiceManager(1478):service'media.player'died
I/ServiceManager(1478):service'media.camera'died
I/ServiceManager(1478):service'media.audio_policy'died
IGNORE them, it's a result of exception right above(no matter
C exception or java one), it's better to see it instead of
posting "WE ALL DIE!!!111"

"Unable to extract+optimize DEX from


'/system/framework/framework.jar'" and other WTF
cases

examples:
Code:

D/dalvikvm(103):DexOpt:BEGIN'framework.jar'(bootstrap=1)
E/dalvikvm(172):Duplicateclassdefinition:'Landroid/media/MediaRecorder;'
E/dalvikvm(172):Troublewithitem2900@offset0x17a86c
E/dalvikvm(172):Crossitemverifyofsectiontype0006failed
E/dalvikvm(172):ERROR:Byteswap+verifyfailed
E/dalvikvm(172):Optimizationfailed
W/dalvikvm(103):DexOpt:END'framework.jar'status=0xff00,processfailed
E/dalvikvm(103):Unabletoextract+optimizeDEXfrom'/system/framework/framework.jar'
Code:

053014:15:15.970:E/NetworkLocationRealOs(2304):noandroidID;can'taccessencryptedcach

053014:15:15.970:E/NetworkLocationRealOs(2304):java.io.IOException:noandroidID;can't

http://forum.xdadevelopers.com/showthread.php?t=1777999

18/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Code:

1012: 070303:28:21.350:E/System(1538):************Failurestartingcoreservice
070303:28:21.350:E/System(1538):java.lang.NullPointerException

070303:28:21.350:E/System(1538):atcom.android.server.pm.PackageManagerService.grantPermi

070303:28:21.350:E/System(1538):atcom.android.server.pm.PackageManagerService.updatePerm

070303:28:21.350:E/System(1538):atcom.android.server.pm.PackageManagerService.<init>(Pac

070303:28:21.350:E/System(1538):atcom.android.server.pm.PackageManagerService.main(Packa

070303:28:21.350:E/System(1538):atcom.android.server.ServerThread.run(SystemServer.java:
070303:28:21.350:I/SystemServer(1538):InputMethodService
070303:28:21.360:W/SystemServer(1538):***********************************************

1021: 070303:28:21.370:A/SystemServer(1538):BOOTFAILUREstartingInputManagerService
1022: 070303:28:21.370:A/SystemServer(1538):java.lang.NullPointerException

1023: 070303:28:21.370:A/SystemServer(1538):atandroid.app.PendingIntent.getBroadcast(P

1024: 070303:28:21.370:A/SystemServer(1538):atcom.android.server.InputMethodManagerSer

1025: 070303:28:21.370:A/SystemServer(1538):atcom.android.server.ServerThread.run(Syst
1026: 070303:28:21.400:E/AndroidRuntime(1538):ErrorreportingWTF
1027: 070303:28:21.400:E/AndroidRuntime(1538):java.lang.NullPointerException
mostly likely is about way assembling framework files. Also
some of them might be just corrupted by accident.

Sometimes these errors caused by wrong smali replacement

or wrong diff methodology. Or it might be just banal reason no place in system or cache partitions.

English [

Most log parts are in mere, not technician English,log might


be read as little book with bright characters. Find what you
are looking for and fix it..

Source code is your best friend in porting

I'd recommend to have an android source code [from internet


or on your local PC] to port something that outstands of rules
I listed. For example CM frameworks source could be found
here:

https://github.com/CyanogenMod/android_frameworks_base
.

That mostly affect cases in which hardware that is not

working/working but not perfect/working incorrect on MIUI


but worked like a charm on base.

Any log line represents a line of code in source, that one could
search and debug from there (as source is mostly common,
that miui ports possibility proove). Each smali represents a
java source code or its part(- subclass which signed by $),
each java is in frameworks folder on source (mostly

frameworks/base). Log line is a message, which formed with C


rules about these rules, so you have to avoid ciphers or guess
how could code represent that message. You may search

guessed line in source to locate java file, or locate it manually


http://forum.xdadevelopers.com/showthread.php?t=1777999

19/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

according to smali location and my advice and search in it.


Happy debugging

Last edited by Lens_flare; 4th November 2012 at 10:08 AM. Reason:


WE ALL DIE!

The Following 63 Users Say Thank You to Lens_flare For This Useful Post:

Lens_flare
OP

Thanks: 2,467

Account currently disabled

17th July 2012, 09:42 AM | #4

[ View ]

Stage 4

Last part. We recently ported miui, all is great and mostly


functions, But.. am I the only one or that one looks

incomplete? One could make its port complete by following


next stage:

Stage 4. Advanced tweaks and


specific hardware fixes
USB subsystem(mass

storage/tether/debugging sign)
First of all, little self - check:

you have to be on old USB Gadget framework kernel source.


Those you could clarify by talking with cm dev. Also I'm not
rejecting it could work for others but in slightly modified
sequence.

Starting from framework-res.apk.

You have to disassemble it first, but before you use actual


"apktool d", you should also issue:
Code:

apktoolifframeworkres.apk

that is necessary for decoding internal resources correctly.

Disassemble base and MIUI frameworks and leave base one as


we will work with MIUI one and will use base as a reference.
After disassembling, let's go to res/values in it:

As old usb gadget needs old mass storage path which was
applicable to gingerbread, we should add that path to
strings.xml.

If you only disassembled that file, you should see something


like that:

http://forum.xdadevelopers.com/showthread.php?t=1777999

20/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Code:

<stringname="launchBrowserDefault">LaunchBrowser?</string>
<stringname="SetupCallDefault">AcceptCall?</string>
</resources>
exact line to add at the near end:
Code:

<stringname="config_legacyUmsLunFile">/sys/devices/platform/usb_mass_storage/lun0/file</

so that you will get something like that:


Code:

<stringname="launchBrowserDefault">LaunchBrowser?</string>
<stringname="SetupCallDefault">AcceptCall?</string>

<stringname="config_legacyUmsLunFile">/sys/devices/platform/usb_mass_storage/lun0/file</
</resources>

Remark:

that case is the only applicable to devices which have old kind
SD card only. Look at the framework-res on your device, it
also might have different LUN file path(actually it is a file,

which collects all your SD data to be mounted as usb drive),

that you should always replace in mind my defines with yours


to make actual usb work.

Devices with flash memory(also called EMMC or embedded

SD on flash) and SD[or without SD support at all], should be

treat in custom way unfortunately I don't know, consult with

your device CM devs for more details. And hey, most of these
devices are on new usb gadget, so don't need my guide at all

<<

After addition, save strings.xml and go to res/xml in the same


framework-res.That's where you also should use base
framework-res.

copy from base to miui storage_list.xml and replace when


prompted. That file provides only your device-specific SD
support, not nexus S or whatever miui base you use.

Assemble miui framework-res.apk and, attention! disassemble


it again. That action allows you to see resource ID-s for each
line exactly in manner they will be used in living rom.

Remark:

Each resource-drawable, string, boolean switcher etc is

treated by its ID - personal identificator. Resources are used in


other frameworks and APK to identify something necessary
for them. framework-res.apk is a resource storage, which
handled by android.content.res package classes like
ResourceManager.

http://forum.xdadevelopers.com/showthread.php?t=1777999

21/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

USB subsystem also uses some resource to provide to user


actual USB status and right mass storage.

<<

Make sure you have both base and miui framework-res, then
open both: res/values/public.xml.

Now, we could start the main part - services.jar mod

After adding line "config_legacyUmsLunFile" there will be its

id in public.xml after compiling. That's why I stand you should

disassemble assembled framework-res again. Remember both


ID-s from base and from miui.

Also you need ID-s from both base and miui for following
resources:

"stat_sys_adb" - usb debugging icon


"adb_active_notification_title" - usb debugging short
message
"adb_active_notification_message" - usb debugging
long message
JellyBean-specific:
"config_oemUsbModeOverride" - usb mode override flag

Remark:

public.xml is a resource dictionary, example of line:


Code:

<publictype="drawable"name="stat_sys_adb"id="0x010804f8"/>

means as follows: public type="drawable", drawable - mere

picture for different resolution, drawn on the screen, public

type subsequently is a type of resource. name="stat_sys_adb"


- name of resource, that may be name of acual file or string or
bool define etc. id="0x010804f8" - hexadecimal resource
identifier. Important note: most resource users are treat

resource name without leading zero, for example, 0x010804f8


in usb smalis presented as 0x10804f8, that fact will be
necessary on finding and replacing resources(I'd call it

matching process), exactly what we are going to do with USB


folder smalis.

<<

Open USB folder in miui services.jar

(smali/com/android/server/usb), you will see smalis, as usual.

Replace its contents with those in base services.jar' usb folder.


Then we are going to match resources: each ID you found in
public.xml should be bound to resource call in smali. Let's
start:

we will work with miui usb folder smalis. Open

UsbService.smali, now remember what id was bound to


http://forum.xdadevelopers.com/showthread.php?t=1777999

22/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

config_legacyUmsLunFile in base public.xml, for example it


was 0x01040029, eliminate leading zero and search file

contents for resource 0x1040029, so you will find its entry.

Replace that entry with resource you got from public.xml in


miui, again, without leading zero. Search for the same ID in
LegacyUsbDeviceManager.smali and replace it to miui one.
If you got how that process work, remaining task is match
other resource id-s that listed above (usb debugging icon,
long and short message). They will be in following files
LegacyUsbDeviceManager$LegacyUsbHandler
UsbDeviceManager$UsbHandler

JellyBean-specific:

UsbDeviceManager.smali also contains necessary switch config_oemUsbModeOverride, also match ID-s with miui
framework and here you go.

USB debugging message is not so necessary as mass storage

[coz if resource of mass storage file not found, you won't get
usb subsystem to work].

After matching is done, assemble services.jar.


Done! USB subsystem now works.

Another moment could be necessary is to change USB tether


interface device to usb0 (as Nexus S is using rndis0 instead,
and base whatever you choosed may also have another
tether interface)

To change it, you again need a disassembled frameworkres.apk(don't forget "apktool if") In it navigate to
res/values/arrays.xml.
find the following:
Code:

<stringarrayname="config_tether_usb_regexs">

in nexus S full block will look like that:


Code:

<stringarrayname="config_tether_usb_regexs">
<item>rndis0</item>
</stringarray>
Look, I highlighted interface name for you! So the only part

you should do it is just replace it to yours. Example for usb0:


Code:

<stringarrayname="config_tether_usb_regexs">
<item>usb0</item>
</stringarray>
http://forum.xdadevelopers.com/showthread.php?t=1777999

23/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Interface name could be seen in the same file but in base rom.
By The Way, do you see
Code:

<stringarrayname="config_tether_wifi_regexs">
<item>wl0.1</item>
</stringarray>
right after usb one? That is the interface for wifi

tether,

that you also should change to yours (one your base needed)
and that is it! I saw somewhere following interface variant:
Code:

<stringarrayname="config_tether_wifi_regex[/B]">
<item>tiap//d</item>
</stringarray>
which is for Sony [Ericsson] devices with Texas Instruments
wifi chip, just see yours in base to check this out.

in the same file you may also fix Autobrightness


I mean those ones:

levels,

Code:

<integerarrayname="config_autoBrightnessLevels">
<integerarrayname="config_autoBrightnessLcdBacklightValues">
<integerarrayname="config_autoBrightnessButtonBacklightValues">
<integerarrayname="config_autoBrightnessKeyboardBacklightValues">
MIUI doesn't have autobrightness tweaks so that is the only
way those levels could be applied.

To fully close framework-res and don't come back no more,


let's see other things you could do with it:

Minimal brightness too low

There is a bug with brightness: when you regulating it to

minmal, screen comes black and won't come back until wipe.

Reason is banal - screen highlight couldn't handle so low value


(in nexus S it's 10), first of all find a line at
res/values/integers.xml:
Code:

<integername="config_screenBrightnessDim">10</integer>

in most cases value "20" will be reliable, so change "10" to "20":


Code:

<integername="config_screenBrightnessDim">20</integer>

http://forum.xdadevelopers.com/showthread.php?t=1777999

24/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Fix "Network won't automatically picks up"


The problem on some devices like HTC on 7x30 QC

architecture, is in one little switch [res/values/bools.xml] :


Code:

<boolname="skip_restoring_network_selection">

just change it to "false":


Code:

<boolname="skip_restoring_network_selection">

and network will come up.

Fix "Deep sleep issue on some devices"

Problem reported Wildfire S users resolved by that little


define [res/values/bools.xml] :
Code:

<boolname="config_bluetooth_adapter_quick_switch">

change it to "false":
Code:

<boolname="config_bluetooth_adapter_quick_switch">

and issue will be resolved.


Also, it might be interesting to check out all bools.xml defines
to see if something should be changed.

Fixing wrong hardware-software keyboard


relationship [auto-rotate and showing issues]
(also for galaxy tab 7)

Those with built-in hardware keyboard may experiencing

following issue: when hardware keyboard opened, you also

see a software keyboard and when you just need a software


keyboard, it won't show. Also auto-rotate won't work
properly when keyboard is activated.

Seems on Galaxy Tab 7 Samsung(or maybe Cyanogen Mod?)

handles software keyboard in relation of some kind of dummy


hardware keyboard, so it's our case too.
ICS-only:

To fix that issue, disassemble miui android.policy.jar and


navigate to

smali/com/android/internal/policy/impl/PhoneWindowManager.smali
there are three constants, according to the source: 0(0x0) - lid
http://forum.xdadevelopers.com/showthread.php?t=1777999

25/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

closed, 1(0x1) - lid open, and -1(-0x1) - lid absent.

they are located after a function "GetSwitchState".

Original idea was to swap these constants so that system gets


fooled about your keyboard state:
code that exists:
Code:

const/4v1,0x1

-> code that you will get after mod:


Code:

const/4v1,0x0

the same you should proceed with zero:


Code:

const/4v1,0x0

->
Code:

const/4v1,0x1

you might also have to change


Code:

const/4v1,0x1

->
Code:

const/4v1,0x1

to get rid of absent state.


another ways to fix this up:
res/values/bools.xml
change

Code:

<boolname="config_forceDisableHardwareKeyboard">

->
Code:

<boolname="config_forceDisableHardwareKeyboard">

http://forum.xdadevelopers.com/showthread.php?t=1777999

26/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

as we see, it force-disables hardware keyboard so that only


soft one will show up.

for devices with hardware keyboard that might also be a deal:


res/values/integers.xml

change the following two line:


Code:

<integername="config_lidOpenRotation">90</integer>
<integername="config_lidKeyboardAccessibility">1</integer>

Next questions will be related to

various APK fixes:

before we start you need to know that all apk are depend on
framework-res resources, so before you start disassembling
them, let's clarify steps: "apktool if" each framework with
resources you have in miui, in stock there are two:
Code:

apktoolifframeworkres.apk

Code:

apktoolifframeworkmiuires.apk

then each apk could be disassembled as usual.

Getting rid of MIUI start screen

Have you mentioned it? Ya, that annoying setup wizard.. In

the end it suggests you to input your XIAOMI account which


some users may never had and won't create. Keep them out
of stress - get rid of that wizard!
Let me show how:

there are 2 ways, one - fully infiltrate that wizard from user's
eye, second - will let you choose a language(useful in

multilanguage releases) and setup wifi, then go right to


homescreen.

Common moment: disassemble Provision.apk and go to smali


contents - com/android/provision and choose
DefaultActivity.smali

First method - codename "infiltration":

we will modify contents of "isProvisioned" method.

Kill all except "const/4 v1" and "return v1" in it, change const/4
v1 to 0x1 so you will get something like that:
Code:

http://forum.xdadevelopers.com/showthread.php?t=1777999

27/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

.methodprivatedeviceIsProvisioned()Z
.locals3
.prologue
const/4v1,0x1
returnv1
actually, we are just saying to setup wizard that device is

already passed its steps and don't need them anymore. So


that setup wizard won't even be showed.

Second method - codename "multilang":

it is based on exploit, which is as follows: one could bypass

xiaomi account prompt if before flashing miui he pull off sim


card and then on setupwizard won't set up wifi. Wizard will

send you to "sim not found" dialog, which then will allow one
to "dismiss" account request.

Line which asks about SIM state is as follows:


Code:

invokevirtual{v1},Landroid/telephony/TelephonyManager;>getSimState()I

then
Code:

moveresultv1
const/4v2,0x5
some variable now consists of returned value.

To initialte that value to fail a check, I've just changed

constant value to one that telephony manager will never


return: -0x5
Code:

const/4v2,0x5

Now its time to point fail to logical end of wizard, we are


going to change label..
Code:

ifnev1,v2,:cond_5

if not equals v1, v2 (if (v1!=v2) in manner ) go to label

cond_5. As we stated, v1 won't be equal v2,so it will go to


cond_5, which is not a place we wish to go (coz of

unbelieveable hardcode). But there is a wishable place cond_6:

Code:
http://forum.xdadevelopers.com/showthread.php?t=1777999

28/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

invokedirect{p0},Lcom/android/provision/DefaultActivity;>finishSetup()V

yyyyeah, right to finish

so we are changing cond_5 to cond_6:


Code:

ifnev1,v2,:cond_6

that's it! In the end you will get: language selection->wifi


setup->homescreen, almost briliant!

Whether you choosed first or second method - assemble apk


you got after all things done.

Fixing not working mic in calls

Disassemble Phone.apk and navigate to res/values/bools.xml


to change:
Code:

<boolname="send_mic_mute_to_AudioManager">

->
Code:

<boolname="send_mic_mute_to_AudioManager">

Fixing pin code prompt on xperia devices

Disassemble Phone.apk and navigate to res/values/bools.xml


to change:
Code:

<boolname="ignore_sim_network_locked_events">

->
Code:

<boolname="ignore_sim_network_locked_events">

Enabling hidden settings

Did you know that you may activate LEDs settings? Or maybe
use camera key to trigger some useful functions? If not,
follow the next little tuto.

Disassemble Settings.apk, navigate to bools.xml in res/values.

Activating LED settings

It would be enough to change


http://forum.xdadevelopers.com/showthread.php?t=1777999

29/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Code:

<boolname="has_led">false</bool>

->
Code:

<boolname="has_led">true</bool>

As you may got, other hidden settings are also there, I'll just

list them and assume all of them needs just replacement false
to true to make them activated

Multitouch gestures

Still didn't mentioned how they works, but, xiaomi wouldn't


make something just for its appearence in settings.
Code:

<boolname="has_multi_touch">false</bool>

MI button

Mi button on any device that has camera button!

What is MI button? It's a tweak that allows dedicated button


to do something instead of its mere function (for exampleissuing camera app as for cam button). You may adjust any
app in rom to be executed, any switch from miui switchers
and also trigger some actions like "menu", "call", "screen off

toggle"(allows you to switch screen on and off, so possibly

replace power button which is mostly weak) and "screenshot".


how to activate it? - the same:
Code:

<boolname="has_camera_key">false</bool>

change to "true"

Dock settings

mere dock station settings dialog.


Code:

<boolname="has_dock_settings">false</bool>

Trackball settings

for devices such as nexus one with active trackball.


Code:

<boolname="has_track_ball">false</bool>

"Black bar" fix


http://forum.xdadevelopers.com/showthread.php?t=1777999

30/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

more details - https://www.dropbox.com/s/6u63tozthm...709-49-09.png

Let's get MiuiSystemUI.apk and disassemble it.

Locate to res/values/drawables.xml and delete first line:


Code:

<itemtype="drawable"name="notification_header_bg">#ff000000</item>

it might vary but always contains black colour (#ff000000).


Recompile modified systemUI.

Least but hope not last define for that guide, hope it will fill
up with latest and greatest from MIUI devices users and
porters around the world.
Cheers, L_F.

Last edited by Lens_flare; 4th November 2012 at 11:08 AM. Reason:


JellyBean

The Following 104 Users Say Thank You to Lens_flare For This Useful Post:

resac

Senior Member

17th July 2012, 01:29 PM | #5

[ View ]

Thanks: 119

Finally Come up with great Tut.. Thanks Alot Brother

milad407
Guest

17th July 2012, 09:35 PM | #6

Thanks: 0

Very detailed and good written tutorial! Thanks and good job!

Duarte777

Thanks: 2,019

Recognized Contributor

17th July 2012, 11:47 PM | #7

Thanks

http://forum.xdadevelopers.com/showthread.php?t=1777999

31/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

The Following User Says Thank You to Duarte777 For This Useful Post:

Lens_flare
OP

Thanks: 2,467

Account currently disabled

18th July 2012, 03:10 AM | #8

[ View ]

AS my device bricked, you could always tell me what to


replace/add on my guide, so it will look up-to-date
ADD: added Stage 3.

Last edited by Lens_flare; 18th July 2012 at 08:03 AM.

The Following 3 Users Say Thank You to Lens_flare For This Useful Post:

Lens_flare
OP

Thanks: 2,467

Account currently disabled

19th July 2012, 08:38 AM | #9

[ View ]

Done. Have something to add? Write here, I'll form a new


guide branch for you. Found a mistake? Contact me.

BTW, if somebody have more time than I, It would be great


you could support that guide to keep it up-to-date.

Last edited by Lens_flare; 19th July 2012 at 08:41 AM.

The Following 3 Users Say Thank You to Lens_flare For This Useful Post:

raj_k_r

Senior Member

19th July 2012, 06:44 PM | #10

[ View ]

Thanks: 92

Thanks for the detailed guide. I just started porting for my

device. I have one question though. Once I successfully port

to one version, what are the files I need to consider for next
version? I think some files I can just use from the previous

port (like hardware related files). If you have any suggestions


on the files I have to look for while porting next version of

miui, it will be very helpful. Not sure whether I am asking the

right question. Looks like once I do this I can reuse all the files
for next port

Last edited by raj_k_r; 19th July 2012 at 07:16 PM.

http://forum.xdadevelopers.com/showthread.php?t=1777999

32/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

Post Reply
Page 1 of 282

Subscribe to Thread

11

51

101

Last

Previous Thread

Next Thread

Top Threads in Android Software Development


by ThreadRank
[GAPPS] The Gapps Central - Consolidated Gapps [Updated 3
Android Software Development

26th March 2015

[ARM/ARM64] Android 5.0 Lollipop bootanimation memory le


Android Software Development

16th February 2015

[UNIVERSAL] QuickBoot for CyanogenMod 12.0 / 12.1


Android Software Development

[WiFi] DHCP accelerator

14th April 2015

6th February 2015

Android Software Development

[MOD][4.2+/5.1][BeatsAudio]+[Dolby Digital]+[BraviaEngine3]
Android Software Development

13th February 2015

[APP][ROOT] Change lock Screen on CM12 V2.6! 19th March 2015


Android Software Development

[ROM] [KERNEL] [KitKat 4.4.2] BQ Aquaris 4.5 (MT6577) | Mala


Android Software Development

11th February 2015

[KITCHEN][WINDOWS] Android (Tyrancy) Kitchen for Window


Android Software Development

15th March 2015

xda-developers Android Development and Hacking Android Software Development [GUIDE]


[ICS/JB/common] Definitive FAQ for newest miui porting by Lens_flare

We're Social


XDA Developers was founded by developers, for developers. It is now a

valuable resource for people who want to make the most of their mobile
devices, from customizing the look and feel to adding new functionality.
Are you a developer?
http://forum.xdadevelopers.com/showthread.php?t=1777999

33/34

1.5.2015

[GUIDE][ICS/JB/common]DefinitiveFAQforne|AndroidDevelopmentandHacking|XDAForums

More info
Contact Rules Change Log Suggest Content Privacy Policy XDA App Root Any Device
Copyright xda-developers. Hosted by Leaseweb
-- XDA 2015

Sitemap

http://forum.xdadevelopers.com/showthread.php?t=1777999

34/34

Potrebbero piacerti anche