I have successfully ported s7 and n7 firmware using this guide.
Awesome guide!. 9/10
is the reason i was allowed me to port my own Rom!
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
Hello All! I am posting this fix because on my Note Edge, I wasn't able to get logcat or adb access at boot, no matter what property I set, it didn't work. I finally figured out a way to get true logcat right as the boot animation comes up.
First off, you NEED Notepad++ if you don't want garbage clumped up editing.
1. In Android Image Kitchen, depack the Boot image.
2. Then, go to split image and modify boot.img-cmdline and add.Code:
3. Save that file, then go to the ramdisk folder and edit your default.prop. change these values.4. Save that file, then go to init.rc, and use find to search for adbd to jump to this.Code:
ro.secure=1 > ro.secure=0 ro.adb.secure=1 > ro.adb.secure=0 ro.debuggable=0 > ro.debuggable=15. Change the original code fromCode:
# adbd is controlled via property triggers in init.<platform>.usb.rcCode:
service adbd /sbin/adbd --root_seclabel=u:r:su:s0 class core socket adbd stream 660 system system disabled seclabel u:r:adbd:s0 TO: service adbd /sbin/adbd --root_seclabel=u:r:su:s0 disabled socket adbd stream 660 system system seclabel u:r:adbd:s0
6. Change this to new code.7. Rebuild the kernel and install in TWRP or however you install kernels, ADB will be accessible right at boot so nothing is lost during logging. If your kernel doesn't need this, don't bother, but if like me, you couldn't get anything, this will fix your issues.Code:
# adbd on at boot in emulator on property:ro.kernel.qemu=1 start adbd TO: # allows adbd at boot with property trigger below on property:ro.debuggable=1 write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04E8 write /sys/class/android_usb/android0/idProduct 6860 write /sys/class/android_usb/android0/functions adb write /sys/class/android_usb/android0/enable 1 start adbd
In some cases, you will still need to push adb_keys to /data/misc/adb/, however.
@malbert16442 Please consider putting this in OP for those who have issues getting logcat at boot.
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
Thanks Member @Snoop05
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
In order to port firmware
1. Download Stock firmware extract it with tool
Websites to get stock firmware are
2.We will deodex our rom using Fulmics or similar deodexer
Either a kitchen like "http://forum.xda-developers.com/chef-central/android/kitchen-superrs-kitchen-t3202296/page26" or similar.
3. Learn how to use APK DECOMPILE TOOLS SUCH AS TICKLEMEANDRIOD
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 @ikrom
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.
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 ?
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
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
Boot up file seek and repeat steps above.
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
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
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
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
AOD FRAMEWORK FIX
@Patrick.H (NX Team)
@karkasss (NX Team)
@Develoid ALT and F4 (AOD touch / Bluelight filter fix)
@asc1977, @DaOldMan (AOD brightness control)
(Please copy & paste when you add our credits)
Download this file extract to services.jar
Compare the PowerManagerService Smails.
follow this guide
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)
@topjohnwu 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.)
So I haven't really made a new list of smalis for porting roms, but here's the ones just to boot ANY 6.0.1 firmware on J5 2015.
No Pm type message below.
Also I will post below all the logs I used to boot Note 7 firmware on my s5