android简单app实例代码,有没有适合 Android 开发初学者的 App 源码推荐
android简单app实例代码,有没有适合 Android 开发初学者的 App 源码推荐详细介绍
本文目录一览: 如何从零开始写一个Android安卓App?
地球上最流行的移动操作系统,非苹果公司的iOS与谷歌公司的Android系统莫属了,那如何写出自己的第一个App,并且能够跑在iOS与Android系统上呢?
FinClipAndroid研发工程师为大家带来Android篇~如果需要了解iOS也可点击iOS篇。
与开发iOS应用的逻辑基本一致,开发Android应用也需要以下5步:
开发工具安装和配置搭建开发环境在AndroidStudio中,创建第一个项目完成简单Helloworld代码编写编译APK文件,让应用在手机上跑起来0X00开发工具安装和配置第一步,需要先在Android官网下载AndroidStudio(直接点击传送门进入下载链接),如果不会科学上网的话,也可以在国内镜像下载。
但想成为专业的安卓研发,还是要学会科学上网同意协议后选择自己的机型在这里可以根据你的电脑型号(浏览器会自动根据机型推荐链接,比如我的就是Intel芯片的MacBook)下载安装包,在下载完成后双击跟着提示一步一步完成安装就行了。
0X01搭建开发环境与Xcode不同,我们还需要在正式编写Android应用前,配置本地的开发环境。
第一步,安装JDK8
首先需要安装JDK8,JDK就是研发Android应用的官方环境,点击这里下载(我的链接也是适用于Mac电脑,如果你的电脑不一样需要切换一下)。
在第二个箭头处,可以切换不同的操作系统下载完成后,双击下载好的jdk-8u311-macosx-x64.dmg,单击接受许可协议后,在新出现的“安装类型窗口”中,点击“安装”。
此时会出现一个窗口,显示“安装程序正在尝试安装新软件。输入您的密码以允许此操作”。
所以我们需要再输入管理员密码之后,再次点击“安装软件”。等到显示确认窗口之后,即可完成安装。
第二步,配置JDK环境
在第一步中,我们只是把JDK1.8的文件复制到操作系统上。但还需要让其他应用知道JDK1.8环境存在的具体位置,因此我们还需要配置系统的环境变量。
但首先,我们自己得先知道JDK目录安装在哪里,按照下面的路径我们可以找到JDK的主目录,如下图所示:
JDK安装目录/Library/Java/JavaVirtualMachines也就是说,JDK的真实目录在这里/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home,
既然知道了JDK的安装目录,那就让我们打开终端(同时按住键盘上的command和空格,并在之后的弹框中输入terminal.app后敲击回车)开始配置:
vi~/.zshrcorvi~/.bash_profile在文件的末尾加入这一行语句:
exportJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home然后用source命令更新环境配置
source~/.zshrcorsource~/.bash_profile配置完毕后,我们就可以验证Java环境配置是否正确了,依然在终端中输入
java-version如果正确显示出了版本号,就代表配置成功了0X02在AndroidStudio中,创建第一个项目打开AndroidStudio,AndroidStudio第一次打开需要下载AndroidSDK和Gradle等工具包,所以第一次打开可能比较慢(合理科学上网会快一些),AndroidStudio准备好后,开始创建第一个项目。
第一步,新建项目
点击界面中的NewProject选择中间的空模板EmptyActivity在这里输入项目信息之后,点击Finish就可以完成项目的创建了。
0X03完成简单Helloworld代码编写首先让我们认识Android应用的项目文件结构:
Android的页面是由一个个Activity组成的,页面主要分为UI布局部分和逻辑处理部分,UI布局部分需要由上图中蓝色main目录下的activity_main.xml文件处理,而逻辑部分则是由com.myname.myapplication中的MainActivity文件处理。
所以我们也需要修改UI布局与逻辑2个文件,首先编辑activity_main.xml:
然后编辑MainActivity:
packagecom.myname.myapplicationimportandroidx.appcompat.app.AppCompatActivityimportandroid.os.Bundleimportandroid.widget.Buttonimportandroid.widget.ToastclassMainActivity:AppCompatActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)this.findViewById
下面是效果展示:
复制代码代码如下:
复制代码代码如下:
package com.example.week2;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;public class MainActivity extends Activity implements OnClickListener{//声明一些控件Button btn0=null;Button btn1=null;Button btn2=null;Button btn3=null;Button btn4=null;Button btn5=null;Button btn6=null;Button btn7=null;Button btn8=null;Button btn9=null;Button btnBackspace=null;Button btnCE=null;Button btnC=null;Button btnAdd=null;Button btnSub=null;Button btnMul=null;Button btnDiv=null;Button btnEqu=null;TextView tvResult=null;//声明两个参数。接收tvResult前后的值double num1=0,num2=0;double Result=0;//计算结果int op=0;//判断操作数,boolean isClickEqu=false;//判断是否按了“=”按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//从布局文件中获取控件,btn0=(Button)findViewById(R.id.btn0);btn1=(Button)findViewById(R.id.btn1);btn2=(Button)findViewById(R.id.btn2);btn3=(Button)findViewById(R.id.btn3);btn4=(Button)findViewById(R.id.btn4);btn5=(Button)findViewById(R.id.btn5);btn6=(Button)findViewById(R.id.btn6);btn7=(Button)findViewById(R.id.btn7);btn8=(Button)findViewById(R.id.btn8);btn9=(Button)findViewById(R.id.btn9);btnBackspace=(Button)findViewById(R.id.btnBackspace);btnCE=(Button)findViewById(R.id.btnCE);btnC=(Button)findViewById(R.id.btnC);btnEqu=(Button)findViewById(R.id.btnEqu);btnAdd=(Button)findViewById(R.id.btnAdd);btnSub=(Button)findViewById(R.id.btnSub);btnMul=(Button)findViewById(R.id.btnMul);btnDiv=(Button)findViewById(R.id.btnDiv);tvResult=(TextView)findViewById(R.id.tvResult);//添加监听\btnBackspace.setOnClickListener(this);btnCE.setOnClickListener(this);btn0.setOnClickListener(this);btn1.setOnClickListener(this);btn2.setOnClickListener(this);btn3.setOnClickListener(this);btn4.setOnClickListener(this);btn5.setOnClickListener(this);btn6.setOnClickListener(this);btn7.setOnClickListener(this);btn8.setOnClickListener(this);btn9.setOnClickListener(this);btnAdd.setOnClickListener(this);btnSub.setOnClickListener(this);btnMul.setOnClickListener(this);btnDiv.setOnClickListener(this);btnEqu.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {//btnBackspace和CE--------------------case R.id.btnBackspace:String myStr=tvResult.getText().toString();try {tvResult.setText(myStr.substring(0, myStr.length()-1));} catch (Exception e) {tvResult.setText("");}break;case R.id.btnCE:tvResult.setText(null);break;//btn0--9---------------------------case R.id.btn0:if(isClickEqu){tvResult.setText(null);isClickEqu=false;}String myString=tvResult.getText().toString();myString+="0";tvResult.setText(myString);break;case R.id.btn1:if(isClickEqu){tvResult.setText(null);isClickEqu=false;}String myString1=tvResult.getText().toString();myString1+="1";tvResult.setText(myString1);break;case R.id.btn2:if(isClickEqu){tvResult.setText(null);isClickEqu=false;}String myString2=tvResult.getText().toString();myString2+="2";tvResult.setText(myString2);break;case R.id.btn3:if(isClickEqu){tvResult.setText(null);isClickEqu=false;}String myString3=tvResult.getText().toString();myString3+="3";tvResult.setText(myString3);break;cas
急求Android简单应用源代码和原生应用源代码比如通讯录。。
可以上安卓巴士网站看看,在资源一项中有android代码下载,android开发资料库。
你想要的就在SDK下,samples下有各种例子
Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,下载的代码包经过解压后(这里是Android2.2的源码包),源代码的第一层目录结构如下:
|-- Makefile
|-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- libcore
|-- ndk
|-- device
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
`-- vendor (厂商定制代码)
bionic 目录
|-- libc (C库)
| |-- arch-arm (ARM架构,包含系统调用汇编实现)
| |-- arch-x86 (x86架构,包含系统调用汇编实现)
| |-- bionic (由C实现的功能,架构无关)
| |-- docs (文档)
| |-- include (头文件)
| |-- inet
| |-- kernel (Linux内核中的一些头文件)
| |-- netbsd (?netbsd系统相关,具体作用不明)
| |-- private (?一些私有的头文件)
| |-- stdio (stdio实现)
| |-- stdlib (stdlib实现)
| |-- string (string函数实现)
| |-- tools (几个工具)
| |-- tzcode (时区相关代码)
| |-- unistd (unistd实现)
| `-- zoneinfo (时区信息)
|-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)
|-- libm (libm数学库的实现,)
| |-- alpha (apaha架构)
| |-- amd64 (amd64架构)
| |-- arm (arm架构)
| |-- bsdsrc (?bsd的源码)
| |-- i386 (i386架构)
| |-- i387 (i387架构?)
| |-- ia64 (ia64架构)
| |-- include (头文件)
| |-- man (数学函数,后缀名为.3,一些为freeBSD的库文件)
| |-- powerpc (powerpc架构)
| |-- sparc64 (sparc64架构)
| `-- src (源代码)
|-- libstdc++ (libstdc++ C++实现库)
| |-- include (头文件)
| `-- src (源码)
|-- libthread_db (多线程程序的调试器库)
| `-- include (头文件)
`-- linker (动态链接器)
`-- arch (支持arm和x86两种架构)
bootable 目录
|-- bootloader (适合各种bootloader的通用代码)
| `-- legacy (估计不能直接使用,可以参考)
| |-- arch_armv6 (V6架构,几个简单的汇编文件)
| |-- arch_msm7k (高通7k处理器架构的几个基本驱动)
| |-- include (通用头文件和高通7k架构头文件)
| |-- libboot (启动库,都写得很简单)
| |-- libc (一些常用的c函数)
| |-- nandwrite (nandwirte函数实现)
| `-- usbloader (usbloader实现)
|-- diskinstaller (android镜像打包器,x86可生产iso)
`-- recovery (系统恢复相关)
|-- edify (升级脚本使用的edify脚本语言)
|-- etc (init.rc恢复脚本)
|-- minui (一个简单的UI)
|-- minzip (一个简单的压缩工具)
|-- mtdutils (mtd工具)
|-- res (资源)
| `-- images (一些图片)
|-- tools (工具)
| `-- ota (OTA Over The Air Updates升级工具)
`-- updater (升级器)
build目录
|-- core (核心编译规则)
|-- history (历史记录)
|-- libs
| `-- host (主机端库,有android “cp”功能替换)
|-- target (目标机编译对象)
| |-- board (开发平台)
| | |-- emulator (模拟器)
| | |-- generic (通用)
| | |-- idea6410 (自己添加的)
| | `-- sim (最简单)
| `-- product (开发平台对应的编译规则)
| `-- security (密钥相关)
`-- tools (编译中主机使用的工具及脚本)
|-- acp (Android "acp" Command)
|-- apicheck (api检查工具)
|-- applypatch (补丁工具)
|-- apriori (预链接工具)
|-- atree (tree工具)
|-- bin2asm (bin转换为asm工具)
|-- check_prereq (检查编译时间戳工具)
|-- dexpreopt (模拟器相关工具,具体功能不明)
|-- droiddoc (?作用不明,java语言,网上有人说和JDK5有关)
|-- fs_config (This program takes a list of files and directories)
|-- fs_get_stats (获取文件系统状态)
|-- iself (判断是否ELF格式)
|-- isprelinked (判断是否prelinked)
|-- kcm (按键相关)
|-- lsd (List symbol dependencies)
|-- releasetools (生成镜像的工具及脚本)
|-- rgb2565 (rgb转换为565)
|-- signapk (apk签名工具)
|-- soslim (strip工具)
`-- zipalign (zip archive alignment tool)
dalvik目录 dalvik虚拟机
.
|-- dalvikvm (main.c的目录)
|-- dexdump (dex反汇编)
|-- dexlist (List all methods in all concrete classes in a DEX file.)
|-- dexopt (预验证与优化)
|-- docs (文档)
|-- dvz (和zygote相关的一个命令)
|-- dx (dx工具,将多个java转换为dex)
|-- hit (?java语言写成)
|-- libcore (核心库)
|-- libcore-disabled (?禁用的库)
|-- libdex (dex的库)
|-- libnativehelper (Support functions for Android's class libraries)
|-- tests (测试代码)
|-- tools (工具)
`-- vm (虚拟机实现)
development 目录 (开发者需要的一些例程及工具)
|-- apps (一些核心应用程序)
| |-- BluetoothDebug (蓝牙调试程序)
| |-- CustomLocale (自定义区域设置)
| |-- Development (开发)
| |-- Fallback (和语言相关的一个程序)
| |-- FontLab (字库)
| |-- GestureBuilder (手势动作)
| |-- NinePatchLab (?)
| |-- OBJViewer (OBJ查看器)
| |-- SdkSetup (SDK安装器)
| |-- SpareParts (高级设置)
| |-- Term (远程登录)
| `-- launchperf (?)
|-- build (编译脚本模板)
|-- cmds (有个monkey工具)
|-- data (配置数据)
|-- docs (文档)
|-- host (主机端USB驱动等)
|-- ide (集成开发环境)
|-- ndk (本地开发套件——c语言开发套件)
|-- pdk (Plug Development Kit)
|-- samples (演示程序)
| |-- AliasActivity ()
| |-- ApiDemos (API演示程序)
| |-- BluetoothChat (蓝牙聊天)
| |-- BrowserPlugin (浏览器插件)
| |-- BusinessCard (商业卡)
| |-- Compass (指南针)
| |-- ContactManager (联系人管理器)
| |-- CubeLiveWall** (动态壁纸的一个简单例程)
| |-- FixedGridLayout (像是布局)
| |-- GlobalTime (全球时间)
| |-- HelloActivity (Hello)
| |-- Home (Home)
| |-- JetBoy (jetBoy游戏)
| |-- LunarLander (貌似又是一个游戏)
| |-- MailSync (邮件同步)
| |-- MultiResolution (多分辨率)
| |-- MySampleRss (RSS)
| |-- NotePad (记事本)
| |-- RSSReader (RSS阅读器)
| |-- SearchableDictionary (目录搜索)
| |-- **JNI (JNI例程)
| |-- SkeletonApp (空壳APP)
| |-- Snake (snake程序)
| |-- SoftKeyboard (软键盘)
| |-- Wiktionary (?维基)
| `-- Wiktionary**(?维基例程)
|-- scripts (脚本)
Android怎样用代码实现安装apk到systemapp
在 Android 中,如果要使用系统限制的权限(比如 android.permission.WRITE_SECURE_SETTINGS),我们需要把程序安装到 /system/app/ 下。
下面以 SecureSetting.apk 为例,演示这个操作。需要准备一台已经获得 Root 权限的手机。
1、通过 USB 连接手机和电脑。
2、使用 adb 控制手机。
1. $ adb push SecureSetting.apk /sdcard/ // 上传要安装的文件,为安装做准备。
2. $ adb shell
3. $ su // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。
4. # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 让分区可写。
5. # cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk
// 这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on
'/sdcard/NetWork.apk' - Cross-device link。
6. # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。
7. # exit
8. $ exit
$ adb push SecureSetting.apk /sdcard/ // 上传要安装的文件,为安装做准备。
$ adb shell
$ su // 切换到 root 用户。如果没有获得 Root 权限,这一步不会成功。
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 让分区可写。
#
cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk //
这一步可以用 cp 实现,但一般设备中没有包含该命令。如果使用 mv 会出现错误:failed on '/sdcard/NetWork.apk'
- Cross-device link。
# mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 还原分区属性,只读。
# exit
$ exit
重启,可以看到 SecureSetting 已经安装好。
如何用android studio 编写一个app
Android studio作为面市不久的安卓开发工具,越来越受到大家的喜爱,这里我将介绍如何在Android studio中创建一个APP项目,并在以后经验中介绍其他有关Android studio的操作和编程方法。
工具/原料
Android studio
方法/步骤
1
打开软件,在菜单中选择file-》new project打开创建向导。
2
配置项目,确定各个名称和存放项目存放路径;
Application name:项目名称
Company Domain:公司域名
Package name:app打包名称
project location:存放路径
最好将名称中的examples去掉。
3
接下来设定兼容的安卓的最小版本,这依情况而定,我这里设定为安卓2.3版本。
4
如果不确定各个版本的区别,可以点击“help me choose”,在打开的窗口中介绍了各个安卓版本的功能。
步骤阅读
5
确定后最小兼容版本后,选择项目的活动类型,这里有很多现成的模板可以使用,对于初学者选择默认的Blank Activity即可。
6
接下来设定活动名称,界面布局的名称,以及界面标题,最后点击finish完成项目的创建。
7
创建完后,在项目名-》app-》src-》main-》res-》layout下双击xml文件就是打开活动界面设计窗口了。
END
注意事项
注意根据情况合理选择安卓的最小兼容版本
Android studio教程 (共6篇)
Android studio作为面市不久的安卓开发工具,越来越受到大家的喜爱,这里我将介绍如何在Android studio中创建一个APP项目,并在以后经验中介绍其他有关Android studio的操作和编程方法。
工具/原料
Android studio
方法/步骤
1
打开软件,在菜单中选择file-》new project打开创建向导。
2
配置项目,确定各个名称和存放项目存放路径;
Application name:项目名称
Company Domain:公司域名
Package name:app打包名称
project location:存放路径
最好将名称中的examples去掉。
3
接下来设定兼容的安卓的最小版本,这依情况而定,我这里设定为安卓2.3版本。
4
如果不确定各个版本的区别,可以点击“help me choose”,在打开的窗口中介绍了各个安卓版本的功能。
步骤阅读
5
确定后最小兼容版本后,选择项目的活动类型,这里有很多现成的模板可以使用,对于初学者选择默认的Blank Activity即可。
6
接下来设定活动名称,界面布局的名称,以及界面标题,最后点击finish完成项目的创建。
7
创建完后,在项目名-》app-》src-》main-》res-》layout下双击xml文件就是打开活动界面设计窗口了。
注意事项
注意根据情况合理选择安卓的最小兼容版本
Android studio教程 (共6篇)
如何用android studio开发app
一、创建一个APP项目:
1、打开软件,在菜单中选择file-》new project打开创建向导。
2、配置项目,确定各个名称和存放项目存放路径;
Application name:项目名称
Company Domain:公司域名
Package name:app打包名称
project location:存放路径
3、接下来设定兼容的安卓的最小版本,这依情况而定。
4、如果不确定各个版本的区别,可以点击“help me choose”,在打开的窗口中介绍了各个安卓版本的功能。
5、确定后最小兼容版本后,选择项目的活动类型,这里有很多现成的模板可以使用,对于初学者选择默认的Blank Activity即可。
6、接下来设定活动名称,界面布局的名称,以及界面标题,最后点击finish完成项目的创建。
7、创建完后,在项目名-》app-》src-》main-》res-》layout下双击xml文件就是打开活动界面设计窗口了。
对于创建APP项目的过程本人就不多做介绍了,小伙伴们按照上面步骤操作一遍基本上都会了。我想准备接触android studio(下面简称AS)的小伙伴之前应该都是用的Eclipse,AS跟Eclipse有两点区别需要了解清楚:
第一:二者的工程结构不一样,在Eclipse中一个Project就代表一个项目工程,而在Android Studio一个Project代表一个工作空间,相当于Eclipse中的workspace,而在Android Studio中一个Module就相当于Eclipse中的一个Project,这个概念需要弄明白,不要混了或觉得糊涂了。
第二:新建或导入工程后,要删除工程,Android Studio只能去workspace文件夹去删除,而不能在开发环境中删除。
二、代码编写:
作为一个菜鸟,在编写代码前最大的问题就是不清楚目录结构以及操作流程,新手在编写代码之前必须得弄清楚下面的目录结构:
新建工程项目后AS的Product目录结构如下所示:
.idea://AS生成的工程配置文件,类似Eclipse的project.properties。
app://AS创建工程中的一个Module。
gradle://构建工具系统的jar和wrapper等,jar告诉了AS如何与系统安装的gradle构建联系。
External Libraries://不是一个文件夹,只是依赖lib文件,如SDK等。
新建工程项目后AS的Module目录结构如下所示:
build://构建目录,相当于Eclipse中默认Java工程的bin目录,鼠标放在上面右键Show in Exploer即可打开文件夹,
编译生成的apk也在这个目录的outs子目录,不过在AS的工程里是默认不显示out目录的,就算有编译结果也
不显示,右键打开通过文件夹直接可以看。
libs://依赖包,包含jar包和jni等包。
src://源码,相当于eclipse的工程。
main://主文件夹
java://Java代码,包含工程和新建是默认产生的Test工程源码。
res://资源文件,类似Eclipse。
layout://App布局及界面元素配置,雷同Eclipse。
menu://App菜单配置,雷同Eclipse。
values://雷同Eclipse。
dimens.xml://定义css的配置文件。
strings.xml://定义字符串的配置文件。
styles.xml://定义style的配置文件。
......://arrays等其他文件。
......://assets等目录
AndroidManifest.xml://App基本信息(Android管理文件)
ic_launcher-web.png://App图标
build.gradle://Module的Gradle构建脚本
其中需要重点了解以下几个文件:
res/layout/main.xml: App主窗体布局文件,你的应用长什么样都在这边定义,有Design和Text两种模式
res/values/strings.xml :这个文件用来存放程序调用的各种字符串
src/com/example/helloandroid/MyActivity.java :这个就是我们的主程序类,等下要实现的功能都在这个文件里添加
做好准备工作后,终于可以开始写我们的hello android了。
1、首先为应用添加一个id为hellotextView的textview和一个id为hellobutton的button,(在main.xml文件中编写)
代码如下:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<textview
android:layout_width="fill_parent"
android:layout_height="180dp"
android:text="@string/default_message"
android:id="@+id/hellotextView" android:textColor="#00ff00" android:gravity="center"/>
<button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:id="@+id/hellobutton" android:layout_gravity="center"/>
2、代码和控件用到的字符串定义如下:
代码如下:
helloandroid by hiwanz
Say something
Click button below!
You just clicked on the Button!
3、主程序中定义button点击后改变textview显示的文本,并且弹出Toast提示信息。
代码如下:
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//得到按钮实例
Button hellobtn = (Button)findViewById(R.id.hellobutton);
//设置监听按钮点击事件
hellobtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//得到textview实例
TextView hellotv = (TextView)findViewById(R.id.hellotextView);
//弹出Toast提示按钮被点击了
Toast.makeText(MyActivity.this,"Clicked",Toast.LENGTH_SHORT).show();
//读取strings.xml定义的interact_message信息并写到textview上
hellotv.setText(R.string.interact_message);
}
});
}
}
代码写好后,电脑通过USB数据线连接手机,手机系统设置里的开发人员选项里打开USB调试,在IDE中直接点Run就可以在手机上看到运行的效果了。
</button
</textview
怎样查看 Android APP源代码?
将apk文件拷贝至sdcard上。命令顺序如下:进入Android sdk文件夹/tools目录下输入adb shell输入su输入cd data输入cd app这时就可以看到你安装的所有的apk文件。输入cp 空格 对应的apk 空格 /sdcard/这样就将apk文件拷贝出来了。将apk文件后缀直接变成rar格式,可以看到熟悉的目录结构了,其中xml文件打开后都是二进制的,无法查看。这时就用到了一个android4me的AXMLPrinter2工具。(请自行百度搜索)输入以下命令,将xml文件解析出来java -jar AXMLPrinter2.jar showtimes_list.xml此命令是在命令行中查看此showtimes_list.xml将showtimes_list.xml生成xml文件,则输入以下命令:java -jar AXMLPrinter2.jar showtimes_list.xml > h.xml目前进行到这一步,只能看到xml文件的内容,其工程中的java源文件还是看不到,看目录结构下有一个classes.dex文件,我们需要将dex文件变为jar文件。这里用到了另一个工具dex2jar。(自行搜索下载)在Windows下解压之后的目录如下图所示:在命令行中,进入到此目录下:在Windows下,输入以下命令:dex2jar.bat c:\classes.dex运行完之后,在C盘会多一个classes.dex.dex2jar.jar文件,此文件就是我们需要的jar文件。利用jd-gui,将jar文件反向工程为java代码。(请自行搜索下载)它分为Windows、Linux、和max三个版本,这里我下载的是Windows版本的。解压之后,双击运行exe文件,选择classes.dex.dex2jar.jar文件,相应的jar文件中的Java文件就被反向工程显示出来了!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。 [1] 2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。
Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。
Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号, [1] 于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。
用Android studio做一个可以运行的小程序,闹钟也行,然后可以连到手机,感谢大神。
环境搭建就不讲了,直接说开发。
小闹钟程序开发中的要点就是:
1、时间选择对话框(TimePicker)
2、获取闹钟管理器并对其进行设置
3、注册广播接收器
掌握了这两点,写程序就很简单了。
1、新建android项目:Alarm,sdk版本选择2.2,Package name:com.lql.activity,Main Activity:Alarm
2、编写界面:直接修改layout中的main.xml文件,代码如下:
Xml代码
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
>
<button
android:id="@+id/timeBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/time"
android:textSize="20sp"
/>
<button
android:id="@+id/cancelAlarmBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cancelAlarm"
/>
界面的效果如下:
3、修改Alarm.java这个activity,在该Activity中需要做这样几件事:
获取界面上的两个按钮组件,并给其绑定事件监听器
第一个时间按钮,点击后,显示时间选择对话框(TimePicker),供选择小时和分钟,并设置闹钟
第二个按钮,点击之后需要当前设定的闹钟
比较难写的代码就是闹钟设置:
//设置时间
Java代码
timeBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
Log.d(TAG, "click the time button to set time");
calendar.setTimeInMillis(System.currentTimeMillis());
new TimePickerDialog(Alarm.this,new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker arg0, int h, int m) {
//更新按钮上的时间
timeBtn.setText(formatTime(h,m));
//设置日历的时间,主要是让日历的年月日和当前同步
calendar.setTimeInMillis(System.currentTimeMillis());
//设置日历的小时和分钟
calendar.set(Calendar.HOUR_OF_DAY, h);
calendar.set(Calendar.MINUTE, m);
//将秒和毫秒设置为0
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
//建立Intent和PendingIntent来调用闹钟管理器
Intent intent = new Intent(Alarm.this,AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Alarm.this, 0, intent, 0);
//获取闹钟管理器
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);
Toast.makeText(Alarm.this, "设置闹钟的时间为:"+String.valueOf(h)+":"+String.valueOf(m), Toast.LENGTH_SHORT).show();
Log.d(TAG, "set the time to "+formatTime(h,m));
}
},calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();
}
});
代码里面有注释,这里就不多解释了,其中new TimePickerDialog为创建时间选择对话框。为了能够看到效果,我给闹钟添加了重复提醒:alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);。
还要为取消闹钟按钮添加事件监听器:
Java代码
//取消闹钟按钮事件监听
final Button cancelAlarmBtn = (Button)findViewById(R.id.cancelAlarmBtn);
cancelAlarmBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Alarm.this,AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Alarm.this, 0, intent, 0);
//获取闹钟管理器
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Toast.makeText(Alarm.this, "闹钟已经取消!", Toast.LENGTH_SHORT).show();
}
});
在点击取消闹钟按钮时,取消之前设置的闹钟,核心代码就4行。
4、编写广播接收器,用来接收闹钟的广播事件,然后进行相关处理,
Java代码
public class AlarmReceiver extends BroadcastReceiver {
/* (non-Javadoc)
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
*/
@Override
public void onReceive(Context arg0, Intent data) {
Log.d(Alarm.TAG, "the time is up,start the alarm...");
Toast.makeText(arg0, "闹钟时间到了!", Toast.LENGTH_SHORT).show();
}
}
这个代码就很简单了,主要是要继 承 BroadcastReceiver 这个类,然后重写onRecive方法。onRecive方法在闹钟的时间达到之后会执行,在这里我们可以做自己的事情,比如启动某个程序,或者播放铃声,我这里就是简单的提示一下,使用的是Toast。
5、在android的AndroidManifest.xml文件中注册广播接收器:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
Xml代码
package="com.ql.activity"
android:versionCode="1"
android:versionName="1.0">
<activity android:name=".Alarm"
android:label="@string/app_name">
核心的配置为
,这也是闹钟程序的关键,如果不做这个配置,那么时间到了之后,闹钟将不会提示。
接下来就是到模拟器上测试,运行截图如上图。程序源代码见附件。有没有适合 Android 开发初学者的 App 源码推荐
Android bus上面的一些小案例比较简单。
GitHub上google和googlesample这两个帐号下有若干Android app,大部分都是遵循google推荐的最佳实践,并且符合Material Design,很值得学习。手机码字,晚上回去给好连接
首先介绍 iosched这个项目,google/iosched · GitHub 。
iosched项目是Google I/O的官方app,不仅仅是一个学习的demo,这是一个真正开源的线上项目。
这个项目里面使用了大量Google官方推荐的最佳实践,比如使用loader加载数据,大量使用本地sqlite缓存数据,通过syncAdapter来更新本地缓存的数据,配合GMS达到节约流量省电的目的。另外这个app也是学些MaterialDesign的不错的范例。另外这个app还很好的适配了手机和pad,如果你想要做这方面的适配工作,不妨也参考一下
至于项目的committer,你可以找到比如romannurik这种Google Android项目开发者,证实这并不是Google的实习生写的项目,而是Android平台的核心工程师所做,质量自然很有保证。
第二个推荐的就是topeka项目 googlesamples/android-topeka · GitHub 。
这个项目是Google前几天刚发出来,用来展示如何将MaterialDesign应用到你的app中,以达到最佳设计和交互效果。通过这个app,你还可以学到如何设计你app的交互和视觉以更好的和MaterialDesign搭配。