SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
Remixing Android
Marko Gargenta @Marakana
About Marko Gargenta




1.1. Entrepreneur, Author, Speaker
   Developer of Android Bootcamp for Marakana.
   Instructor for 1,000s of developers on Android at Qualcomm, Cisco, Motorola, Intel,
   DoD and other great orgs.
   Author of Learning Android published by O’Reilly.
   Speaker at OSCON (3x), ACM, IEEE, SDC, AnDevCon. Co-Founder of SFAndroid.org
   Co-Chair of Android Open conference: Android Open
Why Remix Android??
2.1. Vanilla is just not for everyone.
 r·i/ēmk/
  emxrˈis:


 Vr:
  eb
       Mx(oehn)aan
        i smtig gi.
 Nu:
  on
       Adfeetvrino a oe oeaigsse poue i sc awy
        ifrn eso f n pn prtn ytm rdcd n uh   a.



    Because Android is open
    Because custom is better
    Because we can
Remix What?!?
3.1. Cosmetics aside, we’re focusing on major surgery to Android OS.
   Registering New Device: Marakana Alpha
   Makefile Plumbing
   Building Alpha Device
   Adding Custom Kernel
   Adding Native Libs
   Adding Native Daemon
   Exposing Libs via JNI
   Registering New System Service
   Extending Android Framework
   Adding New App
   Creating SDK Add-on
Android Stack: The High Level Overview
Android Stack: From Source to Device
Android Stack: Layer Interaction
Interaction Between Apps
Marakana Alpha
Getting the AOSP Source
  Initialize the build environment

  Download the source

  Build the source

  Run on device
Setting up the Directory Structure




Self-contained directory structure:
    d v c / a a a a : Main
     eiemrkn/                placeholder for Marakana Alpha codebase.
    d v c / a a a a a p a Code
     eiemrkn/lh:                      that goes onto the device.
    d v c / a a a a a p a s k a d n Code
     eiemrkn/lh-d_do:                            that goes into the SDK add-on.
    d v c / a a a a a p a c m o : Shared
     eiemrkn/lh-omn                            codebase for device and SDK add-on.
Registering Marakana Alpha
11.1. To future-proof your changes, don’t sprinkle other people’s code - keep it
separate.
   Create v n o s t p s file:
           edreu.h
   device/marakana/alpha/vendorsetup.sh

     adlnhcmofl_aaaaapaeg
     d_uc_ob ulmrkn_lh-n



   Rebuild the lunch menu:
     $suc bideveu.h
       ore ul/nstps
     icuigdvc/aaaaapavnostps
     nldn eiemrkn/lh/edreu.h
     icuigdvc/oosiga/edreu.h
     nldn eiemt/tnryvnostps
     icuigdvc/oownryvnostps
     nldn eiemt/iga/edreu.h
     icuigdvc/asn/rsogvnostps
     nldn eiesmugcep4/edreu.h
     icuigdvc/asn/rsovnostps
     nldn eiesmugcep/edreu.h
     icuigdvc/asn/auovnostps
     nldn eiesmugmgr/edreu.h
     icuigdvc/asn/oovnostps
     nldn eiesmugtr/edreu.h
     icuigdvc/asn/uavnostps
     nldn eiesmugtn/edreu.h
     icuigdvc/ipnavnostps
     nldn eiet/ad/edreu.h
     icuigskbs_opeinabbs
     nldn d/ahcmlto/d.ah
Makefile Plumbing
12.1. The make system is complex - copy from samples to get started.
   Create main product make file:
   dvc/aaaaapaAdodrdcsm
    eiemrkn/lh/nriPout.k

     POUTMKFLS: $LCLDR/ulapam
     RDC_AEIE = (OA_I)fl_lh.k



   Create the main build file:
   dvc/aaaaapafl_lh.k
    eiemrkn/lh/ulapam

     $cl ihrtpout $SCTRE_I)poutlnugssalm)
     (al nei-rdc, (R_AGTDR/rdc/agae_ml.k
     $cl ihrtpout $SCTRE_I)poutgnrcm)
     (al nei-rdc, (R_AGTDR/rdc/eei.k


     #Dsadihrtdvle adueoronised
       icr neie aus n s u w nta.
     POUTNM : fl_aaaaapa
     RDC_AE = ulmrkn_lh
     POUTDVC : apa
     RDC_EIE = lh
     POUTMDL: Fl Mrkn ApaIaefrEuao
     RDC_OE = ul aaaa lh mg o mltr


     icue$cl almkflsudr$LCLPT)
     nld (al l-aeie-ne,(OA_AH)



   Copy boiler-plate files from generic:

     $c bidtre/or/eei/orCni.k
       p ul/agtbadgnrcBadofgm
       dvc/aaaaapa.
        eiemrkn/lh/
     $c bidtre/or/eei/nriBadm 
       p ul/agtbadgnrcAdodor.k
       dvc/aaaaapa.
        eiemrkn/lh/
     $c bidtre/or/eei/eiem 
       p ul/agtbadgnrcdvc.k
       dvc/aaaaapa.
        eiemrkn/lh/
     $c bidtre/or/eei/ytmpo 
       p ul/agtbadgnrcsse.rp
       dvc/aaaaapa.
        eiemrkn/lh/
Generating Platform Signing Keys
13.1. To pass CTS, we must generate our own platform signing keys
   Define our subject/issuer info:

     $SGE=/=SS=aionaLSnFacsoOMrkn
       INR"CU/TClfri/=a rnic/=aaaa
     Ic/UAdodC=nri Pafr Sge/miAdesadodmrkn.o"
     n.O=nri/NAdod ltom inrealdrs=nri@aaaacm



   Remove the existing keys (it does not hurt to back them up first!):

     $r bidtre/rdc/euiy*p
       m ul/agtpoutscrt/.*



   Generate the platform key:

     $eh |dvlpettosmk_e bidtre/rdc/euiypafr
       co eeomn/ol/aeky ul/agtpoutscrt/ltom
     "SGE"
     $INR
     cetn bidtre/rdc/euiypafr.k wt n pswr
     raig ul/agtpoutscrt/ltomp8 ih o asod
     Gnrtn RApiaeky 24 btln mdls
     eeaig S rvt e, 08 i og ouu
     ..........++
     ..........+
     .............................++
     .............................+
     ei 3(x)
       s  03



   Generate the shared key:

     $eh |dvlpettosmk_e bidtre/rdc/euiysae
       co eeomn/ol/aeky ul/agtpoutscrt/hrd
     "SGE"
     $INR
     cetn bidtre/rdc/euiysae.k wt n pswr
     raig ul/agtpoutscrt/hrdp8 ih o asod
     Gnrtn RApiaeky 24 btln mdls
     eeaig S rvt e, 08 i og ouu
     ........................................
     ........................................
     .........++
     .........+
     ......++
     ......+
     ei 3(x)
       s  03



   Generate the media key:
     $eh |dvlpettosmk_e bidtre/rdc/euiymda
       co eeomn/ol/aeky ul/agtpoutscrt/ei
     "SGE"
     $INR
     cetn bidtre/rdc/euiymdap8wt n pswr
     raig ul/agtpoutscrt/ei.k ih o asod
     Gnrtn RApiaeky 24 btln mdls
     eeaig S rvt e, 08 i og ouu
..........+
  .........++
  ..........++
  ..........+
  ei 3(x)
    s  03



Generate the testkey key:
  $eh |dvlpettosmk_e bidtre/rdc/euiytsky
    co eeomn/ol/aeky ul/agtpoutscrt/ete
  "SGE"
  $INR
  cetn bidtre/rdc/euiytskyp8wt n pswr
  raig ul/agtpoutscrt/ete.k ih o asod
  Gnrtn RApiaeky 24 btln mdls
  eeaig S rvt e, 08 i og ouu
  ..........++
  ..........+
  ........................++
  ........................+
  ei 3(x)
    s  03



Verify that our keys have been created:
  $l - bidtre/rdc/euiy*p
    s 1 ul/agtpoutscrt/.*
  bidtre/rdc/euiymdap8
  ul/agtpoutscrt/ei.k
  bidtre/rdc/euiymdax0.e
  ul/agtpoutscrt/ei.59pm
  bidtre/rdc/euiypafr.k
  ul/agtpoutscrt/ltomp8
  bidtre/rdc/euiypafr.59pm
  ul/agtpoutscrt/ltomx0.e
  bidtre/rdc/euiysae.k
  ul/agtpoutscrt/hrdp8
  bidtre/rdc/euiysae.59pm
  ul/agtpoutscrt/hrdx0.e
  bidtre/rdc/euiytskyp8
  ul/agtpoutscrt/ete.k
  bidtre/rdc/euiytskyx0.e
  ul/agtpoutscrt/ete.59pm



Check that our specific subject/issuer has been used:

  $oeslx0 -ou -ujc -sur-n
    pns 59 not sbet ise i
  bidtre/rdc/euiypafr.59pm
  ul/agtpoutscrt/ltomx0.e
  sbet /=SS=aionaLSnFacsoOMrkn
  ujc= CU/TClfri/=a rnic/=aaaa
  Ic/UAdodC=nri Pafr Sge/miAdesadodmrkn.o
  n.O=nri/NAdod ltom inrealdrs=nri@aaaacm
  ise=/=SS=aionaLSnFacsoOMrkn
  sur CU/TClfri/=a rnic/=aaaa
  Ic/UAdodC=nri Pafr Sge/miAdesadodmrkn.o
  n.O=nri/NAdod ltom inrealdrs=nri@aaaacm



The b i d t r e / r d c / e u i y . k files are the private keys (. 5 9 p mare the
      ul/agtpoutscrt/p8                                                 x0.e
certificates) - keep them safe and secure - especially since we did not encrypt them!
Building Alpha Device
14.1. Let’s build Alpha - so far a vanilla Android.
    Register the device with build system

      $suc bideveu.h
        ore ul/nstps
      icuigdvc/aaaaapavnostps
      nldn eiemrkn/lh/edreu.h
      …



    Choose lunch menu
      $lnhfl_aaaaapaeg
        uc ulmrkn_lh-n


      ======================
      ======================
      PAFR_ESO_OEAERL
      LTOMVRINCDNM=E
      PAFR_ESO=..
      LTOMVRIN403
      TRE_RDC=ulmrkn_lh
      AGTPOUTfl_aaaaapa
      TRE_UL_AIN=n
      AGTBIDVRATeg
      TRE_UL_YErlae
      AGTBIDTP=ees
      TRE_UL_PS
      AGTBIDAP=
      TRE_RHam
      AGTAC=r
      TRE_RHVRATam7a
      AGTAC_AIN=rv-
      HS_RHx6
      OTAC=8
      HS_Slnx
      OTO=iu
      HS_UL_YErlae
      OTBIDTP=ees
      BIDI=M7K
      UL_DIL4
      ======================
      ======================



    Compile the device
      $epr UECAH=
        xot S_CCE1
      $mk -1
        ae j0
      …
      Isaldfl ls:ottre/rdc/lh/ntle-ie.x
      ntle ie it u/agtpoutapaisaldflstt
      Tre sse f iae
      agt ytm s mg:
      ottre/rdc/lh/b/AKGN/ytmmg_nemdae/ytmig
      u/agtpoutapaojPCAIGsseiaeitreitssse.m
      Isalsse f iae ottre/rdc/lh/ytmig
      ntl ytm s mg: u/agtpoutapasse.m



    Run new device
$euao -v Apa
   mltr ad lh
            -ytmottre/rdc/lh/ytmig
             sse u/agtpoutapasse.m
            -ads ottre/rdc/lh/ads.m
             rmik u/agtpoutaparmikig



Verify build number
Look for the Build number property in System Settings→About phone screen.
Marakana Alpha Custom Kernel
Android Stack - Kernel
Marakana Alpha Custom Kernel Steps
17.1. Not everyone is going to need a custom kernel - but we can have it.
   Download and build kernel source

     $mdr~kre/
       ki /enl
     $c ~kre/
       d /enl
     $gtcoehts/adodgolsuc.o/enlglfs.i
       i ln tp:/nri.ogeorecmkre/odihgt
     $c glfs/
       d odih
     $gtbac -
       i rnh a
     $gtceku - rmtsoii/nri-odih262
       i hcot t eoe/rgnadodglfs-..9
     $mk glfs_rv_ecni AC=r
       ae odiham7dfofg RHam
     $mk mncni
       ae euofg
     $mk -1 AC=r 
       ae j0 RHam
         COSCMIE/OPpeul/iu-8/olhi/r-ai443bnameb-
          RS_OPL=AS/rbitlnxx6tocanameb-../i/r-ai



   Copy kernel into our device folder

     c /aht/enlac/r/otzmg dvc/aaaaapacmo/enl
      p pt/okre/rhambo/Iae eiemrkn/lh-omnkre



   Enable our custom kernel in BoardConfig.mk
   device/marakana/alpha/BoardConfig.mk

     …
     TRE_OKRE : fle
     AGTN_ENL = as
     …



   Create a alpha.mk makefile for our common components
   device/marakana/alpha-common/alpha.mk
     M_AH: $LCLPT)./lh-omn
     YPT = (OA_AH/.apacmo


     icue$cl alsbi-aeie)
     nld (al l-udrmkfls


     #Eal orcso kre
       nbe u utm enl
     LCLKRE : $M_AH/enl
     OA_ENL = (YPT)kre
     POUTCP_IE + $LCLKRE)kre
     RDC_OYFLS = (OA_ENL:enl
Include a p a m in main makefile f l _ l h . k
         lh.k                     ulapam
device/marakana/alpha/full_alpha.mk

  …
  icuedvc/aaaaapacmo/lh.k
  nld eiemrkn/lh-omnapam



Rebuild the device and restart the device with:

  $euao -v Apa
    mltr ad lh
             -enlottre/rdc/lh/enl
              kre u/agtpoutapakre
             -ytmottre/rdc/lh/ytmig
              sse u/agtpoutapasse.m
             -ads ottre/rdc/lh/ads.m
              rmik u/agtpoutaparmikig



Verify it worked

  $abselct/rcvrin
    d hl a po/eso
  Lnxvrin262-aaaaeapeg09f (tdn@bnu (c vrin
  iu eso ..9mrkn-xml-bd3b suetuut) gc eso
  440(C))# TeJl1 2:40 PT21
  .. GC   5 u u 9 22:3 D 01
Marakana Alpha Custom Lib
Android Stack - Native Libraries
Marakana Alpha Custom Lib Steps
20.1. From drivers to open source libraries, you likely need custom libraries.
    Create home for shared libraries

      $mdrdvc/aaaaapacmo/i/
        ki eiemrkn/lh-omnlb



    Create shared libs makefile
    device/marakana/alpha-common/lib/Android.mk

      icue$cl alsbi-aeie)
      nld (al l-udrmkfls



    Create folder for l b r n o library
                       imklg

      mdrdvc/aaaaapacmo/i/imklg
      ki eiemrkn/lh-omnlblbrno



    Create l b r n o . header file
            imklgh
    device/marakana/alpha-common/lib/libmrknlog/libmrknlog.h
      ..
      .
      etr itmk_ls_o(;
      xen n rnfuhlg)
      etr itmk_e_oa_o_ie)
      xen n rngtttllgsz(;
      etr itmk_e_sdlgsz(;
      xen n rngtue_o_ie)
      ..
      .



    Implement the library l b r n o . using i c l )to talk to kernel
                           imklgc            ot(
    device/marakana/alpha-common/lib/libmrknlog/libmrknlog.c

    Create the A d o d m makefile
                nri.k
    device/marakana/alpha-common/lib/libmrknlog/Android.mk
      LCLPT: $cl m-i)
      OA_AH= (al ydr
      icue$CERVR)
      nld (LA_AS
      LCLMDL_AS: otoa
      OA_OUETG = pinl
      LCLSCFLS: lbrno.
      OA_R_IE = imklgc
      LCLSAE_IRRE : lbuislbtl lb
      OA_HRDLBAIS = ictl iuis ic
      LCLMDL : lbrno
      OA_OUE = imklg
      LCLPEIKMDL : fle
      OA_RLN_OUE = as
icue$BIDSAE_IRR)
 nld (UL_HRDLBAY



Register the library with a p a m
                           lh.k
device/marakana/alpha-common/alpha.mk

 …
 POUTPCAE + lbrno
 RDC_AKGS = imklg



Test l b r n o . obuilds
      imklgs

 $mk -1 lbrno
   ae j0 imklg
 …
 tre SaeLb lbrno
 agt hrdi: imklg
 (u/agtpoutgnrcojSAE_IRRE/imklgitreitsLNE
 ottre/rdc/eei/b/HRDLBAISlbrno_nemdae/IKD
 /imklgs)
 lbrno.o
 tre Nnpeikd lbrno
 agt o-rlne: imklg
 (u/agtpoutgnrcsmossse/i/imklgs)
 ottre/rdc/eei/ybl/ytmlblbrno.o
 tre Srp lbrno (u/agtpoutgnrcojlblbrno.o
 agt ti: imklg ottre/rdc/eei/b/i/imklgs)
 Isal ottre/rdc/eei/ytmlblbrno.o
 ntl: u/agtpoutgnrcsse/i/imklgs
Marakana Alpha Native Daemon
Android Stack - Native Daemons
Marakana Alpha Native Daemon Steps
23.1. It’s nice to have a native daemon look over your shoulder.
   Create folder for binaries

     $mdrdvc/aaaaapacmo/i
       ki eiemrkn/lh-omnbn
     $mdrdvc/aaaaapacmo/i/rnod
       ki eiemrkn/lh-omnbnmklg



   Create A d o d m for binaries
           nri.k
   device/marakana/alpha-common/bin/Android.mk
     icue$cl alsbi-aeie)
     nld (al l-udrmkfls



   Create daemon source file m k l g .
                              rnodc
   device/marakana/alpha-common/bin/mrknlogd/mrknlogd.c

   Create A d o d m file
           nri.k
   device/marakana/alpha-common/bin/mrknlogd/Android.mk

     LCLPT: $cl m-i)
     OA_AH= (al ydr


     icue$CERVR)
     nld (LA_AS
     LCLMDL_AS: otoa
     OA_OUETG = pinl
     LCLSCFLS: mklg.
     OA_R_IE = rnodc
     LCLCICUE : $LCLPT)./.lblbrno/
     OA__NLDS = (OA_AH/../i/imklg
     LCLSAE_IRRE : lbrno lb lbuislbtl
     OA_HRDLBAIS = imklg ic ictl iuis
     LCLMDL : mklg
     OA_OUE = rnod
     icue$BIDEEUAL)
     nld (UL_XCTBE



   Register m k l g with a p a m file
             rnod         lh.k
   device/marakana/alpha-common/alpha.mk
     …
     POUTPCAE + mklg
     RDC_AKGS = rnod



   Create custom i i . cby using the default one
                  ntr

     $c sse/oerodrii.cdvc/aaaaapacmo/
       p ytmcr/oti/ntr eiemrkn/lh-omn.
Register m k l g with i i . c
          rnod         ntr
device/marakana/alpha-common/init.rc

  …
  #Mrkn' cso lgfuhn deo
    aaaas utm o-lsig amn
  sriemklg /ytmbnmklg 6
  evc rnod sse/i/rnod 0
      ue sse
       sr ytm
      goplg
       ru o
      oeht
       nso



Include i i . cin our a p a m device build
         ntr           lh.k
device/marakana/alpha-common/alpha.mk

  …
  #Cp orii.cfl oe teeitn oe(ic or cnan eta
    oy u ntr ie vr h xsig n sne us otis xr
  cags
  hne)
  POUTCP_IE + $M_AH/ntr:otii.c
  RDC_OYFLS = (YPT)ii.cro/ntr



Build the device
  $mk -1
    ae j0
  …
  Isalsse f iae ottre/rdc/lh/ytmig
  ntl ytm s mg: u/agtpoutapasse.m
  Isaldfl ls:ottre/rdc/lh/ntle-ie.x
  ntle ie it u/agtpoutapaisaldflstt



Verify it all works by restarting the device
  #(esatteeuao
    r)tr h mltr
  $euao -enlottre/rdc/lh/enl&
    mltr kre u/agtpoutapakre
  #wi frteeuao t fns
    at o h mltr o iih
  #cekotordeo
    hc u u amn
  $absell - /ytmbnmklg
    d hl s l sse/i/rnod
  -wrx- ro
  rx-rx ot              sel
                         hl           50 21-71 0:5mklg
                                       58 010-3 22 rnod
  #cekta i rn
    hc ht t us
  $abselp |ge mklg
    d hl s  rp rnod
  sse
  ytm        37    1      14
                           04    22
                                 9      c02f adba S/ytmbnmklg
                                         0508 f0dc sse/i/rnod
  $ablga |ge MK
    d oct rp RN
  IMK LgDeo(
  /RN o amn              3) Fuhdlg(,6 o 656bts.Wiig6 scns
                         7: lse o 1 0 f 53 ye) atn 0 eod
  bfr tenx fuh
  eoe h et ls.
  IMK LgDeo(
  /RN o amn              3) Fuhdlg(,346o 656bts.Wiig6
                         7: lse o 2 40 f 53 ye) atn 0
  scnsbfr tenx fuh
  eod eoe h et ls.
  IMK LgDeo(
  /RN o amn              3) Fuhdlg(,22o 656bts.Wiig6
                         7: lse o 3 3 f 53 ye) atn 0
scnsbfr tenx fuh
eod eoe h et ls.
^C
$ablga -
  d oct g
/e/o/an rn bfe i 6K (K cnue) mxetyi 49b mx
dvlgmi: ig ufr s 4b 0b osmd, a nr s 06, a
pyodi 47b
ala s 06
#go :)
  od -
Wrapping Native Lib with JNI
Wrapping Native Lib with JNI Steps
25.1. The glue for Java to talk to C and back.
    Create directory structure for our JNI wrapper

      $mdrdvc/aaaaapacmo/rmwr
        ki eiemrkn/lh-omnfaeok
      $mdrdvc/aaaaapacmo/rmwr/rno_n
        ki eiemrkn/lh-omnfaeokmklgji
      $mdrdvc/aaaaapacmo/rmwr/rno_n/aa
        ki eiemrkn/lh-omnfaeokmklgjijv
      $mdrdvc/aaaaapacmo/rmwr/rno_n/n
        ki eiemrkn/lh-omnfaeokmklgjiji



    Create top level A d o d m files
                      nri.k
    device/marakana/alpha-common/framework/Android.mk

      icue$cl alsbi-aeie)
      nld (al l-udrmkfls



    device/marakana/alpha-common/framework/mrknlog_jni/Android.mk
      icue$cl alsbi-aeie)
      nld (al l-udrmkfls



    Create Java Library L b o . a a
                         iLgjv
    dvc/aaaaapacmo/
     eiemrkn/lh-omn
    faeokmklgjijv/o/aaaaadodlblgLbo.aa
     rmwr/rno_n/aacmmrkn/nri/i/o/iLgjv

    Create test M i . a a
                 anjv
    dvc/aaaaapacmo/
     eiemrkn/lh-omn
    faeokmklgjijv/o/aaaaadodlblgMi.aa
     rmwr/rno_n/aacmmrkn/nri/i/o/anjv

    Create custom permission
    device/marakana/alpha-
    common/framework/mrknlog_jni/java/com.marakana.android.lib.log.xml

      <xlvrin"."ecdn=uf8?
      ?m eso=10 noig"t-">
      <emsin>
      prisos
        <irr nm=cmmrkn.nri.i.o"
         lbay ae"o.aaaaadodlblg
          fl=/ytmfaeokcmmrkn.nri.i.o.a">
           ie"sse/rmwr/o.aaaaadodlblgjr/
      <prisos
      /emsin>



    Create A d o d m file for our JNI wrapper
            nri.k
device/marakana/alpha-common/framework/mrknlog_jni/java/Android.mk

  LCLPT : $cl m-i)
  OA_AH = (al ydr


  #Bidtelbay
    ul h irr
  icue$CERVR)
  nld (LA_AS
  LCLMDL_AS: otoa
  OA_OUETG = pinl
  LCLMDL : cmmrkn.nri.i.o
  OA_OUE = o.aaaaadodlblg
  LCLSCFLS: $cl aljv-ie-ne,)
  OA_R_IE = (al l-aaflsudr.
  LCLJV_IRRE : cr
  OA_AALBAIS = oe
  LCLN_TNADLBAIS: tu
  OA_OSADR_IRRE = re
  icue$BIDJV_IRR)
  nld (UL_AALBAY


  #Bidtedcmnain
    ul h ouetto
  icue$CERVR)
  nld (LA_AS
  LCLSCFLS: $cl alsbi-aafls $cl alsbi-tlfls
  OA_R_IE = (al l-udrjv-ie) (al l-udrhm-ie)
  LCLMDL: cmmrkn.nri.i.o_o
  OA_OUE= o.aaaaadodlblgdc
  LCLDODO_PIN : cmmrkn.nri.i.o
  OA_RIDCOTOS = o.aaaaadodlblg
  LCLMDL_LS : JV_IRRE
  OA_OUECAS = AALBAIS
  LCLDODO_S_TNADDCE : tu
  OA_RIDCUESADR_OLT = re
  icue$BIDDODO)
  nld (UL_RIDC


  #Cp cmmrkn.nri.i.o.m t /ytmecprisos
    oy o.aaaaadodlblgxl o sse/t/emsin/
  icue$CERVR)
  nld (LA_AS
  LCLMDL_AS: otoa
  OA_OUETG = pinl
  LCLMDL : cmmrkn.nri.i.o.m
  OA_OUE = o.aaaaadodlblgxl
  LCLMDL_LS : EC
  OA_OUECAS = T
  LCLMDL_AH: $TRE_U_T)prisos
  OA_OUEPT = (AGTOTEC/emsin
  LCLSCFLS: $LCLMDL)
  OA_R_IE = (OA_OUE
  icue$BIDPEUL)
  nld (UL_RBIT



Create the JNI header file
  $jvh-n 
    aa ji
          - dvc/aaaaapacmo/rmwr/rno_n/n/
           d eiemrkn/lh-omnfaeokmklgjiji
          -lspt
           casah
  ottre/omnojJV_IRRE/o.aaaaadodlblgitreits
  u/agtcmo/b/AALBAIScmmrkn.nri.i.o_nemdae/
  cassjr
  lse.a
          cmmrkn.nri.i.o.iLg
           o.aaaaadodlblgLbo



Check that you got the right JNI header
device/marakana/alpha-
common/framework/mrknlog_jni/jni/com_marakana_android_lib_log_LibLog.h
  …
JIXOTvi JIALJv_o_aaaaadodlblgLbo_lsLg
  NEPR od NCL aacmmrkn_nri_i_o_iLgfuho
      (NEv,jls)
       JIn* cas;
  …
  JIXOTjn JIALJv_o_aaaaadodlblgLbo_eTtloSz
  NEPR it NCL aacmmrkn_nri_i_o_iLggtoaLgie
      (NEv,jls)
       JIn* cas;
  …
  JIXOTjn JIALJv_o_aaaaadodlblgLbo_eUeLgie
  NEPR it NCL aacmmrkn_nri_i_o_iLggtsdoSz
      (NEv,jls)
       JIn* cas;
  …



Implement the header file, wrapping calls to our l b r n o shared library
                                                  imklg
dvc/aaaaapacmo/
 eiemrkn/lh-omn
faeokmklgjijicmmrkn_nri_i_o_iLgc
 rmwr/rno_n/n/o_aaaaadodlblgLbo.

Create A d o d m file
        nri.k
device/marakana/alpha-common/framework/mrknlog_jni/jni/Android.mk
  LCLPT: $cl m-i)
  OA_AH= (al ydr
  icue$CERVR)
  nld (LA_AS
  LCLMDL_AS: otoa
  OA_OUETG = pinl
  LCLSCFLS: cmmrkn_nri_i_o_iLgc
  OA_R_IE = o_aaaaadodlblgLbo.
  LCLCICUE + $JIHICUE $LCLPT)./../i/imklg
  OA__NLDS = (N__NLD) (OA_AH/../.lblbrno
  LCLSAE_IRRE : lbrno
  OA_HRDLBAIS = imklg
  LCLMDL : lbrno_n
  OA_OUE = imklgji
  LCLPEIKMDL : fle
  OA_RLN_OUE = as
  icue$BIDSAE_IRR)
  nld (UL_HRDLBAY



Register this module with a p a m file
                           lh.k
device/marakana/alpha-common/alpha.mk
  …
  POUTPCAE + 
  RDC_AKGS =
          cmmrkn.nri.i.o 
           o.aaaaadodlblg
          cmmrkn.nri.i.o.m 
           o.aaaaadodlblgxl
          lbrno_n
           imklgji



Build the device
  $mk -1
    ae j0
  …
  tre Peul:cmmrkn.nri.i.o.m
  agt rbit o.aaaaadodlblgxl
  (u/agtpoutapaojECcmmrkn.nri.i.o.m_nemdae
  ottre/rdc/lh/b/T/o.aaaaadodlblgxlitreits
  /o.aaaaadodlblgxl
  cmmrkn.nri.i.o.m)
…
  Isal ottre/rdc/lh/ytmlblbrno_n.o
  ntl: u/agtpoutapasse/i/imklgjis
  …
  Isalsse f iae ottre/rdc/lh/ytmig
  ntl ytm s mg: u/agtpoutapasse.m
  Isaldfl ls:ottre/rdc/lh/ntle-ie.x
  ntle ie it u/agtpoutapaisaldflstt



Verify it works via our M i . a n )test code
                         anmi(

  #(esatteeuao
    r)tr h mltr
  $euao -enlottre/rdc/lh/enl&
    mltr kre u/agtpoutapakre
  #wi frteeuao t fns
    at o h mltr o iih
  #cekotorJv lbay
    hc u u aa irr
  $absell - /ytmfaeokcmmrkn.nri.i.o.a
    d hl s l sse/rmwr/o.aaaaadodlblgjr
  -wr-- ro
  r--r- ot            ro
                       ot          17 21-71 0:1
                                    41 010-1 00
  cmmrkn.nri.i.o.a
  o.aaaaadodlblgjr
  #cekotorJv lbayrgsr fl
    hc u u aa irr eity ie
  $absell - /ytmecprisoscmmrkn.nri.i.o.m
    d hl s l sse/t/emsin/o.aaaaadodlblgxl
  -wr-- ro
  r--r- ot            ro
                       ot           1921-71 2:7
                                    7 010-0 35
  cmmrkn.nri.i.o.m
  o.aaaaadodlblgxl
  #cekotorJIsae lbay
    hc u u N hrd irr
  $absell - /ytmlblbrno_n.o
    d hl s l sse/i/imklgjis
  -wr-- ro
  r--r- ot            ro
                       ot          59 21-71 0:1lbrno_n.o
                                    26 010-1 14 imklgjis
  #ceki oruiiyi digwa i i spoe t
    hc f u tlt s on ht t s upsd o
  $ablga -
    d oct g
  /e/o/an rn bfe i 6K (3bcnue) mxetyi 49b mx
  dvlgmi: ig ufr s 4b 3K osmd, a nr s 06, a
  pyodi 47b
  ala s 06
  #nwrnorJv lbaysMi.an)b drcl ivkn teDli V
    o u u aa irr' anmi( y iety noig h avk M
  $abseldliv -p/ytmfaeokcmmrkn.nri.i.o.a
    d hl avkm c sse/rmwr/o.aaaaadodlblgjr
  cmmrkn.nri.i.o.an
  o.aaaaadodlblgMi
  Fuhdlg Peiul i wscnuig336o 656bts
  lse o. rvosy t a osmn 44 f 53 ye
  #cekaan
    hc gi
  $ablga -
    d oct g
  /e/o/an rn bfe i 6K (K cnue) mxetyi 49b mx
  dvlgmi: ig ufr s 4b 0b osmd, a nr s 06, a
  pyodi 47b
  ala s 06
  $abseldliv -p/ytmfaeokcmmrkn.nri.i.o.a
    d hl avkm c sse/rmwr/o.aaaaadodlblgjr
  cmmrkn.nri.i.o.an
  o.aaaaadodlblgMi
  Fuhdlg Peiul i wscnuig27o 656bts
  lse o. rvosy t a osmn 1 f 53 ye
  #go :)
    od -
Marakana Alpha Service Interface
Android Stack - Framework
Marakana Alpha Service Interface Steps
28.1. Because other apps are going to want to use our service as well.
   Create directory structure for our m k l g e v c
                                       rnosrie

     $mdr- dvc/aaaaapa
       ki p eiemrkn/lh-
     cmo/rmwr/rnosriecmmrkn/nri/evc/o
     omnfaeokmklgevc/o/aaaaadodsrielg



   Create the interface L g e v c . i lfile
                         oSriead
   dvc/aaaaapacmo/
    eiemrkn/lh-omn
   faeokmklgevc/o/aaaaadodsrielgIoSriead
    rmwr/rnosriecmmrkn/nri/evc/o/Lgevc.il

   Create L g a a e . a aproxy to our bound service
           oMngrjv
   dvc/aaaaapacmo/
    eiemrkn/lh-omn
   faeokmklgevc/o/aaaaadodsrielgLgaae.aa
    rmwr/rnosriecmmrkn/nri/evc/o/oMngrjv

   Expose L g a a e . a aas a Java library
           oMngrjv
   device/marakana/alpha-
   common/framework/mrknlogservice/com.marakana.android.service.log.xml

     <xlvrin"."ecdn=uf8?
     ?m eso=10 noig"t-">
     <emsin>
     prisos
       <irr nm=cmmrkn.nri.evc.o"
        lbay ae"o.aaaaadodsrielg
         fl=/ytmfaeokcmmrkn.nri.evc.o.a">
          ie"sse/rmwr/o.aaaaadodsrielgjr/
     <prisos
     /emsin>



   Create A d o d m file for m k l g e v c
           nri.k              rnosrie
   device/marakana/alpha-common/framework/mrknlogservice/Android.mk
     LCLPT : $cl m-i)
     OA_AH = (al ydr


     #Bidtelbay
       ul h irr
     icue$CERVR)
     nld (LA_AS
     LCLMDL_AS: otoa
     OA_OUETG = pinl
     LCLMDL : cmmrkn.nri.evc.o
     OA_OUE = o.aaaaadodsrielg
     LCLSCFLS: $cl aljv-ie-ne,)
     OA_R_IE = (al l-aaflsudr.
     LCLSCFLS+ cmmrkn/nri/evc/o/Lgevc.il
     OA_R_IE = o/aaaaadodsrielgIoSriead
     LCLJV_TTCLBAIS: adodcmo
     OA_AASAI_IRRE = nri-omn
     LCLJV_IRRE : cr
     OA_AALBAIS = oe
     icue$BIDJV_IRR)
     nld (UL_AALBAY
#Bidtedcmnain
    ul h ouetto
  icue$CERVR)
  nld (LA_AS
  LCLSCFLS: $cl alsbi-aafls $cl alsbi-tlfls
  OA_R_IE = (al l-udrjv-ie) (al l-udrhm-ie)
  LCLMDL: cmmrkn.nri.evc.o_o
  OA_OUE= o.aaaaadodsrielgdc
  LCLDODO_PIN : cmmrkn.nri.evc.o
  OA_RIDCOTOS = o.aaaaadodsrielg
  LCLMDL_LS : JV_IRRE
  OA_OUECAS = AALBAIS
  LCLDODO_S_TNADDCE : tu
  OA_RIDCUESADR_OLT = re
  icue$BIDDODO)
  nld (UL_RIDC


  #Cp cmmrkn.nri.evc.o.m t /ytmecprisos
    oy o.aaaaadodsrielgxl o sse/t/emsin/
  icue$CERVR)
  nld (LA_AS
  LCLMDL_AS: otoa
  OA_OUETG = pinl
  LCLMDL : cmmrkn.nri.evc.o.m
  OA_OUE = o.aaaaadodsrielgxl
  LCLMDL_LS : EC
  OA_OUECAS = T
  LCLMDL_AH: $TRE_U_T)prisos
  OA_OUEPT = (AGTOTEC/emsin
  LCLSCFLS: $LCLMDL)
  OA_R_IE = (OA_OUE
  icue$BIDPEUL)
  nld (UL_RBIT



Add it to a p a m file
           lh.k
device/marakana/alpha-common/alpha.mk

  …
  POUTPCAE + 
  RDC_AKGS =
          cmmrkn.nri.evc.o 
           o.aaaaadodsrielg
          cmmrkn.nri.evc.o.m
           o.aaaaadodsrielgxl



Verify that the device builds okay
  $mk -1 cmmrkn.nri.evc.o
    ae j0 o.aaaaadodsrielg
  cmmrkn.nri.evc.o.m
  o.aaaaadodsrielgxl
  …
  tre Peul:cmmrkn.nri.evc.o.m
  agt rbit o.aaaaadodsrielgxl
  …
  Isal
  ntl:
  ottre/rdc/lh/ytmecprisoscmmrkn.nri.evc.o
  u/agtpoutapasse/t/emsin/o.aaaaadodsrielg
  .m
  xl
  …
  Ad:cmmrkn.nri.evc.o < dvc/aaaaapa
  il o.aaaaadodsrielg = eiemrkn/lh-
  cmo/rmwr/rnosriecmmrkn/nri/evc/o/Lgevc.i
  omnfaeokmklgevc/o/aaaaadodsrielgIoSriead
  l
  …
  tre Jr cmmrkn.nri.evc.o
  agt a: o.aaaaadodsrielg
  …
  Isal
  ntl:
ottre/rdc/lh/ytmfaeokcmmrkn.nri.evc.o.a
u/agtpoutapasse/rmwr/o.aaaaadodsrielgjr
…
Marakana Alpha Service App
Android Stack - Services
Marakana Alpha Service App Steps
31.1. Register the service with the Service Manager so others can use it.
   Create the directory structure for our code

     $mdrdvc/aaaaapacmo/p
       ki eiemrkn/lh-omnap



   Create main A d o d m file
                nri.k
   device/marakana/alpha-common/app/Android.mk

     icue$cl alsbi-aeie)
     nld (al l-udrmkfls



   Create A d o d a i e t x lfile for our server app
           nriMnfs.m
   dvc/aaaaapacmo/p/rnoSrieAdodaietxl
    eiemrkn/lh-omnapMkLgevc/nriMnfs.m

   Provide I o S r i e m l j v implementation for our service
            LgevcIp.aa
   dvc/aaaaapacmo/
    eiemrkn/lh-omn
   apMkLgevc/r/o/aaaaadodlgevc/LgevcIp.aa
    p/rnoSriesccmmrkn/nri/osrieIoSriemljv

   Register L g e v c A pwith S r i e a a e
             oSriep            evcMngr
   dvc/aaaaapa
    eiemrkn/ lh-
   cmo/p/rnoSriesccmmrkn/nri/osrieLgevcApjv
    omnapMkLgevc/r/o/aaaaadodlgevc/oSriep.aa

   Create the A d o d m file
               nri.k
   device/marakana/alpha-common/app/MrknLogService/Android.mk
     LCLPT: $cl m-i)
     OA_AH= (al ydr
     icue$CERVR)
     nld (LA_AS
     LCLMDL_AS: otoa
     OA_OUETG = pinl
     LCLSCFLS: $cl aljv-ie-ne,r)
     OA_R_IE = (al l-aaflsudrsc
     LCLRQIE_OUE : 
     OA_EURDMDLS =
             cmmrkn.nri.evc.o 
              o.aaaaadodsrielg
             cmmrkn.nri.i.o
              o.aaaaadodlblg
     LCLJV_IRRE : 
     OA_AALBAIS =
             cmmrkn.nri.evc.o 
              o.aaaaadodsrielg
             cmmrkn.nri.i.o 
              o.aaaaadodlblg
             cr 
              oe
             faeok
              rmwr
     LCLPCAENM : MkLgevc
     OA_AKG_AE = rnoSrie
     LCLSKVRIN: cret
     OA_D_ESO = urn
LCLPOUR_NBE : dsbe
  OA_RGADEALD = iald
  LCLCRIIAE: pafr
  OA_ETFCT = ltom
  icue$BIDPCAE
  nld (UL_AKG)



Register our service app with a p a m file
                               lh.k
device/marakana/alpha-common/alpha.mk

  …
  POUTPCAE + MkLgevc
  RDC_AKGS = rnoSrie



Build the device

  $mk -1
    ae j0
  …
  Isal ottre/rdc/lh/ytmapMkLgevc.p
  ntl: u/agtpoutapasse/p/rnoSrieak
  …
  Isalsse f iae ottre/rdc/lh/ytmig
  ntl ytm s mg: u/agtpoutapasse.m
  Isaldfl ls:ottre/rdc/lh/ntle-ie.x
  ntle ie it u/agtpoutapaisaldflstt
Marakana Alpha Client App
Android Stack - Apps
Marakana Alpha Client App Steps
34.1. A demo client app - to make sure it all works.
    Create directory structure for our M k L g e v c C i n app
                                        rnoSrielet

     $mdrdvc/aaaaapaapMkLgevcCin
       ki eiemrkn/lh/p/rnoSrielet
     $mdrdvc/aaaaapaapMkLgevcCin/e
       ki eiemrkn/lh/p/rnoSrieletrs
     $mdrdvc/aaaaapaapMkLgevcCin/e/aus
       ki eiemrkn/lh/p/rnoSrieletrsvle
     $mdrdvc/aaaaapaapMkLgevcCin/e/aot
       ki eiemrkn/lh/p/rnoSrieletrslyu
     $mdrdvc/aaaaapaapMkLgevcCin/r
       ki eiemrkn/lh/p/rnoSrieletsc
     $mdr-
       ki p
     dvc/aaaaapaapMkLgevcCin/r/o/aaaaadodlgev
     eiemrkn/lh/p/rnoSrieletsccmmrkn/nri/osri
     ccin
     elet



    Create L g c i i y j v
            oAtvt.aa
    dvc/aaaaapa
     eiemrkn/lh/
    apMkLgevcCin/r/o/aaaaadodlgevccin/oAtvt.a
     p/rnoSrieletsccmmrkn/nri/osrieletLgciiyj

    Create A d o d a i e t x lfile
            nriMnfs.m
    dvc/aaaaapaapMkLgevcCin/nriMnfs.m
     eiemrkn/lh/p/rnoSrieletAdodaietxl

    Create A d o d m file
            nri.k
    device/marakana/alpha/app/MrknLogServiceClient/Android.mk

     LCLPT: $cl m-i)
     OA_AH= (al ydr
     icue$CERVR)
     nld (LA_AS
     LCLMDL_AS: otoa
     OA_OUETG = pinl
     LCLSCFLS: $cl aljv-ie-ne,r)
     OA_R_IE = (al l-aaflsudrsc
     LCLJV_IRRE : cmmrkn.nri.evc.o
     OA_AALBAIS = o.aaaaadodsrielg
     LCLPCAENM : MkLgevcCin
     OA_AKG_AE = rnoSrielet
     LCLSKVRIN: cret
     OA_D_ESO = urn
     LCLPOUR_NBE : dsbe
     OA_RGADEALD = iald
     icue$BIDPCAE
     nld (UL_AKG)



    Register M k L g e v c C i n with main makefile f l _ l h . m
              rnoSrielet                             ulapaxl
    device/marakana/alpha/full_alpha.mk
     …
     POUTPCAE + MkLgevcCin
     RDC_AKGS = rnoSrielet
Build entire device

  $mk -1
    ae j0
  …
  Isalsse f iae ottre/rdc/lh/ytmig
  ntl ytm s mg: u/agtpoutapasse.m
  Isaldfl ls:ottre/rdc/lh/ntle-ie.x
  ntle ie it u/agtpoutapaisaldflstt



Verify it all works
Run the MrknLogServiceClient app and try to flush the log.
Marakana Alpha SDK Add-On
35.1. Other developers may want to develop for our cool Alpha device as well.
   Create directory structure

     $mdrdvc/aaaaapaskadnsis
       ki eiemrkn/lh-d_do/kn
     $c - skeuao/kn/VAdvc/aaaaapa
       p r d/mltrsisHG eiemrkn/lh-
     skadnsisMkHgMp
     d_do/kn/rnvadi



   Create portrait layout background
   We took a standard one and just added our logo.




   Create landscape layout background
   Same as with the previous image, just add a logo.
Define h r w r . n file
        adaeii
device/marakana/alpha-sdk_addon/hardware.ini

 #Cso hrwr otosfrteado.
   utm adae pin o h d-n
 #Poete dfndhr ipc alADtreigti ado.
   rpris eie ee mat l V agtn hs d-n
 #Ec si cnas oerd toevle wt isonhrwr.n fl.
   ah kn a lo vrie hs aus ih t w adaeii ie
 v.epie=2
 mhaSz   4



Create SDK Add-on m n f s . n file
                   aietii
device/marakana/alpha-sdk_addon/manifest.ini

 nm=lh AdO
 aeApa d-n
 vno=aaaa
 edrMrkn
 dsrpinMrkn ApaAdo
 ecito=aaaa lh d-n
 ai1
 p=0
 rvso=
 eiin1
 lbaiscmmrkn.nri.i.o;o.aaaaadodsrielg
 irre=o.aaaaadodlblgcmmrkn.nri.evc.o
 cmmrkn.nri.i.o=o.aaaaadodlblgjrMrkn Lg
 o.aaaaadodlblgcmmrkn.nri.i.o.a;aaaa o
 Lbay
 irr
 cmmrkn.nri.evc.o=o.aaaaadodsrielgjrMrkn
 o.aaaaadodsrielgcmmrkn.nri.evc.o.a;aaaa
 LgSrie
 o evc
 si=rnvadi
 knMkHgMp
Define classes to be included
device/marakana/alpha-sdk_addon/alpha_sdk_addon_stub_defs.txt

 +o.aaaaadodlblg*
 cmmrkn.nri.i.o.
 -o.aaaaadodlblgMi
 cmmrkn.nri.i.o.an
 +o.aaaaadodsrielg*
 cmmrkn.nri.evc.o.



Create main a p a s k a d n m makefile for Alpha SDK Add-on
             lh_d_do.k
device/marakana/alpha-sdk_addon/alpha_sdk_addon.mk

 #Icuetecmo suf
   nld h omn tf
 icuedvc/aaaaapacmo/lh.k
 nld eiemrkn/lh-omnapam


 #Ls o mdlst icuei teteado sse iae
   it f oue o nld n h h d-n ytm mg
 POUTPCAE + 
 RDC_AKGS =
         cmmrkn.nri.i.o_o 
          o.aaaaadodlblgdc
         cmmrkn.nri.evc.o_o 
          o.aaaaadodsrielgdc


 #Tenm o ti ado (o teSK
   h ae f hs d-n fr h D)
 POUTSKADNNM : mrkn_lh_do
 RDC_D_DO_AE = aaaaapaadn


 #Cp tefloigflsfrti ado' SK
   oy h olwn ie o hs d-ns D
 POUTSKADNCP_IE : 
 RDC_D_DO_OYFLS =
         $LCLPT)mnfs.n:aietii
          (OA_AH/aietiimnfs.n
         $LCLPT)hrwr.n:adaeii
          (OA_AH/adaeiihrwr.n
         $cl fn-oysbi-ie,
          (al idcp-udrfls*
 ,(OA_AH/kn/rnvadisisMkHgMp)
 $LCLPT)sisMkHgMp,kn/rnvadi



 #Cp tejrflsfrtelbais(Ps epsdi ti ado' SK
   oy h a ie o h irre AI) xoe n hs d-ns D
 POUTSKADNCP_OUE : 
 RDC_D_DO_OYMDLS =
         cmmrkn.nri.i.o:iscmmrkn.nri.i.o.a 
          o.aaaaadodlblglb/o.aaaaadodlblgjr


 cmmrkn.nri.evc.o:iscmmrkn.nri.evc.o.a
 o.aaaaadodsrielglb/o.aaaaadodsrielgjr


 POUTSKADNSU_ES: $LCLPT)apaskadnsu_estt
 RDC_D_DO_TBDF = (OA_AH/lh_d_do_tbdf.x


 #Dfn tenm o tedcmnaint gnrt frti ado' SK
   eie h ae f h ouetto o eeae o hs d-ns D
 POUTSKADNDCMDL : 
 RDC_D_DO_O_OUE =
         cmmrkn.nri.evc.o_o
          o.aaaaadodsrielgdc


 #Sneteado i a euao,w as ne t epiil cp tekre t
   ic h d-n s n mltr e lo ed o xlcty oy h enl o
 iae
 mgs
 POUTSKADNCP_IE + $LCLKRE)iae/enlqm
 RDC_D_DO_OYFLS = (OA_ENL:mgskre-eu
#Ti ado etnstedfutskpout
    hs d-n xed h eal d rdc.
  $cl ihrtpout $SCTRE_I)poutskm)
  (al nei-rdc, (R_AGTDR/rdc/d.k


  #Tenm o ti ado (o tebidsse)
    h ae f hs d-n fr h ul ytm
  #Ue'aePOUT<RDC_AE-d_do't bidtea ado,
    s mk RDC-POUTNM>skadn o ul h n d-n
  #s i ti cs,w wudrn'aePOUTmrkn_lh_do-d_do'
    o n hs ae e ol u mk RDC-aaaaapaadnskadn
  POUTNM : mrkn_lh_do
  RDC_AE = aaaaapaadn
  POUTDVC : apa
  RDC_EIE = lh
  POUTMDL: Mrkn ApaSKAdnIaefrEuao
  RDC_OE = aaaa lh D do mg o mltr



Create main A d o d r d c s m listing other makefiles
             nriPout.k
device/marakana/alpha-sdk_addon/AndroidProducts.mk
  POUTMKFLS: $LCLDR/lh_d_do.k
  RDC_AEIE = (OA_I)apaskadnm



Create top-level makefile
device/marakana/alpha-sdk_addon/Android.mk
  icue$cl alsbi-aeie)
  nld (al l-udrmkfls



Build the SDK Add-on
  $mk -1 POUTmrkn_lh_do-d_do
    ae j0 RDC-aaaaapaadnskadn
  …
  PcaigSKAdn oths/iu-8/d_do/aaaaapaadn
  akgn D do: u/otlnxx6skadnmrkn_lh_do-
  egsuetlnxx6zp
  n.tdn-iu-8.i



Check that Marakana Alpha shows in Android SDK Manager
Start the Android SDK Manager to see all available Add-ons.
Create new AVD based on Marakana Alpha
From the Android AVD Manager, create new AVD using Alpha as the target.
Verify the new AVD boots up with right ROM image
Start the new AVD. You should see all of the modifications we’ve done.
Remixing Android Summary
Thank you!
Marko Gargenta & Marakana Team
@MarkoGargenta
Special thanks to Aleksandar (Sasa) Gargenta for providing most of the research on how to
put together Marakana Alpha, properly.
Slides & video of this presentation is available at Marakana.com
(c) Marakana.com

Contenu connexe

Tendances

Dtrace и немного магии
Dtrace и немного магииDtrace и немного магии
Dtrace и немного магииDan Kruchinin
 
Drupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodDrupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodjuanolalla
 
Creating windows store java script apps
Creating windows store java script appsCreating windows store java script apps
Creating windows store java script appsEugene Zharkov
 
A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1jsalonen Salonen
 
Gdc09 Minimissile
Gdc09 MinimissileGdc09 Minimissile
Gdc09 MinimissileSusan Gold
 
Barely Legal Xxx Perl Presentation
Barely Legal Xxx Perl PresentationBarely Legal Xxx Perl Presentation
Barely Legal Xxx Perl PresentationAttila Balazs
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеYandex
 
YAPC::Brasil 2009, POE
YAPC::Brasil 2009, POEYAPC::Brasil 2009, POE
YAPC::Brasil 2009, POEThiago Rondon
 
La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)
La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)
La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)Kenichiro MATOHARA
 
Barcelona 2010 hidden_features
Barcelona 2010 hidden_featuresBarcelona 2010 hidden_features
Barcelona 2010 hidden_featuresAnis Berejeb
 
Openframworks x Mobile
Openframworks x MobileOpenframworks x Mobile
Openframworks x MobileJanet Huang
 
ipython notebook poc memory forensics
ipython notebook poc memory forensicsipython notebook poc memory forensics
ipython notebook poc memory forensicsVincent Ohprecio
 
TDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on WindowsTDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on WindowsSheng-Hao Ma
 
Attacking the macOS Kernel Graphics Driver
Attacking the macOS Kernel Graphics DriverAttacking the macOS Kernel Graphics Driver
Attacking the macOS Kernel Graphics DriverPriyanka Aash
 
穏やかにファイルを削除する
穏やかにファイルを削除する穏やかにファイルを削除する
穏やかにファイルを削除する鉄次 尾形
 
Build a custom (micro)framework with ZF2 Components (as building blocks)
Build a custom (micro)framework with ZF2 Components (as building blocks)Build a custom (micro)framework with ZF2 Components (as building blocks)
Build a custom (micro)framework with ZF2 Components (as building blocks)Corley S.r.l.
 
망고100 보드로 놀아보자 15
망고100 보드로 놀아보자 15망고100 보드로 놀아보자 15
망고100 보드로 놀아보자 15종인 전
 
Love The Terminal
Love The TerminalLove The Terminal
Love The TerminalMike West
 

Tendances (20)

RabbitMQ
RabbitMQRabbitMQ
RabbitMQ
 
Dtrace и немного магии
Dtrace и немного магииDtrace и немного магии
Dtrace и немного магии
 
Drupal 8 in action, the route to the method
Drupal 8 in action, the route to the methodDrupal 8 in action, the route to the method
Drupal 8 in action, the route to the method
 
Creating windows store java script apps
Creating windows store java script appsCreating windows store java script apps
Creating windows store java script apps
 
A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1A Backbone.js Tutorial for the Impatient - Part 1
A Backbone.js Tutorial for the Impatient - Part 1
 
Gdc09 Minimissile
Gdc09 MinimissileGdc09 Minimissile
Gdc09 Minimissile
 
Barely Legal Xxx Perl Presentation
Barely Legal Xxx Perl PresentationBarely Legal Xxx Perl Presentation
Barely Legal Xxx Perl Presentation
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
 
YAPC::Brasil 2009, POE
YAPC::Brasil 2009, POEYAPC::Brasil 2009, POE
YAPC::Brasil 2009, POE
 
La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)
La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)
La Fonera 2.0 で遊ぶ~導入編~ 2009年9月のオフな集まり(第87 回)
 
Barcelona 2010 hidden_features
Barcelona 2010 hidden_featuresBarcelona 2010 hidden_features
Barcelona 2010 hidden_features
 
Openframworks x Mobile
Openframworks x MobileOpenframworks x Mobile
Openframworks x Mobile
 
ipython notebook poc memory forensics
ipython notebook poc memory forensicsipython notebook poc memory forensics
ipython notebook poc memory forensics
 
TDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on WindowsTDOH 南區 WorkShop 2016 Reversing on Windows
TDOH 南區 WorkShop 2016 Reversing on Windows
 
Attacking the macOS Kernel Graphics Driver
Attacking the macOS Kernel Graphics DriverAttacking the macOS Kernel Graphics Driver
Attacking the macOS Kernel Graphics Driver
 
穏やかにファイルを削除する
穏やかにファイルを削除する穏やかにファイルを削除する
穏やかにファイルを削除する
 
Build a custom (micro)framework with ZF2 Components (as building blocks)
Build a custom (micro)framework with ZF2 Components (as building blocks)Build a custom (micro)framework with ZF2 Components (as building blocks)
Build a custom (micro)framework with ZF2 Components (as building blocks)
 
망고100 보드로 놀아보자 15
망고100 보드로 놀아보자 15망고100 보드로 놀아보자 15
망고100 보드로 놀아보자 15
 
QQ
QQQQ
QQ
 
Love The Terminal
Love The TerminalLove The Terminal
Love The Terminal
 

En vedette

Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building AndroidDroidcon Berlin
 
Droidcon 2013 automotive quality dunca_czol_garmin
Droidcon 2013 automotive quality dunca_czol_garminDroidcon 2013 automotive quality dunca_czol_garmin
Droidcon 2013 automotive quality dunca_czol_garminDroidcon Berlin
 
Android industrial mobility
Android industrial mobility Android industrial mobility
Android industrial mobility Droidcon Berlin
 
Droidcon de 2014 google cast
Droidcon de 2014   google castDroidcon de 2014   google cast
Droidcon de 2014 google castDroidcon Berlin
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limitsDroidcon Berlin
 

En vedette (9)

Yes we can
Yes we canYes we can
Yes we can
 
Testing and Building Android
Testing and Building AndroidTesting and Building Android
Testing and Building Android
 
Droidcon 2013 automotive quality dunca_czol_garmin
Droidcon 2013 automotive quality dunca_czol_garminDroidcon 2013 automotive quality dunca_czol_garmin
Droidcon 2013 automotive quality dunca_czol_garmin
 
Raspberry Pi
Raspberry PiRaspberry Pi
Raspberry Pi
 
Details matter in ux
Details matter in uxDetails matter in ux
Details matter in ux
 
Android industrial mobility
Android industrial mobility Android industrial mobility
Android industrial mobility
 
Droidcon de 2014 google cast
Droidcon de 2014   google castDroidcon de 2014   google cast
Droidcon de 2014 google cast
 
Android programming -_pushing_the_limits
Android programming -_pushing_the_limitsAndroid programming -_pushing_the_limits
Android programming -_pushing_the_limits
 
crashing in style
crashing in stylecrashing in style
crashing in style
 

Similaire à Marko Gargenta_Remixing android

Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsHeroku
 
Nginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaNginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaTony Fabeen
 
Devinsampa nginx-scripting
Devinsampa nginx-scriptingDevinsampa nginx-scripting
Devinsampa nginx-scriptingTony Fabeen
 
20110114 Next Generation Sequencing Course
20110114 Next Generation Sequencing Course20110114 Next Generation Sequencing Course
20110114 Next Generation Sequencing CoursePierre Lindenbaum
 
Open Source Systems Performance
Open Source Systems PerformanceOpen Source Systems Performance
Open Source Systems PerformanceBrendan Gregg
 
Testing TYPO3 Applications
Testing TYPO3 ApplicationsTesting TYPO3 Applications
Testing TYPO3 ApplicationsAndré Wuttig
 
Advanced administration and problem determination
Advanced administration and problem determinationAdvanced administration and problem determination
Advanced administration and problem determinationsolarisyougood
 
Keep it simple web development stack
Keep it simple web development stackKeep it simple web development stack
Keep it simple web development stackEric Ahn
 
Study on Android Emulator
Study on Android EmulatorStudy on Android Emulator
Study on Android EmulatorSamael Wang
 
WordPress in 30 minutes
WordPress in 30 minutesWordPress in 30 minutes
WordPress in 30 minutesOwen Winkler
 
Docker Plugin For DevSecOps
Docker Plugin For DevSecOpsDocker Plugin For DevSecOps
Docker Plugin For DevSecOpsPichaya Morimoto
 
SANS @Night There's Gold in Them Thar Package Management Databases
SANS @Night There's Gold in Them Thar Package Management DatabasesSANS @Night There's Gold in Them Thar Package Management Databases
SANS @Night There's Gold in Them Thar Package Management DatabasesPhil Hagen
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scriptingCorrado Santoro
 
Enabling the Perforce Administrator via Mobile Device
Enabling the Perforce Administrator via Mobile Device  Enabling the Perforce Administrator via Mobile Device
Enabling the Perforce Administrator via Mobile Device Perforce
 
Ibm aix technical deep dive workshop advanced administration and problem dete...
Ibm aix technical deep dive workshop advanced administration and problem dete...Ibm aix technical deep dive workshop advanced administration and problem dete...
Ibm aix technical deep dive workshop advanced administration and problem dete...solarisyougood
 
Zend con 2016 - Asynchronous Prorgamming in PHP
Zend con 2016 - Asynchronous Prorgamming in PHPZend con 2016 - Asynchronous Prorgamming in PHP
Zend con 2016 - Asynchronous Prorgamming in PHPAdam Englander
 
php[world] 2016 - You Don’t Need Node.js - Async Programming in PHP
php[world] 2016 - You Don’t Need Node.js - Async Programming in PHPphp[world] 2016 - You Don’t Need Node.js - Async Programming in PHP
php[world] 2016 - You Don’t Need Node.js - Async Programming in PHPAdam Englander
 

Similaire à Marko Gargenta_Remixing android (20)

Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku Secrets
 
Nginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with LuaNginx Scripting - Extending Nginx Functionalities with Lua
Nginx Scripting - Extending Nginx Functionalities with Lua
 
Devinsampa nginx-scripting
Devinsampa nginx-scriptingDevinsampa nginx-scripting
Devinsampa nginx-scripting
 
20110114 Next Generation Sequencing Course
20110114 Next Generation Sequencing Course20110114 Next Generation Sequencing Course
20110114 Next Generation Sequencing Course
 
Open Source Systems Performance
Open Source Systems PerformanceOpen Source Systems Performance
Open Source Systems Performance
 
Testing TYPO3 Applications
Testing TYPO3 ApplicationsTesting TYPO3 Applications
Testing TYPO3 Applications
 
Advanced administration and problem determination
Advanced administration and problem determinationAdvanced administration and problem determination
Advanced administration and problem determination
 
Keep it simple web development stack
Keep it simple web development stackKeep it simple web development stack
Keep it simple web development stack
 
Study on Android Emulator
Study on Android EmulatorStudy on Android Emulator
Study on Android Emulator
 
Buildsystem.mk
Buildsystem.mkBuildsystem.mk
Buildsystem.mk
 
Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014
 
WordPress in 30 minutes
WordPress in 30 minutesWordPress in 30 minutes
WordPress in 30 minutes
 
Docker Plugin For DevSecOps
Docker Plugin For DevSecOpsDocker Plugin For DevSecOps
Docker Plugin For DevSecOps
 
Demystifying Maven
Demystifying MavenDemystifying Maven
Demystifying Maven
 
SANS @Night There's Gold in Them Thar Package Management Databases
SANS @Night There's Gold in Them Thar Package Management DatabasesSANS @Night There's Gold in Them Thar Package Management Databases
SANS @Night There's Gold in Them Thar Package Management Databases
 
Introduction to shell scripting
Introduction to shell scriptingIntroduction to shell scripting
Introduction to shell scripting
 
Enabling the Perforce Administrator via Mobile Device
Enabling the Perforce Administrator via Mobile Device  Enabling the Perforce Administrator via Mobile Device
Enabling the Perforce Administrator via Mobile Device
 
Ibm aix technical deep dive workshop advanced administration and problem dete...
Ibm aix technical deep dive workshop advanced administration and problem dete...Ibm aix technical deep dive workshop advanced administration and problem dete...
Ibm aix technical deep dive workshop advanced administration and problem dete...
 
Zend con 2016 - Asynchronous Prorgamming in PHP
Zend con 2016 - Asynchronous Prorgamming in PHPZend con 2016 - Asynchronous Prorgamming in PHP
Zend con 2016 - Asynchronous Prorgamming in PHP
 
php[world] 2016 - You Don’t Need Node.js - Async Programming in PHP
php[world] 2016 - You Don’t Need Node.js - Async Programming in PHPphp[world] 2016 - You Don’t Need Node.js - Async Programming in PHP
php[world] 2016 - You Don’t Need Node.js - Async Programming in PHP
 

Plus de Droidcon Berlin

From sensor data_to_android_and_back
From sensor data_to_android_and_backFrom sensor data_to_android_and_back
From sensor data_to_android_and_backDroidcon Berlin
 
new_age_graphics_android_x86
new_age_graphics_android_x86new_age_graphics_android_x86
new_age_graphics_android_x86Droidcon Berlin
 
Matchinguu droidcon presentation
Matchinguu droidcon presentationMatchinguu droidcon presentation
Matchinguu droidcon presentationDroidcon Berlin
 
Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3Droidcon Berlin
 
The artofcalabash peterkrauss
The artofcalabash peterkraussThe artofcalabash peterkrauss
The artofcalabash peterkraussDroidcon Berlin
 
Raesch, gries droidcon 2014
Raesch, gries   droidcon 2014Raesch, gries   droidcon 2014
Raesch, gries droidcon 2014Droidcon Berlin
 
Android open gl2_droidcon_2014
Android open gl2_droidcon_2014Android open gl2_droidcon_2014
Android open gl2_droidcon_2014Droidcon Berlin
 
20140508 quantified self droidcon
20140508 quantified self droidcon20140508 quantified self droidcon
20140508 quantified self droidconDroidcon Berlin
 
Tuning android for low ram devices
Tuning android for low ram devicesTuning android for low ram devices
Tuning android for low ram devicesDroidcon Berlin
 
Froyo to kit kat two years developing & maintaining deliradio
Froyo to kit kat   two years developing & maintaining deliradioFroyo to kit kat   two years developing & maintaining deliradio
Froyo to kit kat two years developing & maintaining deliradioDroidcon Berlin
 
Droidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicroDroidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicroDroidcon Berlin
 
Droidcon2013 commercialsuccess rannenberg
Droidcon2013 commercialsuccess rannenbergDroidcon2013 commercialsuccess rannenberg
Droidcon2013 commercialsuccess rannenbergDroidcon Berlin
 
Droidcon2013 bootstrap luedeke
Droidcon2013 bootstrap luedekeDroidcon2013 bootstrap luedeke
Droidcon2013 bootstrap luedekeDroidcon Berlin
 
Droidcon2013 app analytics_huber_1und1
Droidcon2013  app analytics_huber_1und1Droidcon2013  app analytics_huber_1und1
Droidcon2013 app analytics_huber_1und1Droidcon Berlin
 
Droidcon2013 facebook stewart
Droidcon2013 facebook stewartDroidcon2013 facebook stewart
Droidcon2013 facebook stewartDroidcon Berlin
 
Droidcon 2013 ui smartphones tam hanna
Droidcon 2013 ui smartphones tam hannaDroidcon 2013 ui smartphones tam hanna
Droidcon 2013 ui smartphones tam hannaDroidcon Berlin
 
Droidcon 2013 connected services burrel_ford
Droidcon 2013 connected services burrel_fordDroidcon 2013 connected services burrel_ford
Droidcon 2013 connected services burrel_fordDroidcon Berlin
 
Droidcon2013 topapps benninghaus_telekom
Droidcon2013 topapps benninghaus_telekomDroidcon2013 topapps benninghaus_telekom
Droidcon2013 topapps benninghaus_telekomDroidcon Berlin
 

Plus de Droidcon Berlin (20)

From sensor data_to_android_and_back
From sensor data_to_android_and_backFrom sensor data_to_android_and_back
From sensor data_to_android_and_back
 
droidparts
droidpartsdroidparts
droidparts
 
new_age_graphics_android_x86
new_age_graphics_android_x86new_age_graphics_android_x86
new_age_graphics_android_x86
 
5 tips of monetization
5 tips of monetization5 tips of monetization
5 tips of monetization
 
Matchinguu droidcon presentation
Matchinguu droidcon presentationMatchinguu droidcon presentation
Matchinguu droidcon presentation
 
Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3Cgm life sdk_droidcon_2014_v3
Cgm life sdk_droidcon_2014_v3
 
The artofcalabash peterkrauss
The artofcalabash peterkraussThe artofcalabash peterkrauss
The artofcalabash peterkrauss
 
Raesch, gries droidcon 2014
Raesch, gries   droidcon 2014Raesch, gries   droidcon 2014
Raesch, gries droidcon 2014
 
Android open gl2_droidcon_2014
Android open gl2_droidcon_2014Android open gl2_droidcon_2014
Android open gl2_droidcon_2014
 
20140508 quantified self droidcon
20140508 quantified self droidcon20140508 quantified self droidcon
20140508 quantified self droidcon
 
Tuning android for low ram devices
Tuning android for low ram devicesTuning android for low ram devices
Tuning android for low ram devices
 
Froyo to kit kat two years developing & maintaining deliradio
Froyo to kit kat   two years developing & maintaining deliradioFroyo to kit kat   two years developing & maintaining deliradio
Froyo to kit kat two years developing & maintaining deliradio
 
Droidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicroDroidcon2013 security genes_trendmicro
Droidcon2013 security genes_trendmicro
 
Droidcon2013 commercialsuccess rannenberg
Droidcon2013 commercialsuccess rannenbergDroidcon2013 commercialsuccess rannenberg
Droidcon2013 commercialsuccess rannenberg
 
Droidcon2013 bootstrap luedeke
Droidcon2013 bootstrap luedekeDroidcon2013 bootstrap luedeke
Droidcon2013 bootstrap luedeke
 
Droidcon2013 app analytics_huber_1und1
Droidcon2013  app analytics_huber_1und1Droidcon2013  app analytics_huber_1und1
Droidcon2013 app analytics_huber_1und1
 
Droidcon2013 facebook stewart
Droidcon2013 facebook stewartDroidcon2013 facebook stewart
Droidcon2013 facebook stewart
 
Droidcon 2013 ui smartphones tam hanna
Droidcon 2013 ui smartphones tam hannaDroidcon 2013 ui smartphones tam hanna
Droidcon 2013 ui smartphones tam hanna
 
Droidcon 2013 connected services burrel_ford
Droidcon 2013 connected services burrel_fordDroidcon 2013 connected services burrel_ford
Droidcon 2013 connected services burrel_ford
 
Droidcon2013 topapps benninghaus_telekom
Droidcon2013 topapps benninghaus_telekomDroidcon2013 topapps benninghaus_telekom
Droidcon2013 topapps benninghaus_telekom
 

Dernier

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 

Dernier (20)

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 

Marko Gargenta_Remixing android

  • 2. About Marko Gargenta 1.1. Entrepreneur, Author, Speaker Developer of Android Bootcamp for Marakana. Instructor for 1,000s of developers on Android at Qualcomm, Cisco, Motorola, Intel, DoD and other great orgs. Author of Learning Android published by O’Reilly. Speaker at OSCON (3x), ACM, IEEE, SDC, AnDevCon. Co-Founder of SFAndroid.org Co-Chair of Android Open conference: Android Open
  • 3. Why Remix Android?? 2.1. Vanilla is just not for everyone. r·i/ēmk/ emxrˈis: Vr: eb Mx(oehn)aan i smtig gi. Nu: on Adfeetvrino a oe oeaigsse poue i sc awy ifrn eso f n pn prtn ytm rdcd n uh a. Because Android is open Because custom is better Because we can
  • 4. Remix What?!? 3.1. Cosmetics aside, we’re focusing on major surgery to Android OS. Registering New Device: Marakana Alpha Makefile Plumbing Building Alpha Device Adding Custom Kernel Adding Native Libs Adding Native Daemon Exposing Libs via JNI Registering New System Service Extending Android Framework Adding New App Creating SDK Add-on
  • 5. Android Stack: The High Level Overview
  • 6. Android Stack: From Source to Device
  • 7. Android Stack: Layer Interaction
  • 10. Getting the AOSP Source Initialize the build environment Download the source Build the source Run on device
  • 11. Setting up the Directory Structure Self-contained directory structure: d v c / a a a a : Main eiemrkn/ placeholder for Marakana Alpha codebase. d v c / a a a a a p a Code eiemrkn/lh: that goes onto the device. d v c / a a a a a p a s k a d n Code eiemrkn/lh-d_do: that goes into the SDK add-on. d v c / a a a a a p a c m o : Shared eiemrkn/lh-omn codebase for device and SDK add-on.
  • 12. Registering Marakana Alpha 11.1. To future-proof your changes, don’t sprinkle other people’s code - keep it separate. Create v n o s t p s file: edreu.h device/marakana/alpha/vendorsetup.sh adlnhcmofl_aaaaapaeg d_uc_ob ulmrkn_lh-n Rebuild the lunch menu: $suc bideveu.h ore ul/nstps icuigdvc/aaaaapavnostps nldn eiemrkn/lh/edreu.h icuigdvc/oosiga/edreu.h nldn eiemt/tnryvnostps icuigdvc/oownryvnostps nldn eiemt/iga/edreu.h icuigdvc/asn/rsogvnostps nldn eiesmugcep4/edreu.h icuigdvc/asn/rsovnostps nldn eiesmugcep/edreu.h icuigdvc/asn/auovnostps nldn eiesmugmgr/edreu.h icuigdvc/asn/oovnostps nldn eiesmugtr/edreu.h icuigdvc/asn/uavnostps nldn eiesmugtn/edreu.h icuigdvc/ipnavnostps nldn eiet/ad/edreu.h icuigskbs_opeinabbs nldn d/ahcmlto/d.ah
  • 13. Makefile Plumbing 12.1. The make system is complex - copy from samples to get started. Create main product make file: dvc/aaaaapaAdodrdcsm eiemrkn/lh/nriPout.k POUTMKFLS: $LCLDR/ulapam RDC_AEIE = (OA_I)fl_lh.k Create the main build file: dvc/aaaaapafl_lh.k eiemrkn/lh/ulapam $cl ihrtpout $SCTRE_I)poutlnugssalm) (al nei-rdc, (R_AGTDR/rdc/agae_ml.k $cl ihrtpout $SCTRE_I)poutgnrcm) (al nei-rdc, (R_AGTDR/rdc/eei.k #Dsadihrtdvle adueoronised icr neie aus n s u w nta. POUTNM : fl_aaaaapa RDC_AE = ulmrkn_lh POUTDVC : apa RDC_EIE = lh POUTMDL: Fl Mrkn ApaIaefrEuao RDC_OE = ul aaaa lh mg o mltr icue$cl almkflsudr$LCLPT) nld (al l-aeie-ne,(OA_AH) Copy boiler-plate files from generic: $c bidtre/or/eei/orCni.k p ul/agtbadgnrcBadofgm dvc/aaaaapa. eiemrkn/lh/ $c bidtre/or/eei/nriBadm p ul/agtbadgnrcAdodor.k dvc/aaaaapa. eiemrkn/lh/ $c bidtre/or/eei/eiem p ul/agtbadgnrcdvc.k dvc/aaaaapa. eiemrkn/lh/ $c bidtre/or/eei/ytmpo p ul/agtbadgnrcsse.rp dvc/aaaaapa. eiemrkn/lh/
  • 14. Generating Platform Signing Keys 13.1. To pass CTS, we must generate our own platform signing keys Define our subject/issuer info: $SGE=/=SS=aionaLSnFacsoOMrkn INR"CU/TClfri/=a rnic/=aaaa Ic/UAdodC=nri Pafr Sge/miAdesadodmrkn.o" n.O=nri/NAdod ltom inrealdrs=nri@aaaacm Remove the existing keys (it does not hurt to back them up first!): $r bidtre/rdc/euiy*p m ul/agtpoutscrt/.* Generate the platform key: $eh |dvlpettosmk_e bidtre/rdc/euiypafr co eeomn/ol/aeky ul/agtpoutscrt/ltom "SGE" $INR cetn bidtre/rdc/euiypafr.k wt n pswr raig ul/agtpoutscrt/ltomp8 ih o asod Gnrtn RApiaeky 24 btln mdls eeaig S rvt e, 08 i og ouu ..........++ ..........+ .............................++ .............................+ ei 3(x) s 03 Generate the shared key: $eh |dvlpettosmk_e bidtre/rdc/euiysae co eeomn/ol/aeky ul/agtpoutscrt/hrd "SGE" $INR cetn bidtre/rdc/euiysae.k wt n pswr raig ul/agtpoutscrt/hrdp8 ih o asod Gnrtn RApiaeky 24 btln mdls eeaig S rvt e, 08 i og ouu ........................................ ........................................ .........++ .........+ ......++ ......+ ei 3(x) s 03 Generate the media key: $eh |dvlpettosmk_e bidtre/rdc/euiymda co eeomn/ol/aeky ul/agtpoutscrt/ei "SGE" $INR cetn bidtre/rdc/euiymdap8wt n pswr raig ul/agtpoutscrt/ei.k ih o asod Gnrtn RApiaeky 24 btln mdls eeaig S rvt e, 08 i og ouu
  • 15. ..........+ .........++ ..........++ ..........+ ei 3(x) s 03 Generate the testkey key: $eh |dvlpettosmk_e bidtre/rdc/euiytsky co eeomn/ol/aeky ul/agtpoutscrt/ete "SGE" $INR cetn bidtre/rdc/euiytskyp8wt n pswr raig ul/agtpoutscrt/ete.k ih o asod Gnrtn RApiaeky 24 btln mdls eeaig S rvt e, 08 i og ouu ..........++ ..........+ ........................++ ........................+ ei 3(x) s 03 Verify that our keys have been created: $l - bidtre/rdc/euiy*p s 1 ul/agtpoutscrt/.* bidtre/rdc/euiymdap8 ul/agtpoutscrt/ei.k bidtre/rdc/euiymdax0.e ul/agtpoutscrt/ei.59pm bidtre/rdc/euiypafr.k ul/agtpoutscrt/ltomp8 bidtre/rdc/euiypafr.59pm ul/agtpoutscrt/ltomx0.e bidtre/rdc/euiysae.k ul/agtpoutscrt/hrdp8 bidtre/rdc/euiysae.59pm ul/agtpoutscrt/hrdx0.e bidtre/rdc/euiytskyp8 ul/agtpoutscrt/ete.k bidtre/rdc/euiytskyx0.e ul/agtpoutscrt/ete.59pm Check that our specific subject/issuer has been used: $oeslx0 -ou -ujc -sur-n pns 59 not sbet ise i bidtre/rdc/euiypafr.59pm ul/agtpoutscrt/ltomx0.e sbet /=SS=aionaLSnFacsoOMrkn ujc= CU/TClfri/=a rnic/=aaaa Ic/UAdodC=nri Pafr Sge/miAdesadodmrkn.o n.O=nri/NAdod ltom inrealdrs=nri@aaaacm ise=/=SS=aionaLSnFacsoOMrkn sur CU/TClfri/=a rnic/=aaaa Ic/UAdodC=nri Pafr Sge/miAdesadodmrkn.o n.O=nri/NAdod ltom inrealdrs=nri@aaaacm The b i d t r e / r d c / e u i y . k files are the private keys (. 5 9 p mare the ul/agtpoutscrt/p8 x0.e certificates) - keep them safe and secure - especially since we did not encrypt them!
  • 16. Building Alpha Device 14.1. Let’s build Alpha - so far a vanilla Android. Register the device with build system $suc bideveu.h ore ul/nstps icuigdvc/aaaaapavnostps nldn eiemrkn/lh/edreu.h … Choose lunch menu $lnhfl_aaaaapaeg uc ulmrkn_lh-n ====================== ====================== PAFR_ESO_OEAERL LTOMVRINCDNM=E PAFR_ESO=.. LTOMVRIN403 TRE_RDC=ulmrkn_lh AGTPOUTfl_aaaaapa TRE_UL_AIN=n AGTBIDVRATeg TRE_UL_YErlae AGTBIDTP=ees TRE_UL_PS AGTBIDAP= TRE_RHam AGTAC=r TRE_RHVRATam7a AGTAC_AIN=rv- HS_RHx6 OTAC=8 HS_Slnx OTO=iu HS_UL_YErlae OTBIDTP=ees BIDI=M7K UL_DIL4 ====================== ====================== Compile the device $epr UECAH= xot S_CCE1 $mk -1 ae j0 … Isaldfl ls:ottre/rdc/lh/ntle-ie.x ntle ie it u/agtpoutapaisaldflstt Tre sse f iae agt ytm s mg: ottre/rdc/lh/b/AKGN/ytmmg_nemdae/ytmig u/agtpoutapaojPCAIGsseiaeitreitssse.m Isalsse f iae ottre/rdc/lh/ytmig ntl ytm s mg: u/agtpoutapasse.m Run new device
  • 17. $euao -v Apa mltr ad lh -ytmottre/rdc/lh/ytmig sse u/agtpoutapasse.m -ads ottre/rdc/lh/ads.m rmik u/agtpoutaparmikig Verify build number Look for the Build number property in System Settings→About phone screen.
  • 19. Android Stack - Kernel
  • 20. Marakana Alpha Custom Kernel Steps 17.1. Not everyone is going to need a custom kernel - but we can have it. Download and build kernel source $mdr~kre/ ki /enl $c ~kre/ d /enl $gtcoehts/adodgolsuc.o/enlglfs.i i ln tp:/nri.ogeorecmkre/odihgt $c glfs/ d odih $gtbac - i rnh a $gtceku - rmtsoii/nri-odih262 i hcot t eoe/rgnadodglfs-..9 $mk glfs_rv_ecni AC=r ae odiham7dfofg RHam $mk mncni ae euofg $mk -1 AC=r ae j0 RHam COSCMIE/OPpeul/iu-8/olhi/r-ai443bnameb- RS_OPL=AS/rbitlnxx6tocanameb-../i/r-ai Copy kernel into our device folder c /aht/enlac/r/otzmg dvc/aaaaapacmo/enl p pt/okre/rhambo/Iae eiemrkn/lh-omnkre Enable our custom kernel in BoardConfig.mk device/marakana/alpha/BoardConfig.mk … TRE_OKRE : fle AGTN_ENL = as … Create a alpha.mk makefile for our common components device/marakana/alpha-common/alpha.mk M_AH: $LCLPT)./lh-omn YPT = (OA_AH/.apacmo icue$cl alsbi-aeie) nld (al l-udrmkfls #Eal orcso kre nbe u utm enl LCLKRE : $M_AH/enl OA_ENL = (YPT)kre POUTCP_IE + $LCLKRE)kre RDC_OYFLS = (OA_ENL:enl
  • 21. Include a p a m in main makefile f l _ l h . k lh.k ulapam device/marakana/alpha/full_alpha.mk … icuedvc/aaaaapacmo/lh.k nld eiemrkn/lh-omnapam Rebuild the device and restart the device with: $euao -v Apa mltr ad lh -enlottre/rdc/lh/enl kre u/agtpoutapakre -ytmottre/rdc/lh/ytmig sse u/agtpoutapasse.m -ads ottre/rdc/lh/ads.m rmik u/agtpoutaparmikig Verify it worked $abselct/rcvrin d hl a po/eso Lnxvrin262-aaaaeapeg09f (tdn@bnu (c vrin iu eso ..9mrkn-xml-bd3b suetuut) gc eso 440(C))# TeJl1 2:40 PT21 .. GC 5 u u 9 22:3 D 01
  • 23. Android Stack - Native Libraries
  • 24. Marakana Alpha Custom Lib Steps 20.1. From drivers to open source libraries, you likely need custom libraries. Create home for shared libraries $mdrdvc/aaaaapacmo/i/ ki eiemrkn/lh-omnlb Create shared libs makefile device/marakana/alpha-common/lib/Android.mk icue$cl alsbi-aeie) nld (al l-udrmkfls Create folder for l b r n o library imklg mdrdvc/aaaaapacmo/i/imklg ki eiemrkn/lh-omnlblbrno Create l b r n o . header file imklgh device/marakana/alpha-common/lib/libmrknlog/libmrknlog.h .. . etr itmk_ls_o(; xen n rnfuhlg) etr itmk_e_oa_o_ie) xen n rngtttllgsz(; etr itmk_e_sdlgsz(; xen n rngtue_o_ie) .. . Implement the library l b r n o . using i c l )to talk to kernel imklgc ot( device/marakana/alpha-common/lib/libmrknlog/libmrknlog.c Create the A d o d m makefile nri.k device/marakana/alpha-common/lib/libmrknlog/Android.mk LCLPT: $cl m-i) OA_AH= (al ydr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLSCFLS: lbrno. OA_R_IE = imklgc LCLSAE_IRRE : lbuislbtl lb OA_HRDLBAIS = ictl iuis ic LCLMDL : lbrno OA_OUE = imklg LCLPEIKMDL : fle OA_RLN_OUE = as
  • 25. icue$BIDSAE_IRR) nld (UL_HRDLBAY Register the library with a p a m lh.k device/marakana/alpha-common/alpha.mk … POUTPCAE + lbrno RDC_AKGS = imklg Test l b r n o . obuilds imklgs $mk -1 lbrno ae j0 imklg … tre SaeLb lbrno agt hrdi: imklg (u/agtpoutgnrcojSAE_IRRE/imklgitreitsLNE ottre/rdc/eei/b/HRDLBAISlbrno_nemdae/IKD /imklgs) lbrno.o tre Nnpeikd lbrno agt o-rlne: imklg (u/agtpoutgnrcsmossse/i/imklgs) ottre/rdc/eei/ybl/ytmlblbrno.o tre Srp lbrno (u/agtpoutgnrcojlblbrno.o agt ti: imklg ottre/rdc/eei/b/i/imklgs) Isal ottre/rdc/eei/ytmlblbrno.o ntl: u/agtpoutgnrcsse/i/imklgs
  • 27. Android Stack - Native Daemons
  • 28. Marakana Alpha Native Daemon Steps 23.1. It’s nice to have a native daemon look over your shoulder. Create folder for binaries $mdrdvc/aaaaapacmo/i ki eiemrkn/lh-omnbn $mdrdvc/aaaaapacmo/i/rnod ki eiemrkn/lh-omnbnmklg Create A d o d m for binaries nri.k device/marakana/alpha-common/bin/Android.mk icue$cl alsbi-aeie) nld (al l-udrmkfls Create daemon source file m k l g . rnodc device/marakana/alpha-common/bin/mrknlogd/mrknlogd.c Create A d o d m file nri.k device/marakana/alpha-common/bin/mrknlogd/Android.mk LCLPT: $cl m-i) OA_AH= (al ydr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLSCFLS: mklg. OA_R_IE = rnodc LCLCICUE : $LCLPT)./.lblbrno/ OA__NLDS = (OA_AH/../i/imklg LCLSAE_IRRE : lbrno lb lbuislbtl OA_HRDLBAIS = imklg ic ictl iuis LCLMDL : mklg OA_OUE = rnod icue$BIDEEUAL) nld (UL_XCTBE Register m k l g with a p a m file rnod lh.k device/marakana/alpha-common/alpha.mk … POUTPCAE + mklg RDC_AKGS = rnod Create custom i i . cby using the default one ntr $c sse/oerodrii.cdvc/aaaaapacmo/ p ytmcr/oti/ntr eiemrkn/lh-omn.
  • 29. Register m k l g with i i . c rnod ntr device/marakana/alpha-common/init.rc … #Mrkn' cso lgfuhn deo aaaas utm o-lsig amn sriemklg /ytmbnmklg 6 evc rnod sse/i/rnod 0 ue sse sr ytm goplg ru o oeht nso Include i i . cin our a p a m device build ntr lh.k device/marakana/alpha-common/alpha.mk … #Cp orii.cfl oe teeitn oe(ic or cnan eta oy u ntr ie vr h xsig n sne us otis xr cags hne) POUTCP_IE + $M_AH/ntr:otii.c RDC_OYFLS = (YPT)ii.cro/ntr Build the device $mk -1 ae j0 … Isalsse f iae ottre/rdc/lh/ytmig ntl ytm s mg: u/agtpoutapasse.m Isaldfl ls:ottre/rdc/lh/ntle-ie.x ntle ie it u/agtpoutapaisaldflstt Verify it all works by restarting the device #(esatteeuao r)tr h mltr $euao -enlottre/rdc/lh/enl& mltr kre u/agtpoutapakre #wi frteeuao t fns at o h mltr o iih #cekotordeo hc u u amn $absell - /ytmbnmklg d hl s l sse/i/rnod -wrx- ro rx-rx ot sel hl 50 21-71 0:5mklg 58 010-3 22 rnod #cekta i rn hc ht t us $abselp |ge mklg d hl s rp rnod sse ytm 37 1 14 04 22 9 c02f adba S/ytmbnmklg 0508 f0dc sse/i/rnod $ablga |ge MK d oct rp RN IMK LgDeo( /RN o amn 3) Fuhdlg(,6 o 656bts.Wiig6 scns 7: lse o 1 0 f 53 ye) atn 0 eod bfr tenx fuh eoe h et ls. IMK LgDeo( /RN o amn 3) Fuhdlg(,346o 656bts.Wiig6 7: lse o 2 40 f 53 ye) atn 0 scnsbfr tenx fuh eod eoe h et ls. IMK LgDeo( /RN o amn 3) Fuhdlg(,22o 656bts.Wiig6 7: lse o 3 3 f 53 ye) atn 0
  • 30. scnsbfr tenx fuh eod eoe h et ls. ^C $ablga - d oct g /e/o/an rn bfe i 6K (K cnue) mxetyi 49b mx dvlgmi: ig ufr s 4b 0b osmd, a nr s 06, a pyodi 47b ala s 06 #go :) od -
  • 32. Wrapping Native Lib with JNI Steps 25.1. The glue for Java to talk to C and back. Create directory structure for our JNI wrapper $mdrdvc/aaaaapacmo/rmwr ki eiemrkn/lh-omnfaeok $mdrdvc/aaaaapacmo/rmwr/rno_n ki eiemrkn/lh-omnfaeokmklgji $mdrdvc/aaaaapacmo/rmwr/rno_n/aa ki eiemrkn/lh-omnfaeokmklgjijv $mdrdvc/aaaaapacmo/rmwr/rno_n/n ki eiemrkn/lh-omnfaeokmklgjiji Create top level A d o d m files nri.k device/marakana/alpha-common/framework/Android.mk icue$cl alsbi-aeie) nld (al l-udrmkfls device/marakana/alpha-common/framework/mrknlog_jni/Android.mk icue$cl alsbi-aeie) nld (al l-udrmkfls Create Java Library L b o . a a iLgjv dvc/aaaaapacmo/ eiemrkn/lh-omn faeokmklgjijv/o/aaaaadodlblgLbo.aa rmwr/rno_n/aacmmrkn/nri/i/o/iLgjv Create test M i . a a anjv dvc/aaaaapacmo/ eiemrkn/lh-omn faeokmklgjijv/o/aaaaadodlblgMi.aa rmwr/rno_n/aacmmrkn/nri/i/o/anjv Create custom permission device/marakana/alpha- common/framework/mrknlog_jni/java/com.marakana.android.lib.log.xml <xlvrin"."ecdn=uf8? ?m eso=10 noig"t-"> <emsin> prisos <irr nm=cmmrkn.nri.i.o" lbay ae"o.aaaaadodlblg fl=/ytmfaeokcmmrkn.nri.i.o.a"> ie"sse/rmwr/o.aaaaadodlblgjr/ <prisos /emsin> Create A d o d m file for our JNI wrapper nri.k
  • 33. device/marakana/alpha-common/framework/mrknlog_jni/java/Android.mk LCLPT : $cl m-i) OA_AH = (al ydr #Bidtelbay ul h irr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLMDL : cmmrkn.nri.i.o OA_OUE = o.aaaaadodlblg LCLSCFLS: $cl aljv-ie-ne,) OA_R_IE = (al l-aaflsudr. LCLJV_IRRE : cr OA_AALBAIS = oe LCLN_TNADLBAIS: tu OA_OSADR_IRRE = re icue$BIDJV_IRR) nld (UL_AALBAY #Bidtedcmnain ul h ouetto icue$CERVR) nld (LA_AS LCLSCFLS: $cl alsbi-aafls $cl alsbi-tlfls OA_R_IE = (al l-udrjv-ie) (al l-udrhm-ie) LCLMDL: cmmrkn.nri.i.o_o OA_OUE= o.aaaaadodlblgdc LCLDODO_PIN : cmmrkn.nri.i.o OA_RIDCOTOS = o.aaaaadodlblg LCLMDL_LS : JV_IRRE OA_OUECAS = AALBAIS LCLDODO_S_TNADDCE : tu OA_RIDCUESADR_OLT = re icue$BIDDODO) nld (UL_RIDC #Cp cmmrkn.nri.i.o.m t /ytmecprisos oy o.aaaaadodlblgxl o sse/t/emsin/ icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLMDL : cmmrkn.nri.i.o.m OA_OUE = o.aaaaadodlblgxl LCLMDL_LS : EC OA_OUECAS = T LCLMDL_AH: $TRE_U_T)prisos OA_OUEPT = (AGTOTEC/emsin LCLSCFLS: $LCLMDL) OA_R_IE = (OA_OUE icue$BIDPEUL) nld (UL_RBIT Create the JNI header file $jvh-n aa ji - dvc/aaaaapacmo/rmwr/rno_n/n/ d eiemrkn/lh-omnfaeokmklgjiji -lspt casah ottre/omnojJV_IRRE/o.aaaaadodlblgitreits u/agtcmo/b/AALBAIScmmrkn.nri.i.o_nemdae/ cassjr lse.a cmmrkn.nri.i.o.iLg o.aaaaadodlblgLbo Check that you got the right JNI header device/marakana/alpha- common/framework/mrknlog_jni/jni/com_marakana_android_lib_log_LibLog.h …
  • 34. JIXOTvi JIALJv_o_aaaaadodlblgLbo_lsLg NEPR od NCL aacmmrkn_nri_i_o_iLgfuho (NEv,jls) JIn* cas; … JIXOTjn JIALJv_o_aaaaadodlblgLbo_eTtloSz NEPR it NCL aacmmrkn_nri_i_o_iLggtoaLgie (NEv,jls) JIn* cas; … JIXOTjn JIALJv_o_aaaaadodlblgLbo_eUeLgie NEPR it NCL aacmmrkn_nri_i_o_iLggtsdoSz (NEv,jls) JIn* cas; … Implement the header file, wrapping calls to our l b r n o shared library imklg dvc/aaaaapacmo/ eiemrkn/lh-omn faeokmklgjijicmmrkn_nri_i_o_iLgc rmwr/rno_n/n/o_aaaaadodlblgLbo. Create A d o d m file nri.k device/marakana/alpha-common/framework/mrknlog_jni/jni/Android.mk LCLPT: $cl m-i) OA_AH= (al ydr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLSCFLS: cmmrkn_nri_i_o_iLgc OA_R_IE = o_aaaaadodlblgLbo. LCLCICUE + $JIHICUE $LCLPT)./../i/imklg OA__NLDS = (N__NLD) (OA_AH/../.lblbrno LCLSAE_IRRE : lbrno OA_HRDLBAIS = imklg LCLMDL : lbrno_n OA_OUE = imklgji LCLPEIKMDL : fle OA_RLN_OUE = as icue$BIDSAE_IRR) nld (UL_HRDLBAY Register this module with a p a m file lh.k device/marakana/alpha-common/alpha.mk … POUTPCAE + RDC_AKGS = cmmrkn.nri.i.o o.aaaaadodlblg cmmrkn.nri.i.o.m o.aaaaadodlblgxl lbrno_n imklgji Build the device $mk -1 ae j0 … tre Peul:cmmrkn.nri.i.o.m agt rbit o.aaaaadodlblgxl (u/agtpoutapaojECcmmrkn.nri.i.o.m_nemdae ottre/rdc/lh/b/T/o.aaaaadodlblgxlitreits /o.aaaaadodlblgxl cmmrkn.nri.i.o.m)
  • 35. … Isal ottre/rdc/lh/ytmlblbrno_n.o ntl: u/agtpoutapasse/i/imklgjis … Isalsse f iae ottre/rdc/lh/ytmig ntl ytm s mg: u/agtpoutapasse.m Isaldfl ls:ottre/rdc/lh/ntle-ie.x ntle ie it u/agtpoutapaisaldflstt Verify it works via our M i . a n )test code anmi( #(esatteeuao r)tr h mltr $euao -enlottre/rdc/lh/enl& mltr kre u/agtpoutapakre #wi frteeuao t fns at o h mltr o iih #cekotorJv lbay hc u u aa irr $absell - /ytmfaeokcmmrkn.nri.i.o.a d hl s l sse/rmwr/o.aaaaadodlblgjr -wr-- ro r--r- ot ro ot 17 21-71 0:1 41 010-1 00 cmmrkn.nri.i.o.a o.aaaaadodlblgjr #cekotorJv lbayrgsr fl hc u u aa irr eity ie $absell - /ytmecprisoscmmrkn.nri.i.o.m d hl s l sse/t/emsin/o.aaaaadodlblgxl -wr-- ro r--r- ot ro ot 1921-71 2:7 7 010-0 35 cmmrkn.nri.i.o.m o.aaaaadodlblgxl #cekotorJIsae lbay hc u u N hrd irr $absell - /ytmlblbrno_n.o d hl s l sse/i/imklgjis -wr-- ro r--r- ot ro ot 59 21-71 0:1lbrno_n.o 26 010-1 14 imklgjis #ceki oruiiyi digwa i i spoe t hc f u tlt s on ht t s upsd o $ablga - d oct g /e/o/an rn bfe i 6K (3bcnue) mxetyi 49b mx dvlgmi: ig ufr s 4b 3K osmd, a nr s 06, a pyodi 47b ala s 06 #nwrnorJv lbaysMi.an)b drcl ivkn teDli V o u u aa irr' anmi( y iety noig h avk M $abseldliv -p/ytmfaeokcmmrkn.nri.i.o.a d hl avkm c sse/rmwr/o.aaaaadodlblgjr cmmrkn.nri.i.o.an o.aaaaadodlblgMi Fuhdlg Peiul i wscnuig336o 656bts lse o. rvosy t a osmn 44 f 53 ye #cekaan hc gi $ablga - d oct g /e/o/an rn bfe i 6K (K cnue) mxetyi 49b mx dvlgmi: ig ufr s 4b 0b osmd, a nr s 06, a pyodi 47b ala s 06 $abseldliv -p/ytmfaeokcmmrkn.nri.i.o.a d hl avkm c sse/rmwr/o.aaaaadodlblgjr cmmrkn.nri.i.o.an o.aaaaadodlblgMi Fuhdlg Peiul i wscnuig27o 656bts lse o. rvosy t a osmn 1 f 53 ye #go :) od -
  • 37. Android Stack - Framework
  • 38. Marakana Alpha Service Interface Steps 28.1. Because other apps are going to want to use our service as well. Create directory structure for our m k l g e v c rnosrie $mdr- dvc/aaaaapa ki p eiemrkn/lh- cmo/rmwr/rnosriecmmrkn/nri/evc/o omnfaeokmklgevc/o/aaaaadodsrielg Create the interface L g e v c . i lfile oSriead dvc/aaaaapacmo/ eiemrkn/lh-omn faeokmklgevc/o/aaaaadodsrielgIoSriead rmwr/rnosriecmmrkn/nri/evc/o/Lgevc.il Create L g a a e . a aproxy to our bound service oMngrjv dvc/aaaaapacmo/ eiemrkn/lh-omn faeokmklgevc/o/aaaaadodsrielgLgaae.aa rmwr/rnosriecmmrkn/nri/evc/o/oMngrjv Expose L g a a e . a aas a Java library oMngrjv device/marakana/alpha- common/framework/mrknlogservice/com.marakana.android.service.log.xml <xlvrin"."ecdn=uf8? ?m eso=10 noig"t-"> <emsin> prisos <irr nm=cmmrkn.nri.evc.o" lbay ae"o.aaaaadodsrielg fl=/ytmfaeokcmmrkn.nri.evc.o.a"> ie"sse/rmwr/o.aaaaadodsrielgjr/ <prisos /emsin> Create A d o d m file for m k l g e v c nri.k rnosrie device/marakana/alpha-common/framework/mrknlogservice/Android.mk LCLPT : $cl m-i) OA_AH = (al ydr #Bidtelbay ul h irr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLMDL : cmmrkn.nri.evc.o OA_OUE = o.aaaaadodsrielg LCLSCFLS: $cl aljv-ie-ne,) OA_R_IE = (al l-aaflsudr. LCLSCFLS+ cmmrkn/nri/evc/o/Lgevc.il OA_R_IE = o/aaaaadodsrielgIoSriead LCLJV_TTCLBAIS: adodcmo OA_AASAI_IRRE = nri-omn LCLJV_IRRE : cr OA_AALBAIS = oe icue$BIDJV_IRR) nld (UL_AALBAY
  • 39. #Bidtedcmnain ul h ouetto icue$CERVR) nld (LA_AS LCLSCFLS: $cl alsbi-aafls $cl alsbi-tlfls OA_R_IE = (al l-udrjv-ie) (al l-udrhm-ie) LCLMDL: cmmrkn.nri.evc.o_o OA_OUE= o.aaaaadodsrielgdc LCLDODO_PIN : cmmrkn.nri.evc.o OA_RIDCOTOS = o.aaaaadodsrielg LCLMDL_LS : JV_IRRE OA_OUECAS = AALBAIS LCLDODO_S_TNADDCE : tu OA_RIDCUESADR_OLT = re icue$BIDDODO) nld (UL_RIDC #Cp cmmrkn.nri.evc.o.m t /ytmecprisos oy o.aaaaadodsrielgxl o sse/t/emsin/ icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLMDL : cmmrkn.nri.evc.o.m OA_OUE = o.aaaaadodsrielgxl LCLMDL_LS : EC OA_OUECAS = T LCLMDL_AH: $TRE_U_T)prisos OA_OUEPT = (AGTOTEC/emsin LCLSCFLS: $LCLMDL) OA_R_IE = (OA_OUE icue$BIDPEUL) nld (UL_RBIT Add it to a p a m file lh.k device/marakana/alpha-common/alpha.mk … POUTPCAE + RDC_AKGS = cmmrkn.nri.evc.o o.aaaaadodsrielg cmmrkn.nri.evc.o.m o.aaaaadodsrielgxl Verify that the device builds okay $mk -1 cmmrkn.nri.evc.o ae j0 o.aaaaadodsrielg cmmrkn.nri.evc.o.m o.aaaaadodsrielgxl … tre Peul:cmmrkn.nri.evc.o.m agt rbit o.aaaaadodsrielgxl … Isal ntl: ottre/rdc/lh/ytmecprisoscmmrkn.nri.evc.o u/agtpoutapasse/t/emsin/o.aaaaadodsrielg .m xl … Ad:cmmrkn.nri.evc.o < dvc/aaaaapa il o.aaaaadodsrielg = eiemrkn/lh- cmo/rmwr/rnosriecmmrkn/nri/evc/o/Lgevc.i omnfaeokmklgevc/o/aaaaadodsrielgIoSriead l … tre Jr cmmrkn.nri.evc.o agt a: o.aaaaadodsrielg … Isal ntl:
  • 42. Android Stack - Services
  • 43. Marakana Alpha Service App Steps 31.1. Register the service with the Service Manager so others can use it. Create the directory structure for our code $mdrdvc/aaaaapacmo/p ki eiemrkn/lh-omnap Create main A d o d m file nri.k device/marakana/alpha-common/app/Android.mk icue$cl alsbi-aeie) nld (al l-udrmkfls Create A d o d a i e t x lfile for our server app nriMnfs.m dvc/aaaaapacmo/p/rnoSrieAdodaietxl eiemrkn/lh-omnapMkLgevc/nriMnfs.m Provide I o S r i e m l j v implementation for our service LgevcIp.aa dvc/aaaaapacmo/ eiemrkn/lh-omn apMkLgevc/r/o/aaaaadodlgevc/LgevcIp.aa p/rnoSriesccmmrkn/nri/osrieIoSriemljv Register L g e v c A pwith S r i e a a e oSriep evcMngr dvc/aaaaapa eiemrkn/ lh- cmo/p/rnoSriesccmmrkn/nri/osrieLgevcApjv omnapMkLgevc/r/o/aaaaadodlgevc/oSriep.aa Create the A d o d m file nri.k device/marakana/alpha-common/app/MrknLogService/Android.mk LCLPT: $cl m-i) OA_AH= (al ydr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLSCFLS: $cl aljv-ie-ne,r) OA_R_IE = (al l-aaflsudrsc LCLRQIE_OUE : OA_EURDMDLS = cmmrkn.nri.evc.o o.aaaaadodsrielg cmmrkn.nri.i.o o.aaaaadodlblg LCLJV_IRRE : OA_AALBAIS = cmmrkn.nri.evc.o o.aaaaadodsrielg cmmrkn.nri.i.o o.aaaaadodlblg cr oe faeok rmwr LCLPCAENM : MkLgevc OA_AKG_AE = rnoSrie LCLSKVRIN: cret OA_D_ESO = urn
  • 44. LCLPOUR_NBE : dsbe OA_RGADEALD = iald LCLCRIIAE: pafr OA_ETFCT = ltom icue$BIDPCAE nld (UL_AKG) Register our service app with a p a m file lh.k device/marakana/alpha-common/alpha.mk … POUTPCAE + MkLgevc RDC_AKGS = rnoSrie Build the device $mk -1 ae j0 … Isal ottre/rdc/lh/ytmapMkLgevc.p ntl: u/agtpoutapasse/p/rnoSrieak … Isalsse f iae ottre/rdc/lh/ytmig ntl ytm s mg: u/agtpoutapasse.m Isaldfl ls:ottre/rdc/lh/ntle-ie.x ntle ie it u/agtpoutapaisaldflstt
  • 47. Marakana Alpha Client App Steps 34.1. A demo client app - to make sure it all works. Create directory structure for our M k L g e v c C i n app rnoSrielet $mdrdvc/aaaaapaapMkLgevcCin ki eiemrkn/lh/p/rnoSrielet $mdrdvc/aaaaapaapMkLgevcCin/e ki eiemrkn/lh/p/rnoSrieletrs $mdrdvc/aaaaapaapMkLgevcCin/e/aus ki eiemrkn/lh/p/rnoSrieletrsvle $mdrdvc/aaaaapaapMkLgevcCin/e/aot ki eiemrkn/lh/p/rnoSrieletrslyu $mdrdvc/aaaaapaapMkLgevcCin/r ki eiemrkn/lh/p/rnoSrieletsc $mdr- ki p dvc/aaaaapaapMkLgevcCin/r/o/aaaaadodlgev eiemrkn/lh/p/rnoSrieletsccmmrkn/nri/osri ccin elet Create L g c i i y j v oAtvt.aa dvc/aaaaapa eiemrkn/lh/ apMkLgevcCin/r/o/aaaaadodlgevccin/oAtvt.a p/rnoSrieletsccmmrkn/nri/osrieletLgciiyj Create A d o d a i e t x lfile nriMnfs.m dvc/aaaaapaapMkLgevcCin/nriMnfs.m eiemrkn/lh/p/rnoSrieletAdodaietxl Create A d o d m file nri.k device/marakana/alpha/app/MrknLogServiceClient/Android.mk LCLPT: $cl m-i) OA_AH= (al ydr icue$CERVR) nld (LA_AS LCLMDL_AS: otoa OA_OUETG = pinl LCLSCFLS: $cl aljv-ie-ne,r) OA_R_IE = (al l-aaflsudrsc LCLJV_IRRE : cmmrkn.nri.evc.o OA_AALBAIS = o.aaaaadodsrielg LCLPCAENM : MkLgevcCin OA_AKG_AE = rnoSrielet LCLSKVRIN: cret OA_D_ESO = urn LCLPOUR_NBE : dsbe OA_RGADEALD = iald icue$BIDPCAE nld (UL_AKG) Register M k L g e v c C i n with main makefile f l _ l h . m rnoSrielet ulapaxl device/marakana/alpha/full_alpha.mk … POUTPCAE + MkLgevcCin RDC_AKGS = rnoSrielet
  • 48. Build entire device $mk -1 ae j0 … Isalsse f iae ottre/rdc/lh/ytmig ntl ytm s mg: u/agtpoutapasse.m Isaldfl ls:ottre/rdc/lh/ntle-ie.x ntle ie it u/agtpoutapaisaldflstt Verify it all works Run the MrknLogServiceClient app and try to flush the log.
  • 49. Marakana Alpha SDK Add-On 35.1. Other developers may want to develop for our cool Alpha device as well. Create directory structure $mdrdvc/aaaaapaskadnsis ki eiemrkn/lh-d_do/kn $c - skeuao/kn/VAdvc/aaaaapa p r d/mltrsisHG eiemrkn/lh- skadnsisMkHgMp d_do/kn/rnvadi Create portrait layout background We took a standard one and just added our logo. Create landscape layout background Same as with the previous image, just add a logo.
  • 50. Define h r w r . n file adaeii device/marakana/alpha-sdk_addon/hardware.ini #Cso hrwr otosfrteado. utm adae pin o h d-n #Poete dfndhr ipc alADtreigti ado. rpris eie ee mat l V agtn hs d-n #Ec si cnas oerd toevle wt isonhrwr.n fl. ah kn a lo vrie hs aus ih t w adaeii ie v.epie=2 mhaSz 4 Create SDK Add-on m n f s . n file aietii device/marakana/alpha-sdk_addon/manifest.ini nm=lh AdO aeApa d-n vno=aaaa edrMrkn dsrpinMrkn ApaAdo ecito=aaaa lh d-n ai1 p=0 rvso= eiin1 lbaiscmmrkn.nri.i.o;o.aaaaadodsrielg irre=o.aaaaadodlblgcmmrkn.nri.evc.o cmmrkn.nri.i.o=o.aaaaadodlblgjrMrkn Lg o.aaaaadodlblgcmmrkn.nri.i.o.a;aaaa o Lbay irr cmmrkn.nri.evc.o=o.aaaaadodsrielgjrMrkn o.aaaaadodsrielgcmmrkn.nri.evc.o.a;aaaa LgSrie o evc si=rnvadi knMkHgMp
  • 51. Define classes to be included device/marakana/alpha-sdk_addon/alpha_sdk_addon_stub_defs.txt +o.aaaaadodlblg* cmmrkn.nri.i.o. -o.aaaaadodlblgMi cmmrkn.nri.i.o.an +o.aaaaadodsrielg* cmmrkn.nri.evc.o. Create main a p a s k a d n m makefile for Alpha SDK Add-on lh_d_do.k device/marakana/alpha-sdk_addon/alpha_sdk_addon.mk #Icuetecmo suf nld h omn tf icuedvc/aaaaapacmo/lh.k nld eiemrkn/lh-omnapam #Ls o mdlst icuei teteado sse iae it f oue o nld n h h d-n ytm mg POUTPCAE + RDC_AKGS = cmmrkn.nri.i.o_o o.aaaaadodlblgdc cmmrkn.nri.evc.o_o o.aaaaadodsrielgdc #Tenm o ti ado (o teSK h ae f hs d-n fr h D) POUTSKADNNM : mrkn_lh_do RDC_D_DO_AE = aaaaapaadn #Cp tefloigflsfrti ado' SK oy h olwn ie o hs d-ns D POUTSKADNCP_IE : RDC_D_DO_OYFLS = $LCLPT)mnfs.n:aietii (OA_AH/aietiimnfs.n $LCLPT)hrwr.n:adaeii (OA_AH/adaeiihrwr.n $cl fn-oysbi-ie, (al idcp-udrfls* ,(OA_AH/kn/rnvadisisMkHgMp) $LCLPT)sisMkHgMp,kn/rnvadi #Cp tejrflsfrtelbais(Ps epsdi ti ado' SK oy h a ie o h irre AI) xoe n hs d-ns D POUTSKADNCP_OUE : RDC_D_DO_OYMDLS = cmmrkn.nri.i.o:iscmmrkn.nri.i.o.a o.aaaaadodlblglb/o.aaaaadodlblgjr cmmrkn.nri.evc.o:iscmmrkn.nri.evc.o.a o.aaaaadodsrielglb/o.aaaaadodsrielgjr POUTSKADNSU_ES: $LCLPT)apaskadnsu_estt RDC_D_DO_TBDF = (OA_AH/lh_d_do_tbdf.x #Dfn tenm o tedcmnaint gnrt frti ado' SK eie h ae f h ouetto o eeae o hs d-ns D POUTSKADNDCMDL : RDC_D_DO_O_OUE = cmmrkn.nri.evc.o_o o.aaaaadodsrielgdc #Sneteado i a euao,w as ne t epiil cp tekre t ic h d-n s n mltr e lo ed o xlcty oy h enl o iae mgs POUTSKADNCP_IE + $LCLKRE)iae/enlqm RDC_D_DO_OYFLS = (OA_ENL:mgskre-eu
  • 52. #Ti ado etnstedfutskpout hs d-n xed h eal d rdc. $cl ihrtpout $SCTRE_I)poutskm) (al nei-rdc, (R_AGTDR/rdc/d.k #Tenm o ti ado (o tebidsse) h ae f hs d-n fr h ul ytm #Ue'aePOUT<RDC_AE-d_do't bidtea ado, s mk RDC-POUTNM>skadn o ul h n d-n #s i ti cs,w wudrn'aePOUTmrkn_lh_do-d_do' o n hs ae e ol u mk RDC-aaaaapaadnskadn POUTNM : mrkn_lh_do RDC_AE = aaaaapaadn POUTDVC : apa RDC_EIE = lh POUTMDL: Mrkn ApaSKAdnIaefrEuao RDC_OE = aaaa lh D do mg o mltr Create main A d o d r d c s m listing other makefiles nriPout.k device/marakana/alpha-sdk_addon/AndroidProducts.mk POUTMKFLS: $LCLDR/lh_d_do.k RDC_AEIE = (OA_I)apaskadnm Create top-level makefile device/marakana/alpha-sdk_addon/Android.mk icue$cl alsbi-aeie) nld (al l-udrmkfls Build the SDK Add-on $mk -1 POUTmrkn_lh_do-d_do ae j0 RDC-aaaaapaadnskadn … PcaigSKAdn oths/iu-8/d_do/aaaaapaadn akgn D do: u/otlnxx6skadnmrkn_lh_do- egsuetlnxx6zp n.tdn-iu-8.i Check that Marakana Alpha shows in Android SDK Manager Start the Android SDK Manager to see all available Add-ons.
  • 53. Create new AVD based on Marakana Alpha From the Android AVD Manager, create new AVD using Alpha as the target.
  • 54. Verify the new AVD boots up with right ROM image Start the new AVD. You should see all of the modifications we’ve done.
  • 55.
  • 56. Remixing Android Summary Thank you! Marko Gargenta & Marakana Team @MarkoGargenta Special thanks to Aleksandar (Sasa) Gargenta for providing most of the research on how to put together Marakana Alpha, properly. Slides & video of this presentation is available at Marakana.com (c) Marakana.com