Want to be the next Nick D'Aloisio who at the ripe old age of 17 sold his smartphone app to Yahoo for $27 million?

Want to know the ins and outs of rolling your own Android app?

Want to develop your own app as part of a group project?

Then read on ....

[If you are not a Dartmouth student feel free to use the material found below. All the notes and code are online. Let me know what you think]


The coolest technology to emerge over the last decade is the smartphone -- it's had a huge impact on our lives. Today, over half of all Americans own a smartphone and I bet you are reading this webpage on your phone.

If you've been curious about programming phones and creating great apps then this course is for you. We'll focus on programming Android phones -- sorry iPhone.

The course has no exams or midterms -- it's all about programming. But there will be a lot of programming. The prerequisite for this course is Computer Science 10 (no exceptions given).

Because we plan to give each student a Google nexus 4 (thanks to the Neukom Institute and Computer Science department) for the duration of the course we have capped the course. However, if we exceed the cap we might be able to accommodate more students -- I'm assuming a good chunk of the class own an Android.


What we'll teach you

The goal of this course is to teach students how to design, implement, test, debug and publish smartphone applications on java based android phones. Students will learn how to take their innovative ideas from conception to the android market through a series of rigorous hands-on programming assignments and group projects.

This is an introductory course aimed at undergraduate students (but graduate students are most welcome) who have Java programming experience. However, there is a significant amount of programming in this course requiring a commitment on the part of the student.

Topics covered: the android development environment including eclipse, android SDK and phone emulator; key programming paradigms; UI design including views and activities; data persistence including SQLite; content providers; messaging and networking; phone sensors, location based services (e.g., Google Maps), background services; broadcast receivers; cloud programming using App Engine; and publishing applications to the android market.

Android programming concepts are reinforced through a set of thematic programming exercises that introduce these topics and incrementally allow the student to build a complex application; that is, programming labs form a set of components that collectively implement a continuous sensing application. The resulting phone app allows user to log their exercises (e.g., walks, runs) and display them on Google maps.

A key part of this course is group projects where students will work in small teams for joint problem solving.


Computer Science 10 (no exceptions). Android is based on Java programming.

We are using Piazza for information dissemination and Q&A

Sign up to CS65 Piazza The best way to get answers to programming problems is crowdsourcing -- so the first time someone comes across a problem and we know the answer - everyone sees it. I encourage students to actively use piazza. It's a great system.


There are no exams or mid terms in this class -- it's all about hacking.

70% - Thematic programming exercises

There are 6 weekly programming assignments over the first 7 weeks. These labs are designed to help students learn the android programming environment and key programming paradigms. Assignments are done individually. Each lab will receive the same percentage of the grade.

Each student will demonstrate their standalone MyRuns5 (after lab 5 is complete). We will meet on the green to assess your app. You will be asked to demo two activities: walking around the green and running (if you don't feel up to running we will find someone to run with your phone).

Your MyRuns5 app should correctly capture the activity (walking and running) and the details of the exercise. Andrew should be able to see the exercised saved in your history tab displayed on Google Maps.

Labs are graded on completeness of the required features, the correctness of the functionality, and the robustness: note, if your lab crashes it will not be graded and you will have to resubmit a working version with 20% penalty against your lab grade.

30% - Group projects

Students will develop their own app.

Projects are made up of a small (2 people) teams and require strong collaboration and a problem solving mindset. The goals of this activity are to help you develop the confidence, skills, and habits necessary to write real phone apps while part of a multi-person team.

Each team member will get the same grade assuming all goes well. The grade will breakdown as follows:

4% The Pitch

4% Design document. Similar to the MyRuns design document.

4% The Checkpoint: Design/code/project review. Important, some running code must be demoed; that is, as much running code that can be demoed during this review the better.

14% Demo and Code

4% Report

Teaching Team

Lecturer: Andrew T. Campbell. Andrew's research group has been at the forefront of developing a class of mobile apps called continuous sensing apps -- for example download and checkout the BeWell app on Google Play. This class will apply ideas and technologies from research to the classroom.


Fanglin.Chen.GR@dartmouth.edu. Office hours: Thursday 10:00-12:00 at Sudikoff 249 Rui.Wang.GR@dartmouth.edu. Office hours: Wednesday 11-1 PM at Sudikoff 249

Both TAs will also cover lab hours Monday 6-10 PM in L002

Section leaders (Androidistas):

Section Times


Sudikoff Lab 002 is the best place for this but the only room available.

Submission of programming assignments

We are using Subversion Version Control (SVN) for the submission of programming assignments. You should read those note before proceeding.

SVN is a tool for source code management. Your svn repository root is at https://svn.cs.dartmouth.edu/classes/cs65-S13/Your_Name/ so for me: https://svn.cs.dartmouth.edu/classes/cs65-S13/Andrew_Campbell

(Note, for classes after 2013 this is relevant: change cs65-s13 to the correct year and term for example W14 changes the svn commands below to cs65-W14)

How are we going to submit programming labs using SVN?

Policy for late assignments

You should always aim to get your lab in on time.

Penalties: < 8 hours: 10%; < 24 hours: 20%; < 48 hours: 40%; more: no credit.

Under extenuating circumstances, alternative arrangements may be made with the instructor, if possible before the due date.

Our late policy is a bit harsh but here's the reasoning. Each lab builds on the previous lab so falling behind is a taxation unto itself. To balance this late policy I add this sweetner: you get one free 12 hour pass and 1 free 24 hour pass without penalties. These are atomic units -- you can't divide them up, before you ask. Take it when you like but put a note in your README.txt file and email the TA.

It is not good to fall behind because it limits the time you can spend on the next lab which comes out as you finish the currenmt one. Therefore, three final pieces of advice from CS1:

  Don't fall behind in this course.
  Don't fall behind in this course.
  Don't fall behind in this course.

Group Project

Group projects are made up of 3 students.

The project starts in week 5, pitches week 6. The last two weeks of class are held over for working on collaborative project -- there will be no classes during the last two weeks of term.

The grade will breakdown as follows:

There is a focus on working code and a demoable app. Rules of demo day. The professor should be able to download the application from Google Play and it should work off the shelf.

The ground rules; the teams and projects will:

Project Deadlines

  1. Teams and webpage set up no later than Wednesday 23 April

  2. 90 seconds project pitches during x-hour Thursday 2nd May

  1. Submit Design Document: Friday 16 May before midnight
  1. Checkpoint: Wednesday 21 May 12-6 pm
  1. App Demo Day: Wednesday 28 May 4-8 pm. Meet at classroom
  1. Project report and code submitted: Thursday 29 May before midnight

MyRuns project document

The MyRuns document captures the complete app specification and lab assignment information. Please read this a couple of times and refer back to it.

Week 1 (March 24-28)

Week 2 (March 31-April 4)

Week 3 (March 31-April 4)

Week 4 (April 14-18)

Week 5 (21-25 April)

Week 6 (April 28- May 2)

Week 7 (May 5-9)

Week 8 (May 12-16)

Similar to MyRuns design document. Top Level Design Document (approximately 5 pager). Link the document to your project webpage; Include: Revised project description; project should focus on a single simple idea; UI, top level systems/component design diagram; and a brief description of classes Each project group should have an SVN. There should be the following directories:

No Classes

Week 9 (May 19-23)

No Classes

Week 10 (May 26-30)

All students should be able to download each groups app and play with it. Best project will be voted on by the complete group. App must be available for download from Play or project website. Bonus points for Play but takes 48 hours to process. App has to work!

Online book

The Busy Coder's Guide to Android Development

It is an online book $45.00

I like the online book because you pay once and you get the revised versions for free (sort of). This is important because the APIs are still fluid. Many APIs are being added and depreciated at the same time. So the book at least quickly tracks major changes.

I really like these other books too. The first one is more introductory -- the second, more depth, more kungfu. But if you want to go deeper after this class buy both.

Having all three books might seem excessive -- call me excessive.