SlideShare ist ein Scribd-Unternehmen logo
1 von 120
Downloaden Sie, um offline zu lesen
Jollen’s Consulting



                      ,
           ,



                               ,
                      : www.jollen.org/consulting
Jollen’s Consulting
                                   ta@jollen.org
                                                   [
         ]




Jollen’s Consulting Team
Presentation           Training           Coaching
low-level
Android Kernel Features
Android Kernel Features
Android Kernel

•Binder
•Ashmem (Android shared memory)
•PMEM (Processor memory allocator)
•logcat (Android Logger)
•wakelock (Android Power Management)
•Alarm
Key Features            2.6.23   2.6.25   2.6.27   2.6.29

1   Alarm Driver                   O        O        O        O

2   Android Logger                 O        O        O        O

3   Low Memory Killer              O        O        O        O

4   Power Management               O        O        O        O

5   USB Gadget                     O        O        O        O

6   ASHMEM                         X        O        O        O

7   PMEM                           X        X        O        O

8   x86 Support                    X        X        O        O

9   ./drivers/staging/Android/     X        X        X        O
Android Toolchain

•android-toolchain-20081019
    •http://android.git.kernel.org/pub/
•gcc 4.2.1 / binutils 2.17 / gdb 6.6
•ARMV5te+
•ABI: EABI, AAPCS
•--with-float=soft --with=fpu-vfp
•--enable-threads (single)
Application Developers

         Applications                 change

 Application Framework


 Surface Manager      Dalvik VM
                                      System
Media Framework    Shared Libraries
                                      Image



         Linux Kernel
Product Branch Maintainer

          Applications

  Application Framework


  Surface Manager      Dalvik VM
                                       rebuild

  Media Framework   Shared Libraries




          Linux Kernel
Hardware Developing

        Applications

Application Framework


Surface Manager      Dalvik VM
                                     change

Media Framework   Shared Libraries




        Linux Kernel                 change
Architecture Porting

        Applications

Application Framework


Surface Manager      Dalvik VM


                                     porting
Media Framework   Shared Libraries




        Linux Kernel
• Application Developers
• Application Developers
• Product Branch Maintainer
• Application Developers
• Product Branch Maintainer
• Hardware Developing
• Application Developers
• Product Branch Maintainer
• Hardware Developing
• Architecture Porting
Android Framework
Android Framework
•   The best way to write good, efficient code for
    embedded systems is to understand what the
    code you write really does. --Android Dev Guide
private SensorManager mSensorManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);
    }
private SensorManager mSensorManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);
    }





   private SensorManager mSensorManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);

        setContentView(R.layout.main);
    }
private SensorManager mSensorManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          UI;

           SensorManager;
    }
private SensorManager mSensorManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          UI;

           SensorManager;
    }





   private SensorManager mSensorManager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           SensorManager;

          UI;
    }
•
public class TunitBill extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Debug.startMethodTracing("TunitB");

        CharSequence time = Long.toString(SystemClock.elapsedRealtime());

        Debug.stopMethodTracing();
    }
}
public class TunitBill extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Debug.startMethodTracing("TunitB");

        CharSequence time = Long.toString(SystemClock.elapsedRealtime());

        Debug.stopMethodTracing();
    }
}




    •
                                               method-level
method-level




 low-level
•         TraceView   method   (method
    tracing)
Avoid Creating Objects
Use Native Methods
Prefer Virtual Over Interface
Prefer Static Over Virtual
Avoid Internal Getters/Setters
Cache Field Lookups
Declare Constants Final
Use Enhanced For Loop Syntax With Caution
Avoid Enums
Use Package Scope with Inner Classes
Avoid Float
Avoid Creating Objects
    Use Native Methods
    Prefer Virtual Over Interface
    Prefer Static Over Virtual
    Avoid Internal Getters/Setters
    Cache Field Lookups
    Declare Constants Final
    Use Enhanced For Loop Syntax With Caution
    Avoid Enums
    Use Package Scope with Inner Classes
    Avoid Float



•   Designing for Performance -- Android Dev
    Guide
Android Tracing API
        android.os.Debug
Debug.startMethodTracing("TunitB");

/* writing codes to profile */

Debug.stopMethodTracing();




Android Tracing API
                   android.os.Debug
public class TunitChris extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button)findViewById(R.id.btn);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
            }
        });

    }
}
•
Acitivty
          View.OnClickListener

Android         Copyright (c) 2009 Jollen’s Consulting         . www.jollen.org/consulting
public class TunitChris extends Activity implements
View.OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button)findViewById(R.id.btn);
        button.setOnClickListener(this);
    }

    public void onClick(View v) {
        Toast.makeText(
                this,
                "Yes.",
                Toast.LENGTH_LONG).show();
    }
}
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Perform action on click
    }
});
public class TunitChris extends Activity implements
View.OnClickListener
•
SensorManager
private SensorManager mSensorManager;

     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);
    }




                      SensorManager
private SensorManager mSensorManager;

     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
     }

     public void onStop() {
         super.onStop();

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);    
    }
private SensorManager mSensorManager;

     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
     }

     public void onStop() {
         super.onStop();

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);    
    }




                                            better
Source: Android SDK
Launcher
method-level
Android Driver Model
                   HAL
Android Driver Model
                   HAL
native C programs




glibc & shared libs




               S!"#$%!&'((




      Kernel




    Hardware
Android Framework




         Application




                       JNI



                             S!"#$%!&'((
bionic & shared libs




                                           Kernel




                                      Hardware
public class Sensors extends Activity {
    ...
    private SensorManager mSensorManager;
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Be sure to call the super class.
        super.onCreate(savedInstanceState);

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);
    }
    ...
}
class SensorService extends ISensorService.Stub {
    ...
    private static native int _sensors_control_init();
    private static native ParcelFileDescriptor
_sensors_control_open();
    private static native boolean
_sensors_control_activate(int sensor, boolean activate);
    private static native int _sensors_control_set_delay
(int ms);
}




at framework/base/services/java/SensorService.java
class SensorService extends ISensorService.Stub {
    ...
    public SensorService(Context context) {
        if (localLOGV) Log.d(TAG, "SensorService
startup");
        _sensors_control_init();
        mNotificationManager = (NotificationManager)
context.getSystemService
(Context.NOTIFICATION_SERVICE);
        mContext = context;
    }
   ...
}



at framework/base/services/java/SensorService.java
static JNINativeMethod gMethods[] = {
    {"_sensors_control_init",     "()I",   (void*) android_init },
    {"_sensors_control_open",     "()Landroid/os/
ParcelFileDescriptor;",
                                           (void*) android_open },
    {"_sensors_control_activate", "(IZ)Z", (void*)
android_activate },
    {"_sensors_control_wake",     "()I", (void*)
android_data_wake },
    {"_sensors_control_set_delay","(I)I", (void*)
android_set_delay },
};
static jint
android_init(JNIEnv *env, jclass clazz)
{
    sensors_module_t* module;
    if (hw_get_module(SENSORS_HARDWARE_MODULE_ID, (const hw_module_t**)
&module) == 0) {
        if (sensors_control_open(&module->common, &sSensorDevice) == 0)
{
            const struct sensor_t* list;
            int count = module->get_sensors_list(module, &list);
            return count;
        }
    }
    return 0;
}



static inline int sensors_control_open(const struct hw_module_t*
module, struct sensors_control_device_t** device) {
    return module->methods->open(module,
            SENSORS_HARDWARE_CONTROL, (struct hw_device_t**)
device);
}
Application Context


                                getSystemService


                                 Create Manager

                                      App
           App View




 !"#$%&                             IStubService

                               Manager
                      framework/base/services/java


alvik VM                            IStubService
SensorManager
private SensorManager mSensorManager;

     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);

        mSensorManager = (SensorManager) getSystemService
(SENSOR_SERVICE);
    }




                      SensorManager
public Object getSystemService(String name) {
        if (WINDOW_SERVICE.equals(name)) {
            return WindowManagerImpl.getDefault();
        } else if (LAYOUT_INFLATER_SERVICE.equals(name)) {
            synchronized (mSync) {
                LayoutInflater inflater = mLayoutInflater;
                if (inflater != null) {
                    return inflater;
                }
                mLayoutInflater = inflater =
                    PolicyManager.makeNewLayoutInflater(getOuterContext());
                return inflater;
            }
        } else if (ACTIVITY_SERVICE.equals(name)) {
            return getActivityManager();
        } else if (ALARM_SERVICE.equals(name)) {
            return getAlarmManager();
        ..
        } else if ( SENSOR_SERVICE.equals(name)) {
            return getSensorManager();
           }
          ...
    }



Android                Copyright (c) 2009 Jollen’s Consulting     . www.jollen.org/consulting
private SensorManager getSensorManager() {
        synchronized (mSync) {
            if (mSensorManager == null) {
                mSensorManager = new SensorManager
(mMainThread.getHandler().getLooper());
            }
        }
        return mSensorManager;
    }
Application Context


                                                                getSystemService


                                                                 Create Manager

                                                                      App
                                         App View




              !"#$%&                                                IStubService

                                                               Manager
                                                      framework/base/services/java


            Dalvik VM                                               IStubService

                                                              Service/Java
                                                      framework/base/services/java

             register
                                              JNI Table
          Android server



                  VM Onload              App Onload


Android                Copyright (c) 2009 Jollen’s Consulting          . www.jollen.org/consulting
• device driver
!"#$%&


                                                               Manager
                                                      framework/base/services/java


            Dalvik VM                                               IStubService

                                                              Service/Java
                                                      framework/base/services/java

             register
                                              JNI Table
          Android server

                                                              Service/JNI
                                                       framework/base/services/jni




                                                                   HAL
                                                           hardware/libhardware

                                                                      HAL Stub

                                                                  sysfs
                                                                  /sys


                   VM Onload            App Onload

Android                Copyright (c) 2009 Jollen’s Consulting         . www.jollen.org/consulting
at framework/base/services/java/SensorService.java
class SensorService extends ISensorService.Stub {
                            ...
    public SensorService(Context context) {
        if (localLOGV) Log.d(TAG, "SensorService
startup");
        _sensors_control_init();
        mNotificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
        mContext = context;
    }
   ...
}




 at framework/base/services/java/SensorService.java
Android   Copyright (c) 2009 Jollen’s Consulting   . www.jollen.org/consulting
VFS




                                                                             Driver D
                                       Driver B

              Driver A
                                                                                        Driver E

                                                        Driver C




Copyright (c) 2009 Jollen’s Consulting, www.jollen.org/consulting   Embedded Linux
kernel

                             buses devices classes firmware                                      kobject

                           Core Driver Model – Subsystems (ksets…)                                         /sys




                                                                                Driver D
                                   Driver B

          Driver A
                                                                                           Driver E

                                                   Driver C



Copyright (c) 2009 Jollen’s Consulting, www.jollen.org/consulting         Embedded Linux
Android
Android



• Launcher Model
•       getSystemService
• Framework
• HAL module     sysfs
high-level




low-level
high-level




low-level
high-level




low-level
high-level



architect-level



low-level
architect
Android Source Tree
Android Source Tree
|-- Makefile                  Makefile
|-- bionic               Bionic 义        这
|-- bootloader      
|-- build                build   录   内
   脚
|-- dalvik                JAVA虚拟
|-- development               发
|-- external        
|-- frameworks      
|-- hardware        
|--   kernel              Linux2.6
|--   packages            Android
|--   prebuilt             Android           脚
|--   recovery        
`-- system               Android
<company_name>
    <board_name>
       + Android.mk
       + product_config.mk
       + system.prop
    products
       + AndroidProducts.mk
       + <first_product_name>.mk
       + <second_product_name>.mk




 Android                  Jollen’s Consulting. www.jollen.org/consulting
1. Get Google Android
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
$ repo sync

2. Manifest file.
<manifest>
...
<project name="platform/vendor/asus/eee_701"  path="vendor/asus/
eee_701"/>
...
</manifest>

3. Get EeePC platform.
$ repo sync

4. Build Android image.
$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701
DISABLE_DEXPREOPT=true make -j2 installer_img

5. Create USB boot stick.
Use make-live script. https://review.source.android.com/Gerrit#change,6475

    Android                         Jollen’s Consulting. www.jollen.org/consulting
Build EeePC 701 Product Tips # Google API issue

 $(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)

 PRODUCT_NAME := eee_701
 PRODUCT_DEVICE := eee_701
 PRODUCT_POLICY := android.policy_mid
 PRODUCT_PROPERTY_OVERRIDES += 
    ro.com.android.dataroaming=true



   Cupcake将Google APIs          add-ons




    Android                     Jollen’s Consulting. www.jollen.org/consulting
Build EeePC 701 Product Tips # e2fsprogs issue


 external/e2fsprogs/Android.mk:
 --- a/Android.mk
 +++ b/Android.mk
 @@ -1,3 +1,3 @@
 ifneq ($(TARGET_SIMULATOR),true)
 -# include $(call all-subdir-makefiles)
 + include $(call all-subdir-makefiles)
 endif




   Android                         Jollen’s Consulting. www.jollen.org/consulting
boot.img

installer.img

ramdisk.img

system.img

userdata.img




Android          Jollen’s Consulting. www.jollen.org/consulting
Android      随
$ make-live




  Android             Jollen’s Consulting. www.jollen.org/consulting
AMD PCnet32 PCI support

VESA VGA graphics support

VGA 8x8 font

VGA 8x16 font




Android                  Jollen’s Consulting. www.jollen.org/consulting
$ VBoxManage convertromraw -format VDI ./installer.img ./android.vdi




  Android                      Jollen’s Consulting. www.jollen.org/consulting
device/system/init

device/system/init/init.c

/etc/init.rc

   动mount file system (                  /etc/fstab)




Android                           Jollen’s Consulting. www.jollen.org/consulting
/system/bin/logd
/sbin/adbd
/system/bin/usbd
/system/bin/debuggerd
/system/bin/rild
/system/bin/app_process
/system/bin/runtime
/system/bin/dbus-daemon
system_server




Android                     Jollen’s Consulting. www.jollen.org/consulting
• Application Developers
• Product Branch Maintainer
• Hardware Developingframework, app
      LED      : kernel, hal,

• Architecture Porting
www.jollen.org/consulting
                  Jollen@jollen.org

Weitere ähnliche Inhalte

Was ist angesagt?

Embedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowEmbedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowOpersys inc.
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel HackingDeveler S.r.l.
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSPMin-Yih Hsu
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Opersys inc.
 
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIAndroid Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIOpersys inc.
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesOpersys inc.
 
Advanced Evasion Techniques by Win32/Gapz
Advanced Evasion Techniques by Win32/GapzAdvanced Evasion Techniques by Win32/Gapz
Advanced Evasion Techniques by Win32/GapzAlex Matrosov
 
Headless Android at AnDevCon3
Headless Android at AnDevCon3Headless Android at AnDevCon3
Headless Android at AnDevCon3Opersys inc.
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and DevelopmentOpersys inc.
 
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...ijafrc
 
Linux Kernel , BSP, Boot Loader, ARM Engineer - Satish profile
Linux Kernel , BSP, Boot Loader, ARM Engineer - Satish profileLinux Kernel , BSP, Boot Loader, ARM Engineer - Satish profile
Linux Kernel , BSP, Boot Loader, ARM Engineer - Satish profileSatish Kumar
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on AndroidGary Bisson
 
Embedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeEmbedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeOpersys inc.
 

Was ist angesagt? (20)

Embedded Android Workshop with Marshmallow
Embedded Android Workshop with MarshmallowEmbedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel Hacking
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSP
 
Jnode
JnodeJnode
Jnode
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012
 
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIAndroid Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
 
Improve Android System Component Performance
Improve Android System Component PerformanceImprove Android System Component Performance
Improve Android System Component Performance
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and Resources
 
What & How to Customize Android?
What & How to Customize Android?What & How to Customize Android?
What & How to Customize Android?
 
Advanced Evasion Techniques by Win32/Gapz
Advanced Evasion Techniques by Win32/GapzAdvanced Evasion Techniques by Win32/Gapz
Advanced Evasion Techniques by Win32/Gapz
 
Headless Android at AnDevCon3
Headless Android at AnDevCon3Headless Android at AnDevCon3
Headless Android at AnDevCon3
 
Android ndk: Entering the native world
Android ndk: Entering the native worldAndroid ndk: Entering the native world
Android ndk: Entering the native world
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and Development
 
NDK Introduction
NDK IntroductionNDK Introduction
NDK Introduction
 
How To Build Android for ARM Chip boards
How To Build Android for ARM Chip boardsHow To Build Android for ARM Chip boards
How To Build Android for ARM Chip boards
 
Applied Computer Science Concepts in Android
Applied Computer Science Concepts in AndroidApplied Computer Science Concepts in Android
Applied Computer Science Concepts in Android
 
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
 
Linux Kernel , BSP, Boot Loader, ARM Engineer - Satish profile
Linux Kernel , BSP, Boot Loader, ARM Engineer - Satish profileLinux Kernel , BSP, Boot Loader, ARM Engineer - Satish profile
Linux Kernel , BSP, Boot Loader, ARM Engineer - Satish profile
 
Accessing Hardware on Android
Accessing Hardware on AndroidAccessing Hardware on Android
Accessing Hardware on Android
 
Embedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeEmbedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC Europe
 

Ähnlich wie Jollen's Presentation: Introducing Android low-level

What’s new in aNdroid [Google I/O Extended Bangkok 2016]
What’s new in aNdroid [Google I/O Extended Bangkok 2016]What’s new in aNdroid [Google I/O Extended Bangkok 2016]
What’s new in aNdroid [Google I/O Extended Bangkok 2016]Sittiphol Phanvilai
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System ServerOpersys inc.
 
Improving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesImproving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesHassan Abid
 
Android Jumpstart Jfokus
Android Jumpstart JfokusAndroid Jumpstart Jfokus
Android Jumpstart JfokusLars Vogel
 
Android 101 - Introduction to Android Development
Android 101 - Introduction to Android DevelopmentAndroid 101 - Introduction to Android Development
Android 101 - Introduction to Android DevelopmentAndy Scherzinger
 
Android application development
Android application developmentAndroid application development
Android application developmentslidesuren
 
The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212Mahmoud Samir Fayed
 
Android activity, service, and broadcast recievers
Android activity, service, and broadcast recieversAndroid activity, service, and broadcast recievers
Android activity, service, and broadcast recieversUtkarsh Mankad
 
Android Workshop 2013
Android Workshop 2013Android Workshop 2013
Android Workshop 2013Junda Ong
 
[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...BeMyApp
 
Android OS & SDK - Getting Started
Android OS & SDK - Getting StartedAndroid OS & SDK - Getting Started
Android OS & SDK - Getting StartedHemant Chhapoliya
 
Annotation Processing
Annotation ProcessingAnnotation Processing
Annotation ProcessingJintin Lin
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android DevelopmentJussi Pohjolainen
 
Android training in mumbai
Android training in mumbaiAndroid training in mumbai
Android training in mumbaiCIBIL
 
Android tutorial (2)
Android tutorial (2)Android tutorial (2)
Android tutorial (2)Kumar
 

Ähnlich wie Jollen's Presentation: Introducing Android low-level (20)

What’s new in aNdroid [Google I/O Extended Bangkok 2016]
What’s new in aNdroid [Google I/O Extended Bangkok 2016]What’s new in aNdroid [Google I/O Extended Bangkok 2016]
What’s new in aNdroid [Google I/O Extended Bangkok 2016]
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
 
Improving app performance with Kotlin Coroutines
Improving app performance with Kotlin CoroutinesImproving app performance with Kotlin Coroutines
Improving app performance with Kotlin Coroutines
 
Unit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.pptUnit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.ppt
 
Android Jumpstart Jfokus
Android Jumpstart JfokusAndroid Jumpstart Jfokus
Android Jumpstart Jfokus
 
Android 101 - Introduction to Android Development
Android 101 - Introduction to Android DevelopmentAndroid 101 - Introduction to Android Development
Android 101 - Introduction to Android Development
 
Android - Anatomy of android elements & layouts
Android - Anatomy of android elements & layoutsAndroid - Anatomy of android elements & layouts
Android - Anatomy of android elements & layouts
 
Android application development
Android application developmentAndroid application development
Android application development
 
The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212The Ring programming language version 1.10 book - Part 83 of 212
The Ring programming language version 1.10 book - Part 83 of 212
 
Android activity, service, and broadcast recievers
Android activity, service, and broadcast recieversAndroid activity, service, and broadcast recievers
Android activity, service, and broadcast recievers
 
Android Workshop 2013
Android Workshop 2013Android Workshop 2013
Android Workshop 2013
 
[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...[Ultracode Munich #4] Short introduction to the new Android build system incl...
[Ultracode Munich #4] Short introduction to the new Android build system incl...
 
Android101
Android101Android101
Android101
 
Android OS & SDK - Getting Started
Android OS & SDK - Getting StartedAndroid OS & SDK - Getting Started
Android OS & SDK - Getting Started
 
Core Android
Core AndroidCore Android
Core Android
 
Annotation Processing
Annotation ProcessingAnnotation Processing
Annotation Processing
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
 
Android training in mumbai
Android training in mumbaiAndroid training in mumbai
Android training in mumbai
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Android tutorial (2)
Android tutorial (2)Android tutorial (2)
Android tutorial (2)
 

Mehr von Jollen Chen

Flowchain blockchain classroom at Taiwan Tech University
Flowchain blockchain classroom at Taiwan Tech UniversityFlowchain blockchain classroom at Taiwan Tech University
Flowchain blockchain classroom at Taiwan Tech UniversityJollen Chen
 
Bitmark and Hyperledger Workshop: the Digital Assets and Property
Bitmark and Hyperledger Workshop: the Digital Assets and PropertyBitmark and Hyperledger Workshop: the Digital Assets and Property
Bitmark and Hyperledger Workshop: the Digital Assets and PropertyJollen Chen
 
Introducing the Blockchain and Distributed Ledger Technology
Introducing the Blockchain and  Distributed Ledger TechnologyIntroducing the Blockchain and  Distributed Ledger Technology
Introducing the Blockchain and Distributed Ledger TechnologyJollen Chen
 
Maker of Things - the open IoT cloud for makers chapter.
Maker of Things - the open IoT cloud for makers chapter.Maker of Things - the open IoT cloud for makers chapter.
Maker of Things - the open IoT cloud for makers chapter.Jollen Chen
 
WoT.City and IoT Protocols Movement @ Taipei, Taiwan
WoT.City and IoT Protocols Movement @ Taipei, TaiwanWoT.City and IoT Protocols Movement @ Taipei, Taiwan
WoT.City and IoT Protocols Movement @ Taipei, TaiwanJollen Chen
 
IoT and Maker Crossover (IMCO) Conference 2015
IoT and Maker Crossover (IMCO) Conference 2015IoT and Maker Crossover (IMCO) Conference 2015
IoT and Maker Crossover (IMCO) Conference 2015Jollen Chen
 
Open IoT Cloud Architecture, Web of Things, Shenzhen, China.
Open IoT Cloud Architecture, Web of Things, Shenzhen, China.Open IoT Cloud Architecture, Web of Things, Shenzhen, China.
Open IoT Cloud Architecture, Web of Things, Shenzhen, China.Jollen Chen
 
Backbone.js and MVW 101
Backbone.js and MVW 101Backbone.js and MVW 101
Backbone.js and MVW 101Jollen Chen
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Jollen Chen
 
MongoDB & NoSQL 101
 MongoDB & NoSQL 101 MongoDB & NoSQL 101
MongoDB & NoSQL 101Jollen Chen
 
Mokoversity Course: Apple Swift 101 - Introduction
Mokoversity Course: Apple Swift 101 - IntroductionMokoversity Course: Apple Swift 101 - Introduction
Mokoversity Course: Apple Swift 101 - IntroductionJollen Chen
 
Android Wear SDK: Level 101
Android Wear SDK: Level 101Android Wear SDK: Level 101
Android Wear SDK: Level 101Jollen Chen
 
Startup eng-camp 3
Startup eng-camp 3Startup eng-camp 3
Startup eng-camp 3Jollen Chen
 
讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV Framework讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV FrameworkJollen Chen
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)Jollen Chen
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)Jollen Chen
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)Jollen Chen
 
Android HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacyAndroid HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacyJollen Chen
 
Embedded Linux: Introduction
Embedded Linux: IntroductionEmbedded Linux: Introduction
Embedded Linux: IntroductionJollen Chen
 
Android Application: Introduction
Android Application: IntroductionAndroid Application: Introduction
Android Application: IntroductionJollen Chen
 

Mehr von Jollen Chen (20)

Flowchain blockchain classroom at Taiwan Tech University
Flowchain blockchain classroom at Taiwan Tech UniversityFlowchain blockchain classroom at Taiwan Tech University
Flowchain blockchain classroom at Taiwan Tech University
 
Bitmark and Hyperledger Workshop: the Digital Assets and Property
Bitmark and Hyperledger Workshop: the Digital Assets and PropertyBitmark and Hyperledger Workshop: the Digital Assets and Property
Bitmark and Hyperledger Workshop: the Digital Assets and Property
 
Introducing the Blockchain and Distributed Ledger Technology
Introducing the Blockchain and  Distributed Ledger TechnologyIntroducing the Blockchain and  Distributed Ledger Technology
Introducing the Blockchain and Distributed Ledger Technology
 
Maker of Things - the open IoT cloud for makers chapter.
Maker of Things - the open IoT cloud for makers chapter.Maker of Things - the open IoT cloud for makers chapter.
Maker of Things - the open IoT cloud for makers chapter.
 
WoT.City and IoT Protocols Movement @ Taipei, Taiwan
WoT.City and IoT Protocols Movement @ Taipei, TaiwanWoT.City and IoT Protocols Movement @ Taipei, Taiwan
WoT.City and IoT Protocols Movement @ Taipei, Taiwan
 
IoT and Maker Crossover (IMCO) Conference 2015
IoT and Maker Crossover (IMCO) Conference 2015IoT and Maker Crossover (IMCO) Conference 2015
IoT and Maker Crossover (IMCO) Conference 2015
 
Open IoT Cloud Architecture, Web of Things, Shenzhen, China.
Open IoT Cloud Architecture, Web of Things, Shenzhen, China.Open IoT Cloud Architecture, Web of Things, Shenzhen, China.
Open IoT Cloud Architecture, Web of Things, Shenzhen, China.
 
Backbone.js and MVW 101
Backbone.js and MVW 101Backbone.js and MVW 101
Backbone.js and MVW 101
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
 
MongoDB & NoSQL 101
 MongoDB & NoSQL 101 MongoDB & NoSQL 101
MongoDB & NoSQL 101
 
Mokoversity Course: Apple Swift 101 - Introduction
Mokoversity Course: Apple Swift 101 - IntroductionMokoversity Course: Apple Swift 101 - Introduction
Mokoversity Course: Apple Swift 101 - Introduction
 
Android Wear SDK: Level 101
Android Wear SDK: Level 101Android Wear SDK: Level 101
Android Wear SDK: Level 101
 
Startup eng-camp 3
Startup eng-camp 3Startup eng-camp 3
Startup eng-camp 3
 
讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV Framework讓 HTML5 走進 IPTV Framework
讓 HTML5 走進 IPTV Framework
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(2)
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(3)
 
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
課程名稱:八屏一雲時代來臨 教你HTML5六小時打通(1)
 
Android HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacyAndroid HAL Introduction: libhardware and its legacy
Android HAL Introduction: libhardware and its legacy
 
Embedded Linux: Introduction
Embedded Linux: IntroductionEmbedded Linux: Introduction
Embedded Linux: Introduction
 
Android Application: Introduction
Android Application: IntroductionAndroid Application: Introduction
Android Application: Introduction
 

Jollen's Presentation: Introducing Android low-level

  • 1.
  • 2. Jollen’s Consulting , , , : www.jollen.org/consulting
  • 3. Jollen’s Consulting ta@jollen.org [ ] Jollen’s Consulting Team
  • 4. Presentation Training Coaching
  • 5.
  • 9. Android Kernel •Binder •Ashmem (Android shared memory) •PMEM (Processor memory allocator) •logcat (Android Logger) •wakelock (Android Power Management) •Alarm
  • 10. Key Features 2.6.23 2.6.25 2.6.27 2.6.29 1 Alarm Driver O O O O 2 Android Logger O O O O 3 Low Memory Killer O O O O 4 Power Management O O O O 5 USB Gadget O O O O 6 ASHMEM X O O O 7 PMEM X X O O 8 x86 Support X X O O 9 ./drivers/staging/Android/ X X X O
  • 11.
  • 12. Android Toolchain •android-toolchain-20081019 •http://android.git.kernel.org/pub/ •gcc 4.2.1 / binutils 2.17 / gdb 6.6 •ARMV5te+ •ABI: EABI, AAPCS •--with-float=soft --with=fpu-vfp •--enable-threads (single)
  • 13.
  • 14. Application Developers Applications change Application Framework Surface Manager Dalvik VM System Media Framework Shared Libraries Image Linux Kernel
  • 15. Product Branch Maintainer Applications Application Framework Surface Manager Dalvik VM rebuild Media Framework Shared Libraries Linux Kernel
  • 16. Hardware Developing Applications Application Framework Surface Manager Dalvik VM change Media Framework Shared Libraries Linux Kernel change
  • 17. Architecture Porting Applications Application Framework Surface Manager Dalvik VM porting Media Framework Shared Libraries Linux Kernel
  • 18.
  • 20. • Application Developers • Product Branch Maintainer
  • 21. • Application Developers • Product Branch Maintainer • Hardware Developing
  • 22. • Application Developers • Product Branch Maintainer • Hardware Developing • Architecture Porting
  • 25. The best way to write good, efficient code for embedded systems is to understand what the code you write really does. --Android Dev Guide
  • 26.
  • 27. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); }
  • 28. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); } private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); setContentView(R.layout.main); }
  • 29.
  • 30. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UI; SensorManager; }
  • 31. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UI; SensorManager; } private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SensorManager; UI; }
  • 32.
  • 33.
  • 34.
  • 35. public class TunitBill extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Debug.startMethodTracing("TunitB"); CharSequence time = Long.toString(SystemClock.elapsedRealtime()); Debug.stopMethodTracing(); } }
  • 36. public class TunitBill extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Debug.startMethodTracing("TunitB"); CharSequence time = Long.toString(SystemClock.elapsedRealtime()); Debug.stopMethodTracing(); } } • method-level
  • 38.
  • 39.
  • 40. TraceView method (method tracing)
  • 41.
  • 42. Avoid Creating Objects Use Native Methods Prefer Virtual Over Interface Prefer Static Over Virtual Avoid Internal Getters/Setters Cache Field Lookups Declare Constants Final Use Enhanced For Loop Syntax With Caution Avoid Enums Use Package Scope with Inner Classes Avoid Float
  • 43. Avoid Creating Objects Use Native Methods Prefer Virtual Over Interface Prefer Static Over Virtual Avoid Internal Getters/Setters Cache Field Lookups Declare Constants Final Use Enhanced For Loop Syntax With Caution Avoid Enums Use Package Scope with Inner Classes Avoid Float • Designing for Performance -- Android Dev Guide
  • 44. Android Tracing API android.os.Debug
  • 45. Debug.startMethodTracing("TunitB"); /* writing codes to profile */ Debug.stopMethodTracing(); Android Tracing API android.os.Debug
  • 46.
  • 47. public class TunitChris extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } }); } }
  • 48.
  • 49.
  • 50. Acitivty View.OnClickListener Android Copyright (c) 2009 Jollen’s Consulting . www.jollen.org/consulting
  • 51.
  • 52. public class TunitChris extends Activity implements View.OnClickListener { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(this); } public void onClick(View v) { Toast.makeText( this, "Yes.", Toast.LENGTH_LONG).show(); } }
  • 53.
  • 54. button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } });
  • 55.
  • 56. public class TunitChris extends Activity implements View.OnClickListener
  • 57.
  • 58.
  • 60. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); } SensorManager
  • 61. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void onStop() { super.onStop(); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); }
  • 62. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void onStop() { super.onStop(); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); } better
  • 64.
  • 69. native C programs glibc & shared libs S!"#$%!&'(( Kernel Hardware
  • 70. Android Framework Application JNI S!"#$%!&'(( bionic & shared libs Kernel Hardware
  • 71. public class Sensors extends Activity { ... private SensorManager mSensorManager; ... @Override protected void onCreate(Bundle savedInstanceState) { // Be sure to call the super class. super.onCreate(savedInstanceState); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); } ... }
  • 72.
  • 73.
  • 74. class SensorService extends ISensorService.Stub { ... private static native int _sensors_control_init(); private static native ParcelFileDescriptor _sensors_control_open(); private static native boolean _sensors_control_activate(int sensor, boolean activate); private static native int _sensors_control_set_delay (int ms); } at framework/base/services/java/SensorService.java
  • 75. class SensorService extends ISensorService.Stub { ... public SensorService(Context context) { if (localLOGV) Log.d(TAG, "SensorService startup"); _sensors_control_init(); mNotificationManager = (NotificationManager) context.getSystemService (Context.NOTIFICATION_SERVICE); mContext = context; } ... } at framework/base/services/java/SensorService.java
  • 76. static JNINativeMethod gMethods[] = { {"_sensors_control_init", "()I", (void*) android_init }, {"_sensors_control_open", "()Landroid/os/ ParcelFileDescriptor;", (void*) android_open }, {"_sensors_control_activate", "(IZ)Z", (void*) android_activate }, {"_sensors_control_wake", "()I", (void*) android_data_wake }, {"_sensors_control_set_delay","(I)I", (void*) android_set_delay }, };
  • 77. static jint android_init(JNIEnv *env, jclass clazz) { sensors_module_t* module; if (hw_get_module(SENSORS_HARDWARE_MODULE_ID, (const hw_module_t**) &module) == 0) { if (sensors_control_open(&module->common, &sSensorDevice) == 0) { const struct sensor_t* list; int count = module->get_sensors_list(module, &list); return count; } } return 0; } static inline int sensors_control_open(const struct hw_module_t* module, struct sensors_control_device_t** device) { return module->methods->open(module, SENSORS_HARDWARE_CONTROL, (struct hw_device_t**) device); }
  • 78.
  • 79.
  • 80.
  • 81.
  • 82. Application Context getSystemService Create Manager App App View !"#$%& IStubService Manager framework/base/services/java alvik VM IStubService
  • 84. private SensorManager mSensorManager; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager) getSystemService (SENSOR_SERVICE); } SensorManager
  • 85.
  • 86. public Object getSystemService(String name) { if (WINDOW_SERVICE.equals(name)) { return WindowManagerImpl.getDefault(); } else if (LAYOUT_INFLATER_SERVICE.equals(name)) { synchronized (mSync) { LayoutInflater inflater = mLayoutInflater; if (inflater != null) { return inflater; } mLayoutInflater = inflater = PolicyManager.makeNewLayoutInflater(getOuterContext()); return inflater; } } else if (ACTIVITY_SERVICE.equals(name)) { return getActivityManager(); } else if (ALARM_SERVICE.equals(name)) { return getAlarmManager(); .. } else if ( SENSOR_SERVICE.equals(name)) { return getSensorManager(); } ... } Android Copyright (c) 2009 Jollen’s Consulting . www.jollen.org/consulting
  • 87.
  • 88.
  • 89. private SensorManager getSensorManager() { synchronized (mSync) { if (mSensorManager == null) { mSensorManager = new SensorManager (mMainThread.getHandler().getLooper()); } } return mSensorManager; }
  • 90. Application Context getSystemService Create Manager App App View !"#$%& IStubService Manager framework/base/services/java Dalvik VM IStubService Service/Java framework/base/services/java register JNI Table Android server VM Onload App Onload Android Copyright (c) 2009 Jollen’s Consulting . www.jollen.org/consulting
  • 91.
  • 93. !"#$%& Manager framework/base/services/java Dalvik VM IStubService Service/Java framework/base/services/java register JNI Table Android server Service/JNI framework/base/services/jni HAL hardware/libhardware HAL Stub sysfs /sys VM Onload App Onload Android Copyright (c) 2009 Jollen’s Consulting . www.jollen.org/consulting
  • 95. class SensorService extends ISensorService.Stub { ... public SensorService(Context context) { if (localLOGV) Log.d(TAG, "SensorService startup"); _sensors_control_init(); mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); mContext = context; } ... } at framework/base/services/java/SensorService.java
  • 96. Android Copyright (c) 2009 Jollen’s Consulting . www.jollen.org/consulting
  • 97. VFS Driver D Driver B Driver A Driver E Driver C Copyright (c) 2009 Jollen’s Consulting, www.jollen.org/consulting Embedded Linux
  • 98. kernel buses devices classes firmware kobject Core Driver Model – Subsystems (ksets…) /sys Driver D Driver B Driver A Driver E Driver C Copyright (c) 2009 Jollen’s Consulting, www.jollen.org/consulting Embedded Linux
  • 100. Android • Launcher Model • getSystemService • Framework • HAL module sysfs
  • 105.
  • 108. Android Source Tree |-- Makefile         Makefile |-- bionic          Bionic 义 这 |-- bootloader       |-- build            build 录 内 脚 |-- dalvik          JAVA虚拟 |-- development      发 |-- external         |-- frameworks       |-- hardware         |-- kernel          Linux2.6 |-- packages         Android |-- prebuilt         Android 脚 |-- recovery         `-- system          Android
  • 109. <company_name> <board_name> + Android.mk + product_config.mk + system.prop products + AndroidProducts.mk + <first_product_name>.mk + <second_product_name>.mk Android Jollen’s Consulting. www.jollen.org/consulting
  • 110. 1. Get Google Android $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake $ repo sync 2. Manifest file. <manifest> ... <project name="platform/vendor/asus/eee_701" path="vendor/asus/ eee_701"/> ... </manifest> 3. Get EeePC platform. $ repo sync 4. Build Android image. $ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make -j2 installer_img 5. Create USB boot stick. Use make-live script. https://review.source.android.com/Gerrit#change,6475 Android Jollen’s Consulting. www.jollen.org/consulting
  • 111. Build EeePC 701 Product Tips # Google API issue $(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk) PRODUCT_NAME := eee_701 PRODUCT_DEVICE := eee_701 PRODUCT_POLICY := android.policy_mid PRODUCT_PROPERTY_OVERRIDES += ro.com.android.dataroaming=true Cupcake将Google APIs add-ons Android Jollen’s Consulting. www.jollen.org/consulting
  • 112. Build EeePC 701 Product Tips # e2fsprogs issue external/e2fsprogs/Android.mk: --- a/Android.mk +++ b/Android.mk @@ -1,3 +1,3 @@ ifneq ($(TARGET_SIMULATOR),true) -# include $(call all-subdir-makefiles) + include $(call all-subdir-makefiles) endif Android Jollen’s Consulting. www.jollen.org/consulting
  • 113. boot.img installer.img ramdisk.img system.img userdata.img Android Jollen’s Consulting. www.jollen.org/consulting
  • 114. Android 随 $ make-live Android Jollen’s Consulting. www.jollen.org/consulting
  • 115. AMD PCnet32 PCI support VESA VGA graphics support VGA 8x8 font VGA 8x16 font Android Jollen’s Consulting. www.jollen.org/consulting
  • 116. $ VBoxManage convertromraw -format VDI ./installer.img ./android.vdi Android Jollen’s Consulting. www.jollen.org/consulting
  • 117. device/system/init device/system/init/init.c /etc/init.rc 动mount file system ( /etc/fstab) Android Jollen’s Consulting. www.jollen.org/consulting
  • 119. • Application Developers • Product Branch Maintainer • Hardware Developingframework, app LED : kernel, hal, • Architecture Porting
  • 120. www.jollen.org/consulting Jollen@jollen.org