[Android General] malbert16442:
​

(Success Stories)

1. Kernel is second most important because it determines if rom boots or whether

we could access a log.

2. Since we are trying to boot a rom not meant to be on our device, it could be alittle hard getting this thing to run.

3 Contact a kernel dev and ask them for adb insecure kernel or a kernel with usb debugging enabled at boot. This will help us obtain those logs at boot.

4. In some rare cases Logs might show that specific kernel services are not accessible.

In this case we only change the init.environ.rc. Which has the frameworks needed to boot.

5. If you can't get kernel logging at boot use this in recovery after 2 mins of booting.

adb pull /data/tombstones

6.Update

Part 2

Adb is key in any port. Adb is the secret. It gives us the ability to access logs be able to debug issues in our ROM.

1. Download adb drivers

http://xdaforums.com/showthread.php?p=48915118#post48915118

Thanks Member [MENTION=4638083]Snoop05[/MENTION]

2. Test adb by using 'adb devices" in cmd

You should see online

3. If offline try using adb kill-server and repeat step 2.

4. When making a loging for these ports we use the phrase adb logcat *:E > filename

this ensures that we filter the logs by errors and remove the long set of lines like thermal updates ...etc

Part 3

In order to port firmware

1. Download Stock firmware extract it with tool

Websites to get stock firmware are

http://updato.com/firmware-archive-select-model

or https://xdaforums.com/galaxy-tab-s/general/tool-samfirm-samsung-firmware-t2988647

2.We will deodex our rom using Fulmics or similar deodexer

Either a kitchen like "http://xdaforums.com/chef-central/android/kitchen-superrs-kitchen-t3202296/page26" or similar.

Thanks [MENTION=5787964]SuperR[/MENTION]

https://xdaforums.com/android/software-hacking/tooll-03-12-fulmics-deodexer-1-0-t3512081

Thanks [MENTION=5132229]xpirt[/MENTION]

3. Learn how to use APK DECOMPILE TOOLS SUCH AS TICKLEMEANDRIOD

http://xdaforums.com/showthread.php?t=1633333

Thanks [MENTION=4315551]Ticklefish[/MENTION]

4. Remove Apps Priv-app and Framework of base. In a new folder use Fulmics to deodex this. Store somewhere safe.

5. Deodex Port and copy the Apps, Framework and Priv-app into the Base of stock rom.

6. In Ticklemeandriod you notice we have 6 work Areas. For our Roms we will only need two. The most common files we will use are services.jar, and framework.jar.

7. Take the services and framework our our Port and decompile in work area 1.

8. Take the services and framework of our Base and decompile in work area 2.

9. We will Perform a quick Step to help if App signatures become corrupt or cannot be read.

Follow this guide by [MENTION=5198767]ikrom[/MENTION]

http://xdaforums.com/showpost.php?p=62496153&postcount=2957

10. After this lets move to debugging our apps and frameworks.

Part 4 (Tools and debugging)

My favorite tools to use include WinMerge and FileSeek

1. Winmerge enables us to compare two files. For example a stock jar and one of our port.

2. File seek allows us to search for a specific references.

I use file seek to search for weird terminology I see on my log.

3. Terminology

Part 5 ( Terminology)

1. In a logcat we are looking for three things when debugging. "E JavaBinder:", "E art", "E AndroidRuntime: FATAL EXCEPTION:"

2. The order to debug we search in logcat. When beginning it is not specific but, I usually search for Art errors first.

3. So for example if I get in my logcat

"01-01 01:26:25.169 5599 7183 E JavaBinder: java.lang.NoSuchMethodError: No virtual method activityPauseTrigger(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/pm/ApplicationInfo;)V in class Lcom/android/internal/app/ActivityTrigger; or its super classes (declaration of 'com.android.internal.app.ActivityTrigger' appears in /system/framework/framework.jar:classes2.dex)"

I got the location which is framework jar Class2

activityPauseTrigger(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/pm/ApplicationInfo;)V is the missing info in the port smalis and

log says it is somewhere in

Lcom/android/internal/app/ActivityTrigger; or the files with idential names to Activity trigger

4. In this case missing method could be found in stock smali. This is where we use win merge to cleanly copy new method from stock to port.

5. But Mike what if The logcat doesnt tell me location. We will then use fileseek in this instance.

Example: Log tells me

"01-01 00:24:17.509 7524 7539 E JavaBinder: java.lang.UnsatisfiedLinkError: No implementation found for void com.android.internal.app.ActivityTrigger.native_at_pauseActivity(java.lang.String) (tried Java_com_android_internal_app_ActivityTrigger_native_1at_1pauseActivity and Java_com_android_internal_app_ActivityTrigger_native_1at_1pauseActivity__Ljava_lang_String_2)
"

No implementation means that we must remove this file as it is not found in the libs. What location? We dont know yet ?

com.android.internal.app.ActivityTrigger.native_at_pauseActivity(java.lang.String

is what we are looking for

According to fileseek I would look for pauseActivity because it is a keyword

According to file seek I may get 100 references but I see one that says

.method ActivityTrigger.native_at_pauseActivity

I would then use winmerge to cleanly delete/copy the file from my stock smali to the new one. From the location I found in Fileseek.

6. Let me give a example of a Runtime error.

"07-25 09:17:08.975 16379 16379 E AndroidRuntime: java.lang.NoSuchMethodError: No interface method setDataFromNSFLP(ILandroid/os/Bundle;)V in class Landroid/location/ILocationManager; or its super classes (declaration of 'android.location.ILocationManager' appears in /system/framework/framework.jar)

So log told us to look in framework for a file with

setDataFromNSFLP(ILandroid/os/Bundle;)V

Boot up file seek and repeat steps above.

Part 6

So we booted now what.

Lets now work on fixing local errors.

Use logcat to possible fcs and reboots.

All firmware edits are different so this guide will help if you are learning the way android works.

What to look out for

Remember the Base folder we deodexed. We will use this to help fix issues in our rom.

1. Take the McRegistry Folder and ffffffff0000000 File move this to our booted rom.

2. Now in the Ported firmware copy the Fonts folder and the files named font in /etc to our booted rom.

3. Delete these folders - " preloadedmdm ", " sipdb " and " tts from booted rom and replace with that from ported firmware.

4. Open " Media " folder in booted rom

Delete Audio folder

Replace with Ported firmware audio folder.

5. In /etc/permission add the missing software permissions not hardware like slocation or camera-flash.

6. In build-prop

Replace these values with that of port.

ro.build.scafe.size=
ro.build.scafe.shot=
ro.build.scafe.cream=
ro.build.scafe.version=
ro.com.google.gmsversion=
ro.build.version.sdl=
ro.config.ringtone=
ro.config.notification_sound=
ro.config.alarm_alert=
ro.config.media_sound=
ro.config.ringtone_2=
ro.config.notification_sound_2=

7. Add this code to build-prop

wlan.wfd.hdcp=disable

Let's Fix Messages and Phone FCS on first boot

1. From ported from take the libselinux.so to fix message fcs

2. To fix Phone fcs take the mapconprovider.xml from port

64 bit firmware to 32bit

1. Replace 64 bit libs with 32 bit alternatives.

2. You could find 32 bit libs in 32 bit firmware.

32bit all that could be found will be attached here for all users

Fix location problems in Rom

With our services.jar decompiled take these smalis from base and use Winmerge to copy to Port jar.

services.jar\smali\com\android\server\location folder to that of port

also take the

services.jar\smali\com\android\server\LocationManagerService$xxx

Smalis and move from base to port location.

1. Take NFC.apk and Bluetooth.apk from base and move to new Rom folder.

OR A more complex NFC fix would be to look in PackageManagerService.smali

of services.jar

look for the NFC model of the device you are porting from

1. So use FileSeeker

to search for method with "supportNfc"

2. Replace it with your model number.

Example the NFC number of Note 7 is S3FWRN5

I would replace it with the NFC number of S5 which is NXP_PN547C2

Blur

https://xdaforums.com/showpost.php?p=69547250&postcount=10031

AOD FRAMEWORK FIX

Credits :

[MENTION=7503246]Patrick.H[/MENTION] (NX Team)

[MENTION=5150446]karkasss[/MENTION] (NX Team)

[MENTION=439267]Develo[/MENTION]id ALT and F4 (AOD touch / Bluelight filter fix)

[MENTION=4596062]asc1977[/MENTION], [MENTION=3026895]DaOldMan[/MENTION] (AOD brightness control)

(Please copy & paste when you add our credits)

Download this file extract to services.jar

https://mega.nz/#!KgMxwQDR!g0yy7a6Izk8U8szRsggaZAXLaF4pjSMYAc8p6kOjIs4

Compare the PowerManagerService Smails.

then recompile :cool:

OR

thanks [MENTION=744557]oluwaponmile[/MENTION]

follow this guide

https://xdaforums.com/showpost.php?p=69594939&postcount=8139

Lets fix ported Cameras

[SIZE="3"]GUIDE IS IN PROGRESS[/SIZE]
Debug solution not fix:

This will be a hard thing to accomplish. Also make sure that Camera is recompiled using New signatures.
First lets find the native resolutions of your camera. For this we look in native camera apk.
Find the native resolutions in arrays or strings xml.
Save resolutions found in port apk for later reference. These are the values we are going to replace with stock hexadecimal values.
Use a Decimal to Hexadecimal Converter to find the values for the resolutions in smali.
For example 1080 would be 438 and 1920 would be 780.
For this value we will intrepid the hexadecimal value as 0x438 and 0x780 respectively in andriod.
When we are looking for the resolutions in port apk we grep the values based on the hexadecimal.
So in an example if resolution of port camera is 1920x1080 and stock is 1080x1920, then in smali we might get a value of 0x438, 0x780 in assortment. Simply replace 0x438 with 0x780 and 0x780 with 0x438.
Replace these values in port apk with the stock equivalent. Recompile.
Keep this open in one window.
Now open up camera and take log.
Most likely you would get a error saying missing resolution

KNOX STATUS REVERT (Kernel)

[MENTION=4470081]topjohnwu[/MENTION] for reset prop

The reset prop source was removed from topjohnwu thread however you could use the prebuilt binary in his magisk release zips.

1. Pick your device arch and remove binary from zip

2. Now download a tool to extract boot images.

3. Navigate to sbin and drop your resetprop binary.

4. Get back to root directory and add this file http://www106.zippyshare.com/v/AzldZO7A/file.html

5. Now in init.rc add this code

# Call Knox Reset
service knox-daemon /system/bin/sh /init.knox.sh
class main
user root
oneshot

Device Specific Section

(Section will detail device specific edits for particular devices once users post.)

No Pm type message below.

Also :p I will post below all the logs I used to boot Note 7 firmware on my s5