native symbian c++ development bootcamp sept 2009
Post on 17-Nov-2014
265 Views
Preview:
DESCRIPTION
TRANSCRIPT
ApadmiNative C++ Symbian Development
Berlin Bootcamp 23/09/09
Adam Flemingadamf@apadmi.com
� 10 Years Cross Platform Mobile Experience� We worked on the first Symbian device in 1998
� Developing Innovation - Device Technology & Applications
� Providing Expert Consultancy & Development Service� Roadmap Planning
Feasibility Studies
Apadmi Introduction
� Feasibility Studies
� Technical Workshops & Training
� Prototyping
� Design, Development, Testing/Certification
� Working in Partnership to Deliver Quality Solutions:
Presentation Overview
� Overview
� How does Native C++ fit into the development
picture?
� First Steps
� Getting set up, installation, “HelloWorld”
UI Designer� UI Designer
� Moving on
� Accessing System Services (doing cool stuff)
� Some Essential Symbian Idioms (briefly)
How Does Native C++ Fit?
� Symbian platform now supports many
development environments
� Qt, Open C, Java ME, Python, Flash Lite
� So Why Native C++?
� Executables are faster and smaller
� The only way to get to the full power of the system� The only way to get to the full power of the system
� No interface/encapsulation/abstraction layers
� No Sandbox
� Underlying OS is almost entirely Native C++
� The only way to do some things� Extending built-in functionality (eg, new codecs)
� Integrating tightly with built-in apps
Important Considerations
� Learning Curve
� Symbian C++ is not standardised C++!
� Highly optimised system
� Complexity arises from underlying systems
� Security Model
� Implications during and after development
� Code is not portable to other platforms
� But this is true for all forms of native dev
� Multiple tools to learn and understand
� Carbide is great, but there’s no substitute for
understanding the whole process
Setting Up The Environment
� 3 Files to download
� Perl – install this 1st
� ActiveState Perl Version 5.6.1.638
� (Don’t attempt to use a later version!)
� ADT – install this 2nd
� Toolchain including IDE� Toolchain including IDE
� SDK – install this (or these) last
� Platform code
� S60 v5/Symbian^1 – new base-version
� S60 3rd Edition – 3 flavours still important for supporting current handsets (MR, FP1, FP2)
http://developer.symbian.org/wiki/index.php/Symbian_C%2B%2B_Quick_Start
First Run – a tip born of experience
� Run the emulator
� \epoc32\release\winscw\udeb\epoc.exe
� Enter the Locale, time/date
� Start any relevant applications
� Open contacts app, the web browser, check everything works but don’t enter any dataworks but don’t enter any data
� Archive the whole epoc32 directory tree
� BEFORE you do any development
� Put it somewhere safe
� Write a batch file to replace the epoc32 tree in your
SDK
Hello World!
� Carbide IDE will auto-generate the framework
code and give you a runnable application
� UI Designer allows you to drag and drop
components to develop a UI
� Demo – HelloWorld� Demo – HelloWorld
� 5 minutes to your first application� http://developer.symbian.org/wiki/index.php/Symbian_C%2B%2B_Quick_Start
� http://developer.symbian.org/wiki/index.php/Going_Beyond_Hello:_A_Tutorial_for_Symbian_C%2B%2B_Applications
Basic Application Structure class Hello World
CHelloWorldAppUi
CAknViewAppUi CAknView CButton1 CAknButton
CHelloWorldApplication
CApaApplication
CHelloWorldDocument
CAknDocument
CHelloWorldContainerView CHelloWorldContainer CCoeControl
CLabel1 CEikLabel
App Doc AppUi
InitialisationInitialisation
View ContainerYour
controls
Another Experience to Share
� UI Designer won’t update the generated code
until you hit save – do this often!
� Be careful not to edit the generated code
� Unless you know you’re done with the UI Designer
� If you think you’re done, you’re probably not
� Check your UI in all the screen configurations!
Accessing a System Service
� Virtually anything interesting is a Server
� File System
� Internet Connectivity
� Positioning
� Telephony
� etc
� Servers are separate processes (address
spaces)
� Need create a session to handle IPC
� Frequently multiple classes involved in a single
server
An Example
� Going to look at File Server as an example
class Bootcamp
RFs
RFormat
RSessionBase
RFi le
RDir
RSubSess ionBase
CDirScan CFileMan
CBa se
RFs (abridged) f32file.hclass RFs : public RSessionBase
{
public:
IMPORT_C TInt Connect(TInt aMessageSlots=KFileServerDefaultMessageSlots);
IMPORT_C TVersion Version() const;
IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat);
IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat,const TDesC& aPathName);
IMPORT_C void NotifyChangeCancel();
IMPORT_C void NotifyChangeCancel(TRequestStatus& aStat);
IMPORT_C TInt DriveList(TDriveList& aList) const;
IMPORT_C TInt DriveList(TDriveList& aList, TUint aFlags) const;
IMPORT_C TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const;IMPORT_C TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const;
IMPORT_C TInt MkDir(const TDesC& aPath);
IMPORT_C TInt MkDirAll(const TDesC& aPath);
IMPORT_C TInt RmDir(const TDesC& aPath);
IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const;
IMPORT_C TInt Delete(const TDesC& aName);
IMPORT_C TInt Rename(const TDesC& anOldName,const TDesC& aNewName);
IMPORT_C TInt Replace(const TDesC& anOldName,const TDesC& aNewName);
IMPORT_C TInt Att(const TDesC& aName,TUint& aAttValue) const;
IMPORT_C TInt Modified(const TDesC& aName,TTime& aTime) const;
IMPORT_C TInt PrivatePath(TDes& aPath);
IMPORT_C TInt CreatePrivatePath(TInt aDrive);
};
Descriptors
� Symbian OS String Representations
� Designed to be as resource efficient as possible
� At the cost of increased complexity
http://developer.symbian.org/wiki/index.php/Descriptors_(Fundamentals_of_Symbian_C%2B%2B)
Actually Using RFsActually using RFs
RFs rfs;
rfs.Connect();
rfs.CreatePrivatePath(EDriveC);
TFileName newFileName;
rfs.PrivatePath(newFileName);
_LIT(KCDrive,"C:");
_LIT(KNewFileName,"HelloWorld.txt");
� Creates an empty file
in the private directory
� Useful for storing
application local
information
newFileName.Insert(0,KCDrive);
newFileName.Append(KNewFileName);
RFile newFile;
newFile.Create(rfs,
newFileName,
EFileShareExclusive|EFileWrite);
newFile.Close();
rfs.Close();
� Not useful for debug
logs – user can’t get
to this path!
A note about sessions and subsessions
� All subsessions are associated with a session
� Closing the session before the subsession will
cause an errorcause an error
� Closing the subsession doesn’t close the
session
Active Objects
� Effectively event handlers
� Fit into an optimised wait-loop which is encapsulated within system architecture
� Removes the need to create new threads for handling asynchronicity in most caseshandling asynchronicity in most cases
� Can massively simplify coding highly asynchronous
systems
� Carbide can auto-generate framework objects for you to adapt
� Worth spending time to truly understand
http://developer.symbian.org/wiki/index.php/Active_Objects_(Fundamentals_of_Symbian_C%2B%2B)
UIDsUIDs
� Unique Identifiers
� Each application has its own
� Used to mark its executable
� Also present in data files
� Also used to determine private file area� Also used to determine private file area
� 2 Ranges
� Protected 0x 2xxx xxxx (Obtained from Symbian)
� Unprotected 0x Exxx xxxx (allocated by Carbide)
Security ModelSecurity Model
� Data Caging
� Applications have a secure directory not visible to
other apps
� Applications cannot access critical system locations
� Capabilities� Capabilities
� Some APIs require a capability to be present in the
executable.
� Static or Dynamic
� Applied to executables
Symbian Signing
� Provides revocation and traceability framework
� Process for granting Capabilities
� Externally enforced
� Different levels
� Self-Signed� Self-Signed
� Capabilities have to be approved by user
� Open/Express/Certified
� Capabilities granted without user intervention
� Application signed with a publisher ID
Just the tip of the iceberg
� 45 minutes really isn’t enough!
� Not even talked about some key concepts
� Follow Up Assistance
� Apadmi Training
� Symbian OS Training & Bootcamps (3-5 days)� Symbian OS Training & Bootcamps (3-5 days)
� Open Courses in Manchester – Oct, Nov, Dec
� Standard/Customised courses in your office
� Consultancy
� Advise/assist your development projects
� Workshops, Technical Support, Q&A, Problem Solving
� Talk to me or email: info@apadmi.com
top related