[Motorola Droid RAZR] fujcru:
The Holy Grail has been achieved...

I've gotten my US Verizon XT912 running MIUI with 4G/LTE.

The latest posts where the XT912 is finally officially being ported instead of just the XT910 gave me hope. And the fact that it seemed to boot with no data without needing a patch sounded a whole lot like the experience that I had with the Mokee ROM on here. That ROM also was reported working for the XT912 but seemed to only work on non-Verizon XT912's (global phones). So to get that one working I have to sort of Verizon-ify it. MIUI was not quite as Verizon ready and there were a few additional steps needed. I haven't had much chance to play with it other than to confirm that the 4G was working and it's not perfect yet, maybe someone else can help (can't get 4G settings to stick and they have to be reset every reboot). So here goes.

To Verizon-ify this ROM, I had to copy some files and settings from a working Verizon ROM. I used Cyanogenmod 10.1.3 since this ROM seems to be based off that (based on an entry in the build.prop file). First off, there are Verizon specific system apps missing. So from the working ROM copy these files into MIUI into the same directory, of course:

\system\app\appdirectedsmspermission.apk

\system\app\VerizonSSOEngine.apk

\system\app\VZWAPNLib.apk

\system\app\vzwapnpermission.apk

\system\app\VZWAPNService.apk

I'm not exactly sure that the first file is necessary, but all of the Verizon ROM's for the XT912 seem to have it so I included it just in case.

Then I went into \system\etc\ to make some changes. By default, in the \system\etc\gps.conf file, this ROM was using a North America NTP server, but since I am in the US, I decided to further localize it by changing the line NTP_SERVER=north-america.pool.ntp.org to NTP_SERVER=us.pool.ntp.org.

And the \system\etc\apns-conf.xml didn't seem to contain any Verizon APN's at all. So I copied over the file from Cyanogenmod.

And the last thing was to edit the \system\build.prop file. If I remember correctly, the ROM specific stuff is at the end of this file. So I basically just copied and replaced like 95% of the file from the beginning into MIUI. Here is a copy of what my final file looked like:

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=JDQ39E
ro.build.display.id=cm_spyder-userdebug 4.2.2 JDQ39E eng.jenkins.20130923.193155 test-keys
ro.build.version.incremental=3.10.25
ro.build.version.sdk=17
ro.build.version.codename=REL
ro.build.version.release=4.2.2
ro.build.date=Mon Sep 23 19:32:33 PDT 2013
ro.build.date.utc=1379989953
ro.build.type=userdebug
ro.build.user=jenkins
ro.build.host=cyanogenmod
ro.build.tags=release-keys
ro.product.model=XT912
ro.product.brand=verizon
ro.product.name=spyder_vzw
ro.product.device=cdma_spyder
ro.product.board=spyder
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=Motorola
ro.product.locale.language=en
ro.product.locale.region=US
ro.wifi.channels=
ro.board.platform=omap4
# ro.build.product is obsolete; use ro.product.device
ro.build.product=cdma_spyder
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=cdma_spyder-user 4.2.2 JDQ39E 20130923 release-keys
ro.build.fingerprint=verizon/spyder_vzw/cdma_spyder:4.2.2/JDQ39E/20130923:user/release-keys
ro.build.characteristics=default
ro.cm.device=spyder
# end build properties
#
# system.prop for CDMA RAZR
#
# rild.libpath=/system/lib/libril-moto-umts-1.so
rild.libpath=/system/lib/libmoto_ril.so
rild.libargs=-d /dev/ttyO0
telephony.lteOnCdmaDevice=1
ro.mot.ril.danlist=611,*611,#611
persist.ril.ecclist=911,*911,#911

persist.ril.modem.mode =1

# USB modes allowed for UI and switching
ro.ngp_available=1
ro.modem_available=0

# Default network type.
# 7 => GLOBAL.
ro.telephony.default_network=10
ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html
ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html
ro.cdma.home.operator.numeric=310004
ro.cdma.home.operator.alpha=Verizon
ro.config.svlte1x=true

# our HTML browser (not WAP browser ) based on requirements IKHSS6-1061 need to specify UAProf URL
ro.mot.hw.uaprof=http://uaprof.vtext.com/mot/xt912/xt912.xml

# Enable HAC to also display Call Setting Menu Option.
ro.mot.hw.HAC=1
# ERI feature
# 0 OFF
# 1 ON
ro.mot.eri=1

# Motorol,a6889c,02/Feb/2010,IKSHADOW-619
# Proximity Sensor feature
# 0 disable
# 1 enable
persist.mot.proximity.touch=1
# End IKSHADOW-619

# BEGIN Motorola, a22976, 25-Feb-2010, IKSHADOW-702, FID 31841
# VZW Requirement Specifications: NETWORK BASED PLUS CODE DIALING
# 0 disable
# 1 enable
ro.cdma.nbpcd=1
# END IKSHADOW-702

persist.mot.usb.mediasync = 1
# persist.usb.android_config = 1

#Proximity sensor debounce time
mot.proximity.delay=450
# disable touch below 60 pixels
mot.proximity.distance=60

#BEGIN Motorola, nfjb73, 21-jun-2010,
# this is for feature 34386, other features for vzw global phone
# could use this property too. IKMAIN-732
#1 this is verizon wireless globle phone
#0 this is not verizon wireless globle phone
ro.mot.phonemode.vzwglobalphone=0
# END Motorola, nfjb73, 21-jun-2010, IKMAIN-732

# BEGIN Motorola, nfjb73 23-jun-2010, IKMAIN-624
# this is for feature 33860, when phone is activated, the cdma mdn is written.
persist.radio.vzw.cdma.mdn=
# END Motorola, nfjb73

# BEGIN Motorola, qmfd78, 14-Jul-2010, IKMAIN-884
# GSM SMS traffic needs to be routed/sent through North America SMSC.
# This is part of the VZW World-phone Feature. SMS are always sent to a US SMSC and then injected
# into that network. This allows for billing and give the user the impression that the device is
# still in the US.
ro.telephony.gsm-routes-us-smsc = 1
# END Motorola, qmfd78, 14-Jul-2010, IKMAIN-884

# BEGIN Motorola, a22600 qmfd78, 16-Jul-2010, IKDROIDPRO-423
# For north american cdma operators, this flag should be 1.
# It enables number mangling when nbpcd (plus code dialing) is not supported.
# This is part of the VZW World-phone Feature.
ro.cdma.home.operator.isnan=1
# END Motorola, a22600 qmfd78, 16-Jul-2010, IKDROIDPRO-423

# EDM feature - IKDROIDPRO-381 - Start
ro.mot.dpmext = true
# EDM feature - IKDROIDPRO-381 -End

# BEGIN Moto, IKSTABLETWO-689, nfjb73, for 34387,33857
# when phone in Global mode, FW need to know the last phone mode beore power off
# when phone power up, it would use the right mode to avoid switch
persist.radio.ap.phonetype=2
# END IKSTABLETWO-689

# BEGIN Motorola, hwqc67, 22-Jun-2011, IKLOCSEN-317, FID 36426
# Gps Smart Battery Savings
# (depends on sensor hub)
# 0 disable
# 1 enable
persist.mot.gps.smart_battery=1
# END IKLOCSEN-317

# Motorola, IKHALFMWK-3, w001091
# Feature 32711, deep sleep mode support
ro.mot.deep.sleep.supported=true

# Give extra time for LTE bug dumps
ril.dumpstate.timeout=60

# BEGIN Motorola, a22543, 16-Aug-2011, IKSTABLE6-8304
persist.dbg.kwdt.report=0
# END IKSTABLE6-8304

# BEGIN Motorola, atzakis, 12-Oct-2011, IKSTABLE6-18830
ro.mot.hw.navkeyboard.devname=cy8c201xx
# END IKSTABLE6-18830

# BEGIN Motorola abp095, 4-Jan-2012, IKHSS7-2427 - Thumbnail property change
com.motorola.cg.lowres=1
com.motorola.cg.tnWidth=160
com.motorola.cg.tnHeight=160
com.motorola.cg.tndisplay=1
# END IKHSS7-2427

# system prop for requesting Master role in incoming Bluetooth connection.
#
ro.bluetooth.request.master=true
#
# system prop for Bluetooth Auto connect for remote initated connections
#
ro.bluetooth.remote.autoconnect=true

ro.com.google.clientidbase=android-motorola
ro.com.google.clientidbase.ms=android-verizon
ro.com.google.clientidbase.am=android-verizon
ro.com.google.clientidbase.gmm=android-motorola
ro.com.google.clientidbase.yt=android-verizon
persist.ril.mux.ttydevice=/dev/ttyO0
persist.ril.modem.ttydevice=/dev/usb/tty2-1:1.4
persist.ril.tcmd.ttydevice=/dev/usb/tty2-1:1.3
persist.ril.diag.ttydevice=/dev/usb/tty2-1:1.0
persist.ril.features=0x90A
persist.ril.mux.sleep=2
persist.ril.rssi.enable.param6=1
ril.wrigley.modem.tty=/dev/usb/tty1-2:1.10
persist.radio.lte.mm.disable=0
rild.libpath=/system/lib/moto-ril-multimode.so
gsm.sim.mot.simswap=1
ro.com.google.gmsversion=4.1_r3
ro.HorizontalBUA=true
ro.HorizontalVVM=true
ro.horizontalNGM=false
ro.horizontalVMM=false
ro.horizontalMOD=false
ro.horizontalVOD=false
ro.horizontalEmail=false
ro.mot.phonemode.vzw4gphone=1
ro.com.android.dataroaming=true
ro.cdma.subscription=0
lte_ril.libpath=/system/lib/lib-mot-lte-ril.so
cdma_ril.libpath=/system/lib/libmoto_ril.so
ril.rat=LTE
lte_ril.netcfg_to=90
ro.cdma.homesystem=64,65,76,77,78,79,80,81,82,83
ro.cdma.data_retry_config=max_retries=infinite,0,0,10000,10000,100000,10000,10000,10000,10000,140000,540000,960000
ro.gsm.data_retry_config=default_randomization=2000,max_retries=infinite,0,0,80000,125000,485000,905000
ro.gsm.2nd_data_retry_config=max_retries=infinite,default_randomization=2000,0,0,80000,125000,485000,905000
ro.mot.setuptype=2
ro.horizontalIM=true
ro.ril.svlte1x=true
ro.mot.lte_on_cdma=1
ro.mot.tmp.telephony.refactor=true
ro.mot.dpmext=true
ro.com.google.clientid=android-motorola
ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html
ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html
ro.mot.hidden_keyboards=evfwd

# Additions
ril.subscription.types=NV,RUIM
ro.cdma.subscribe_on_ruim_ready=true

# Vold switchability uncomment second line to swap
ro.vold.switchablepair=/storage/sdcard0,/storage/sdcard1
#persist.sys.vold.switchexternal=1

#
# ADDITIONAL_BUILD_PROPERTIES
#
keyguard.no_require_sim=true
ro.com.android.dateformat=MM-dd-yyyy
ro.carrier=unknown
persist.hwc.sw_vsync=1
ro.crypto.state=unencrypted
ro.hdcp.support=2
ro.service.start.smc=1
ro.sf.lcd_density=240
windowsmgr.max_events_per_sec=90
com.ti.omap_enhancement=true
hwui.render_dirty_regions=false
persist.sys.root_access=3
ro.product.use_charge_counter=1
persist.sys.usb.config=mtp,adb
ro.setupwizard.enable_bypass=1
ro.media.camcorder.1080p=mp4,h264,30,15000000,aac,128000,44100,2
ro.media.camcorder.720p=mp4,h264,30,10000000,aac,128000,44100,2
ro.media.camcorder.d1NTSC=mp4,h264,30,6000000,aac,128000,44100,2
ro.media.camcorder.vga=mp4,h264,30,4000000,aac,128000,44100,2
ro.media.camcorder.cif=mp4,h264,30,1500000,aac,128000,44100,2
ro.media.camcorder.qvga=mp4,h264,15,500000,aac,64000,44100,2
ro.media.camcorder.mms=3gp,h264,15,128000,amrnb,12200,8000,1
ro.media.camcorder.mmsres=qvga
ro.camcorder.zoom=true
ro.media.capture.maxres=5m
ro.media.capture.fast.fps=4
ro.media.capture.slow.fps=120
ro.media.capture.flash=led
ro.media.capture.flashMinV=3300000
ro.media.capture.torchIntensity=28
ro.media.capture.flashIntensity=100
ro.media.capture.classification=classF
ro.media.panorama.defres=3264x1840
ro.media.panorama.frameres=1280x720
ro.opengles.version=131072
persist.ril.mux.noofchannels=10
ro.cdma.otaspnumschema=SELC,1,80,99
ro.config.vc_call_vol_steps=7
ro.kernel.android.ril=yes
ro.telephony.call_ring.multiple=false
persist.ril.mux.retries=500
wifi.interface=wlan0
softap.interface=wlan0
wifi.ap.interface=wlan0
wifi.supplicant_scan_interval=90
persist.wlan.ti.calibrated=0
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=64m
dalvik.vm.heapsize=256m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=2m
dalvik.vm.heapmaxfree=8m
drm.service.enabled=true
ro.rommanager.developerid=cyanogenmod
ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html
ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html
ro.com.google.clientidbase=android-google
ro.com.android.wifi-watchlist=GoogleGuest
ro.setupwizard.enterprise_mode=1
ro.com.android.dataroaming=false
ro.cm.version=10.1.3-spyder
ro.modversion=10.1.3-spyder
ro.config.ringtone=MI.ogg
ro.config.notification_sound=FadeIn.ogg
ro.config.alarm_alert=GoodMorning.ogg
ro.config.media_sound=FadeIn.ogg
dalvik.vm.lockprof.threshold=500
dalvik.vm.dexopt-flags=m=y
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
dalvik.vm.dexopt-data-only=1
# ADB Debugging

ro.debuggable=1
persist.service.adb.enable=1
ro.telephony.call_ring.multiple=false
ro.miui.ui.version.code=3
ro.miui.ui.version.name=V5
ro.product.mod_device=xt912_santajin
ro.skia.use_data_fonts=1

I believe that was the last of the changes to the ROM. Flashing the Verizon-ified modified ROM booted with wifi not working. But I've seen this with lots of other ROM's. Just reboot and wifi should be working. Once you complete the setup, 3G should working but no 4G. Here is the part where someone else might be able to help out. To get 4G and you need to change the preferred network. This is done using the hidden phone testing menu. From the dialer, dial *#*#INFO#*#* which translates to *#*#4636#*#*. Scroll down to where you can "Set preferred network type:" and change it to LTE/GSM/CDMA auto (PRL). For whatever reason, I can't seem to get this setting to stick on reboot. It defaults to GSM/CDMA auto (PRL) which is why you only get 3G at first. Supposedly, the line in the build.prop, ro.telephony.default_network=10, tells it to use LTE/GSM/CDMA auto (PRL) (since it's the 10th option), but this doesn't seem to stick. You can install the LTE OnOFF app from the Play Store to quickly get you to the testing menu without having to dial every time, but like I said, this is the one thing I can't figure out quite yet so maybe someone else more knowledgeable can figure how to get the ROM to honor the setting and always choose the right network.

I hope I didn't forget anything. Good luck! And enjoy using MIUI v5 for the first time on you Verizon XT912!