Pjproject su AndroidUno scontro su più livelli
Giacomo Bergami
Alma Mater Studiorum - Università di Bologna
November 13th, 2012
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 1 / 9
Table of Contents
1 Main Goals and SubproblemsMain GoalsSubproblems
2 Android ArchitectureOverviewService InteractionAudio Management
3 Outcomes
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 2 / 9
Main Goals
Can a pjsip-based VoIP application (pjsua) run on Android?The question “seems legitimate”, as pjsua is a non-standardJava-Android application. It’s a C-native app.
¦ Can I crosscompile a GNU/Linux application to Android?¦ Does a native application directly interact with the Kernel?¦ How does Android know that I want to gain access to the microphone?¦ How can I dodge Android’s controls?
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 3 / 9
Subproblems
¦ Android SDK EmulatorCommunication betweenemulators.Audio hardware emulation isnot provided.
¦ Olivetti Olitab (Medion Life Tab)No factory imageNo sourcecode supportNon standard “rooting”procedure (nvflash)⇒ Samsung Galaxy Nexus.
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 4 / 9
Android Architecture
Some terminology
¦ Rooting
¦ Upsyscall
¦ Java/Java with JNI/Native Application.
¦ Kernel Android/AOSP source/Android Middleware
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 5 / 9
Overview
Hardware
/dev/binder
Android Kernel
PermissionController
DVM
JNI+libsmedia_server+ services
Pjproject (pjsip)
Native Apps (pjsua)
Android AudioLibraries
PermissionChecker
Data obtainer
HW audio libs
1
2
3
4
5
An
dro
idA
rch
itec
ture
Ove
rvie
w(K
ern
el+
AO
SP)
GN
U/L
inu
x
Win
dow
s
Modifications1 Redefinition of entry-point_start inside Android NDK.
2 Resizing “Conference” Buffer forprevious overflow.
3 Removal of the access limit toaudio sampling to a client only.
Code Analysis4 Analysis on the IPC Buffer for
sampled audio.
5 Client/Service Interaction.
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 6 / 9
Service Interaction
libhardware_legacy
AudioPolicyService
AudioFlinger
media_server app_process
ZygoteInit SystemServer PermissionController
SystemServer BinderJNI
AndroidRuntime (DVM)
Kernellibbinder
/dev/binder
Native Apps
Java App+Framework
JNI/Native
::istantiate()
::onTransact()
publish()
start/join-ThreadPool()
runtime->start()startVm()startReg()
Call JavaZygoteInit.main()
fork()SystemServer.main()
init1()
start/join-ThreadPool()
ServerThread.run()
::transact()
executeTransact()
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 7 / 9
Service Interaction
libhardware_legacy
AudioPolicyService
AudioFlinger
media_server app_process
ZygoteInit SystemServer PermissionController
SystemServer BinderJNI
AndroidRuntime (DVM)
Kernellibbinder
/dev/binder
Native Apps
Java App+Framework
JNI/Native
::istantiate()
::onTransact()
publish()
start/join-ThreadPool()
runtime->start()startVm()startReg()
Call JavaZygoteInit.main()
fork()SystemServer.main()
init1()
start/join-ThreadPool()
ServerThread.run()
::transact()
executeTransact()
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 7 / 9
Audio Management
AudioPolicyService AudioFlinger AudioRecord
Wilhelm
libhardware_legacy
AudioPolicyManagerBase
ClientThread RecordHandle
RecordThread libnbaio
libbinder & /dev/binder
Realize
set()
getInput()
getInput() openInput()
openRecord()
checkPermission()
Start
run()
getActiveInput()
recordingAllowed()
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 8 / 9
Audio Management
AudioPolicyService AudioFlinger AudioRecord
Wilhelm
libhardware_legacy
AudioPolicyManagerBase
ClientThread RecordHandle
RecordThread libnbaio
libbinder & /dev/binder
Realize
set()
getInput()
getInput() openInput()
openRecord()
checkPermission()
Start
run()
getActiveInput()
recordingAllowed()
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 8 / 9
Outcomes
As a final result, porting has been successful:
¦ Multi Android-host testing (Galaxy Nexus + Olivetti Olipad + WLAN)
¦ VoIP calls through SIP and Pjproject/pjsip
Outcomes:
Modify wilhelm and extend AOSP with a service as a mediator.
Avoiding rooting and upsyscalls with libraries modification.
Relation between Java Applications services’ and IPCThreadState.
Giacomo Bergami (Univ. Bologna) Pjproject su Android November 13th , 2012 9 / 9
Top Related