zoukankan      html  css  js  c++  java
  • Android

    • 安卓基础
      1. 应用的运行:
        独立的进程process+主线程,独立的虚拟机Dalvik VM,独立的用户权限package
        任务堆栈Task Stack可以跨应用组件,给用户流畅的使用体验,Back返回活动,Home回主页
      2. 组件的运行:Main Activity由系统启动,退出应用时:结束活动、停止服务、注销广播监听
        Activity,setContentView(layout)界面,startActivity(intent)跳转,finish终止
        Service,startService+onStart运行,bindService+onBind绑定,stopSelf+stopService(intent)停止
        BroadcastReceiver,Activity.registerReceiver注册,广播监听由系统广播激活并自动终止
        ContentProvider,由ContentResolver请求时激活并自动终止
        Intent,消息,putExtras(name,value)+get[Type]Extra(name,defaultValue)基本类型;Action有MAIN、VIEW、EDIT、CALL等,
      3. 布局可嵌套,通常有Main Action Bar标题栏,View Control视图切换,Content Area内容列表和Split Action Bar操作按钮
        LinearLayout:线性布局,
        TableLayout:表格布局,TableRow行
        RalativeLayout:相对布局,toLeftOf上下左右,alignRightOf右对齐,
      4. 视图组件及相关功能类:
        TextView:文本标签
        Button:按钮,OnClickListener
        RadioGroup、RadioButton、CheckBox:单选按钮组合,复选框,OnCheckedChangeListener
        ProgressBar:滚动条,样式有水平、垂直、旋转等,setProgress进度
        Spinner:下拉列表,setAdapter,setDropDownViewResource,onItemSelectedListener
        ListView:列表,继承ListActivity,setListAdapter(new SimpleAdapter(ctx,list<map>,rowLayout,{keyArray},{idArray}))
        GridView:表格,setAdapter(ImageAdapter),onItemClickListener
        WebView.loadUrl(url),.loadData(html,"text/html","utf-8"),加载网页
        VideoView:视频,setVideoPath("*.3gp"),.setMediaController(new MediaController(this))
      5. 简短提示和对话框:
        Toast.makeText(activity,string,Toast.LENGTH_SHORT).show(),简短提示
        AlertDialog.Builder初始化title icon view button等并showDialog,
        Activity属性android:theme="android:style/Theme.Dialog"伪装对话框
      6. 数据适配器
        下拉列表,ArrayAdapter.createFromResource(this,R.array.planets,android.R.layout.simple_spinner_item)
        列表,new SimpleAdapter(ctx,list<map>,rowLayout,{keyArray},{idArray})
        图片表格,ImageAdapter.getView(position){return ImageView.setImageResource(imgs[positon]);},Integer[] imgs = {R.img}
    • 界面适配
      1. 屏幕密度,单位英寸内有多少像素,density=sqrt(width^2+height^2)/inch,尺寸inch通常是对角线长度,密度有低中高l=120、m=160、h={240,320},
        获取分辨率和密度:getWindowManager().getDefaultDisplay().getMetrics(dm = new DisplayMetrics()),dm属性density、widthPixels+heightPixels等
        -hdpi 72*72 -mdpi 48*48 -ldpi 36*36
      2. 模拟器分辨率(small-normal-large-xlarge),密度(ldpi-mdpi-hdpi-xhdpi),尺寸,旋转(land-port)
        QVGA            240*320        120        3.33
        WQVGA         240*400        120        3.88
        WQVGA432    240*432        120        4.11
        HVGA            320*480        160        3.61
        WVGA800      480*800        240       3.88
        WVGA854      480*854        240       4.08

        WXGA720      720*1280      320       4.59
        WXGA800      800*1280      160       9.43
      3. 适配不同分辨率尺寸
        组件使用wrap_content和fill_parent适配环境,使用layout_width和layout_weight适配宽度和剩余空间
        组件使用相对布局灵活定位,layout_below居下,layout_alignParentRight最右,layout_toLeftOf左侧,layout_alignTop上对齐
        不同尺寸有不同布局,res/layout/main.xml和res/layout-large/main.xml或res/layout-sw600dp/main.xml(3.2+)
        避免布局文件内容重复,原布局文件res/layout/main_twopane.xml,另外large和sw600dp引用即可res/values-large/layout.xml
        <resources> <item name="main" type="layout">@layout/main_twopanes</item></resources>
        考虑横屏,建立布局onepane(sw600dp-port) onepane_with_bar twopanes(large-land) twopanes_narrow(large-port),适配引用
        背景使用九宫图,9-patch png,sdk/tools/draw9patch.bat,左侧拉伸右侧不变
      4. 多语言:values默认英文,values-zh中文,values-zh-rTW繁体
      5. 虚拟机配置
        sdcard,存储卡可以共用文件
        skin,皮肤可以选择模拟器分辨率、或自定义输入(如1024X768模拟pad平板)
        Max VM application heap size,若出现Out of Memory错误说明太耗内存,可暂时给虚拟机上的应用配置较大内存
        Device Ram Size,虚拟机设备内存,
        start -> scale display to real size,运行时可以缩放屏幕(如screen size: 10in、scale: 0.77),以便显示完整大屏幕
    • 常见问题
      1. 模拟器应用映射访问本机服务:
        若有局域网可直接使用ip,否则使用10.0.2.2映射到本机tomcat服务端,然后再修改模拟器hosts
        adb pull /system/etc/hosts
        adb push hosts /system/etc #修改hosts文件后,这个可能比较麻烦(/system/etc只读)
      2. 集成Maven:从Eclipse Marketplace搜索android m2e并安装Android Connector for Maven,下载构件模板de.akquinet.android.archetypes:android-quickstart:1.0.8
      3. 安卓开机自启动:定义系统启动广播接收者并添加相应权限,收到启动完成消息后注册自己的后台服务
        <receiver android:name="package.receiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <category android:name="android.intent.category.HOME" />  
            < /intent-filter>
        </receiver>
        < uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
      4. 加载网络图片:需要访问网络权限,通常会本地缓存图片文件(png优先jpg可接受gif不推荐)
        URL url = new URL(img);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        Bitmap bm = BitmapFactory.decodeStream(conn.getInputStream());
        ImageView.setImageBitmap(bm);
        <uses-permission android:name="android.permission.INTERNET" />
        图片支持jpg gif pg bmp,音频格式aac mp3 wav ogg mid,视频3gp mp4
        MediaPlayer.create(raw.id),setDataSource(pathOrUrl),reset+prepare,start+pause+stop
        录音MediaRecorder.setAudioSource(MIC).setOutputFormat(THREE_GPP).setAudioEncoder(AMR_NB).setOutputFile(path)
        .prepare.start.stop.release,ContentResolver.getDataFilePath(contentResolver.insert(MediaStore.Audio.INTERNAL_CONTENT_URI,values)),values=new ContentValues(3).put(MediaColumn.TITLE,"title")
      5. 动画与图像:
        可用XML定义图像,如TransitionDrawable:transition,getResources().getDrawable(R.drawable.trans_id).startTransition(1000),ImageView.setImageDrawable(tran)
        补间动画,如alpha scale translate retate set,AnimationUtils.loadAnimation(this,R.anim.set_anim),ImageView.startAnimation(setAnimation)
        帧动画,animation-list+item,ImageView.setBackgroundResource(R.anim.frame_anim),(AnimationDrawable)imageView.getBackground().start()、isRunning()、stop()
      6.  
    • 渠道打包:
      1. 创建keystore,使用向导创建并记住密码export->export android application->create new keystore
      2. 创建build.properties,
        sdk.dir=D:\\adt-bundle-windows-x86_64\\sdk
        key.store=tuijian.key
        key.store.password=tbhjc303
        key.alias=tuijian
        key.alias.password=tbhjc303
        dont.do.deps=false //有library依赖时
      3. 创建build.xml构建脚本,android update project -p project-dir -t target自动生成构建文件build.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <project name="slidingmenu" default="help" >
            <property file="build.properties" />
            <loadproperties srcFile="project.properties" />
            <fail message="sdk.dir is missing." unless="sdk.dir" />
            <!-- 实际构建执行脚本引入 -->
            <import file="${sdk.dir}/tools/ant/build.xml" />
            
            <!-- 调用release任务打包,分发渠道时需要埋入渠道串 -->
            <target name="package">
                <antcall target="release"></antcall>
            </target>
        </project>
      4. 渠道处理:先备份原文件(含${channelcode})供每次打包前恢复,最后重命名时可以考虑加入版本号
        <target name="replace_channel_string">
            <replace file="./res/values/strings.xml" token="${channelcode}" value="${channel-code}"></replace>
            <replace file="./AndroidManifest.xml"    token="${channelcode}" value="${channel-code}"></replace>
        </target>
        <target name="release-channel">
            <antcall target="restore_channel_config"></antcall>
            <antcall target="replace_channel_string">
                <param name
        ="channel-code" value="${channel-code}"></param></antcall>
            <antcall target="release"></antcall>
            <rename dest="./dist/tuijian_${channel-code}.apk" src="./bin/tuijian-release.apk" />
        </target>
        <antcall target="release-channel"><param name="channel-code" value="wandoujia"></param></antcall>
      5. 可以考虑在build.properties添加渠道串,在build.xml里遍历循环
        引入foreach任务元素,需要下载ant-contrib-1.0b3.jar
        <taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" classpath="ant-contrib-1.0b3.jar" />
        build.properties添加所有渠道
        apk.channels=taoban,wandoujia,anbei,sogou,meizu,qq,sohunews,google,91,hiapk,gfan,goapk,appchina,mumayi,eoe,nduo,feiliu,crossmo,huawei,3g,360,baidu,sohu,163,uc,dangle,samsung,moto,xiaomi,lenovo,nearme,cmcc
        apk.version=1.0
        遍历渠道打包
        <target name="release-channels">
            <antcall target="backup_channel_config"></antcall>
            <foreach target="release-channel" list="${apk.channels}" delimiter="," param="channel-code"/>
            <antcall target="restore_channel_config"></antcall>
        </target>
      6. 代码混淆:
        project.propertiers
        去掉注释proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
        proguard-project.txt
        # for sina weibo sdk: weibo_sdk_0821.jar
        -dontwarn com.weibo.sdk.android.**
        -dontwarn android.net.http.**
        # for model classes
        -keep class com.taoban.tuijian.model.** {
            void set*(***);
            void set*(int, ***);
            boolean is*(); 
            boolean is*(int);
            *** get*();
            *** get*(int);
        }
      7. 友盟统计:
        添加sdk依赖到libs,umeng_sdk.jar
        配置AndroidManifest.xml,权限要求INTERNETREAD_PHONE_STATEACCESS_NETWORK_STATE
        <meta-data android:value="523e64ee56240bb65a0075c0" android:name="UMENG_APPKEY"></meta-data>
        <meta-data android:value="taoban" android:name="UMENG_CHANNEL"/>
        给所有Activity的onPause和onResume方法添加统计代码
        @Override
        protected void onPause() {
            super.onPause();
            MobclickAgent.onPause(this);
        }
        @Override
        protected void onResume() {
            super.onResume();
            MobclickAgent.onResume(this);
        }
    • 版本更新:手动下载更新,自动下载安装,安卓市场更新
      1. 检查新版本:版本号,版本名称,[文件校验,更新说明]
      2. 比较版本号,可更新时提示,本地版本号Activity.getPackageManager().getPackageInfo("package",0).versionCode
      3. 下载更新版,保存为app_version.apk(文件校验可选)
      4. 提示安装更新,重启
    • 常用命令,需要将tools和platform-tools目录添加到${path}变量
      1. android help,
        • 运行升级工具android sdk,运行虚拟机管理器android avd
        • 查看虚拟机android list avd,启动模拟器emulator -avd name -sdcard sdcard.img
      2. adb help
        • 查看设备状态adb devices,必要时重启服务adb kill-server
        • 传输文件或目录adb (push | pull) srcFileOrDir dstDir,mksdcard 256M sdcard.img生成镜像卡
        • 上传并安装应用adb install apkFile,-r重新安装,-s安装到sdcard,adb uninstall package卸载应用,adb uninstall|rm apkFile
        • 进入模拟器控制台adb -e shell
          1. 目录查看ls,多级目录查看ls */*,目录跳转cd dir,文本查看cat textFile,删除文件rm -f *.mp3、rm -f */*,删除目录rmdir dirPrefix*
          2. 应用私有数据目录cd /data/data/{package}/
            数据库文件databases/,sqlite3 soyinke_app可进入应用私有数据库
            私有属性文件shared_prefs,cat soyinke_login.xml可显示登录配置信息
          3. 数据库查看,sqlite3 dbfile进入数据库,.help查看帮助信息,.exit | .quit退出
            .tables查看数据库表
            .dump [table],.import file table导入导出数据
            sql;执行SQL语句,如select * from tbl_user_info;
          4. 环境变量set
            PATH=/system/bin:/system/xbin,这两个目录里面有许多可用命令
    • 智能手机平台
      1. 界面易用(多点触摸),功能强大(多任务),兼容扩展(地图、信息、多媒体等)
      2. 安卓架构:
        三方应用:*.java->javac->*.class->dx->*.dex+res->apt->*.ap_+AndroidManifest.xml = *.apk
        系统应用:Contacts Phone SMS Browser
        应用框架:Activity Service BroadcaseReceiver Intent ContentProvider
        库与运行时:SQLite Media WebKit Surface,DavikVM OpenGL FreeType SSL
        硬件支撑:Camera Wifi sdcard Audio Display Keypad Power BlueTooth
      3. 常见平台:
        塞班Sybian,S60SDK(java Sybian-C++),Ovi Store
        蓝梅BlackBerry,BlackBerrySDK(java),App World
        苹果iPhone,iPhone SDK(objective-c),App Store
        安卓Android,Android SDK(java c++),Android Market
        微软WinMobile,Windows Mobile SDK(c#),Windows Marketplace

     
     
     




  • 相关阅读:
    Liferay 6.2 改造系列之十五:修改默认可用语言
    Liferay 6.2 改造系列之十七:当Portlet无权限时,不显示错误信息
    Liferay 6.2 改造系列之十四:修改组织的表单内容
    Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
    Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
    matlab向量的排序(自写函数)
    matlab求一个矩阵中各元素出现的个数(归一化)
    matlab求矩阵的鞍点
    matlab求矩阵、向量的模
    matlab求最大公约数和最小公倍数
  • 原文地址:https://www.cnblogs.com/xingqi/p/2550425.html
Copyright © 2011-2022 走看看