zoukankan      html  css  js  c++  java
  • 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解

    .

    基本上可以导入项目开始使用了 ...

    .

    作者 : 万境绝尘

    转载请注明出处http://blog.csdn.net/shulianghan/article/details/21035637

    .

    Android Studio 相关博客

    -- Ubuntu 下 Android Studio 开发工具使用详解http://blog.csdn.net/shulianghan/article/details/20855541 ;

    -- Ubuntu 配置 Android 开发 环境http://blog.csdn.net/shulianghan/article/details/20855541 ;

    .


    1. SDK Manager 配置图标消失问题


    上来就给我一棒子, 连工程都创建不了, 郁闷 ...





    (1) 问题描述


    点击创建工程 : 出现如下的对话框, 这种对话框不正常;



    问题解析 : 出现上述情况, 是因为 SDK 没有配置, 下面是 SDK的情况 : 

    -- SDK Manager 选项消失 : Configure 下面没有 SDK Manager 选项了, 此时 在 Project Defaults | Project Structure 中也不能配置 SDK 路径;

    -- SDK Manager消失图


    -- Project Structure 无法配置 SDK路径 图



    (2) 问题解决


    出现原因

    -- 不是权限问题 : 之前认为是 Android Studio 中相关执行权限有问题, 后来执行了 chmod -R 777 ./* 将整个Android Studio 都加上了权限, 还是没效果;

    -- 真正原因 : 插件没有激活, 在 Configure | Plugin 中, gradle 插件没有启用, 这样使得 SDK 模块无法使用;

    -- 插件激活问题界面 : 可以看出 有 几个插件没有激活, 包括 gradle 插件;




    修复问题

    -- 激活插件及之后的效果 : 激活插件后会重启;


    -- 重启之后查看 Configure : 此时 SDK Manager 图标已经出现, 但是灰色的, 不能启动, 这是因为没有配置 SDK 路径;


    -- 配置SDK 路径 : Configure | Project Defaults | Project Structure 中, 在 Android SDK 选项中 选择 SDK 路径;


    -- 查看 SDK Manager 是否可用 : 此时 SDK Manager 图标变亮, 可以执行;


    -- SDK Manager 管理 : 下载的版本还是比较全的;



    现在创建工程 : 界面如下, 正常了 ...





    2. 从SVN服务器上检出代码 



    (1) 检出代码并创建工程


    检出代码, 将代码放到新创建的工程中;


    弹出 Check from Subversion 对话框途径


    -- 通过菜单栏 : VCS | Check from Version Control | SubVersion, 即可弹出;

    -- 在欢迎界面中 : 选择 Check from Version Control 选项即可;




    检出项目流程

    -- 选择需要检出的工程URL, 点击Checkout按钮


    -- 选择检出项目本地存放目录


    -- 选择工程在本地的存放目录 : 如果系统生成的不合适, 点击  键可以自己选择存放工程的本地目录;


    -- 选择SVN拷贝格式 :  不懂 选默认的 1.7 吧;


    -- 输入账号密码


    -- 是否为这个项目创建一个工程 : 工程就相当于 eclipse中的workspace, 如果选择否, 该过程就会执行完毕, 工程就会下载到之前指定的目录中了;


    -- 创建工程 : 在上面的对话框中选择是, 就会弹出创建工程对话框;


    -- 工程的名称 和 位置


    --选择要导入Project工程的项目


    -- 检查工程的依赖包


    -- 检查module的依赖包 : 


    -- 导入工程 : 工程中检测到一些框架, 检查这些条目排除错误的检测;


    -- 工程项目目录


    -- 更新提交代码 这两个键分别是 更新 和 提交 代码的按钮, 如果项目时从 SVN 上检出的, 这两个按钮就可以使用, 否则这两个按钮就不能使用;



    (2) 检出代码放入已有工程


    检出代码并导入项目到现有工程中

    -- 选择要检出的项目地址


    -- 选择项目存放目录


    -- 选择项目源码存放目录


    -- 选择 SVN 工作备份格式


    -- 是否创建工程 : 这里选择否;


    -- 上面的内容 与 (1) 中检出版本到新工程 步骤相同, 下面就开始不一样了;

    -- 选择导入项目 : 菜单栏 File | Import Moudle 选项, 弹出下面对话框, 在对话框中选择我们要导入的项目;


    -- 选择创建项目方式 : 选择从资源中创建一个项目;


    -- 选择项目中的文件


    -- 选择项目中用到的库


    -- 检查项目结构, 为项目命名


    -- 导入项目


    -- 项目成功导入到了现有工程 : 可以看到该项目可以更新 和 提交到 SVN服务器;




    3. 导入eclipse工程



    (1) 导入 Moudle项目 到现有Project下


    导入一个eclipse中创建的项目到Project下 : eclipse中的项目相当于 Android Studio中的Moudle,  eclipse 中的workspace 相当于 Studio中的 Moudle;

    -- 选择导入Moudle : 菜单 File | Import Moudle , 选择要导入的工程;


    -- 选择导入项目方式 : 从现有资源选择;


    -- 选择要加入工程的文件目录 : gen 目录就不用加了;


    -- 检查项目中用到的库


    -- 检查项目, 并为项目命名


    -- 检查工程中检测到的框架


    -- 导入工程(Project)中的项目(Moudle)




    (2) 导入一个 Project 工程 并导入一系列的 eclipse 项目



    数据准备工作 : 创建一个目录, 并将 项目源文件拷贝到这个目录下, 我们就将这个目录当做 Project 导入, 目录中的 工程 当做 Moudle 项目 导入;

    -- 创建文件并拷贝项目 : 创建一个 my 目录, 将四个项目 源文件拷贝到这个目录中;

    octopus@octopus-Vostro-270s:~/code/my$ ls
    DisplayTest  Hot_Blog  ListViewTest  TabHost_Test
    octopus@octopus-Vostro-270s:~/code/my$ pwd
    /home/octopus/code/my
    


    批量导入eclipse项目流程

    -- 欢迎界面中导入 : 在环境界面中选择 Import Project;


    -- 选择刚才创建的my目录


    -- 选择导入工程方式


    -- 为 Project 命名 并选择 工程目录


    -- 选择 Project 中要导入的文件


    -- 选择依赖包


    -- 选择要导入的项目, 并可以为项目命名


    -- 直接覆盖即可 : 因为刚才我们将 项目 拷贝到了 my 目录下, 此时需要覆盖一次;


    -- 确认检测到的工程


    -- 工程界面





    4. 配置adb工具


    获取 adb 工具路径 : sdk 中的 platfrom-tools 中, 首先将 sdk 的 platform-tools 和 tools 目录配置到环境变量中;

    -- 获取 两个目录的地址 : /home/octopus/android-studio/sdk/tools 和 /home/octopus/android-studio/sdk/platform-tools ;

    octopus@octopus-Vostro-270s:~$ cd android-studio/sdk/tools/
    octopus@octopus-Vostro-270s:~/android-studio/sdk/tools$ pwd
    /home/octopus/android-studio/sdk/tools
    octopus@octopus-Vostro-270s:~/android-studio/sdk/tools$ cd ../platform-tools/
    octopus@octopus-Vostro-270s:~/android-studio/sdk/platform-tools$ pwd
    /home/octopus/android-studio/sdk/platform-tools
    


    配置环境变量

    --配置 .bashrc 文件 : 将上面两个目录配置到 环境变量中去; 

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_51
    export JRE_HOME=${JAVA_HOME}/jre  
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
    export PATH=${JAVA_HOME}/bin:$PATH:/home/octopus/android-studio/sdk/tools:/home/octopus/android-studio/sdk/platform-tools
    


    验证是否配置成功
    -- 关掉该终端, 重启一个终端 : 查看 adb 版本, 卸载手机上运行的程序 : 

    octopus@octopus-Vostro-270s:~$ adb version
    Android Debug Bridge version 1.0.31
    octopus@octopus-Vostro-270s:~$ adb uninstall com.ivt.mHealth
    Success
    octopus@octopus-Vostro-270s:~$ 
    


    5. 在真实手机上运行 Android 程序


    连接手机 : 手机开启 USB 调试, 连接手机, 在 Android Studio 界面中, 就可以查看手机连接信息;

    -- 界面 Android 视图显示


    -- 启动 Android Monitor View 界面 : 点击  按钮, 可以进入 Android Monitor View 界面, 对于这个界面, 就比较熟悉了, 与 eclipse 中差不多;




    程序运行配置 : 在 菜单盘 Run | Edit Configurations 中配置;

    -- 配置默认的运行方式 : 将默认的 Target Device 设置为 需要弹出选择对话框;


    -- 也可以在下面的位置进入配置对话框



    运行Abdroid 程序

    -- 运行方式 :  选中 运行的 Moudle, 点击右边的三角形, 就会进入编译阶段;

    -- 弹出选择设备对话框 : 编译很慢, 至少要半分钟, 在该对话框中选择要运行程序的设备;


    -- 运行成功


    -- 卸载程序 : 在开启一个终端, 在命令行使用 adb uninstyall com.ivt.mHealth 就可以将软件卸载;

    octopus@octopus-Vostro-270s:~/code/my$ adb uninstall com.ivt.mHealth
    Success




    6. adb logcat 查看日志用法



    (1) 按照标签 和 等级 查看日志


    日志等级 : 由 低级 向 高级介绍;

    -- V : Verbose, 最低级的日志等级;

    -- D : Debug 级别;

    -- I : Info 级别;

    -- W : Warning 级别;

    -- E : Error 级别;

    -- F : Fatal 级别;

    -- S : Silent 级别, 这是最高的级别, 级别太高, logcat无法打印这种日志;


    分析一个log日志 :

    -- 日志格式 : F 代表日志级别, Enviroment 是日志的标签, 7379 是进程id;

    F/Environment( 7397): Static storage paths aren't available from AID_SYSTEM


    日志过滤输出 : 可以同时 添加 多个过滤器;

    -- 日志过滤格式 : 可以使用  日志标签 : 日志等级 作为日志的过滤器;

    -- 使用的具体语法 : adb logcat 日志标签:日志等级 日志标签1:日志等级1 ...

    -- 示例 : 使用 adb logcat *:F 输出所有的 Fatal 级别的日志信息;

    octopus@octopus-Vostro-270s:~$ adb logcat *:F
    --------- beginning of /dev/log/system
    --------- beginning of /dev/log/main
    F/Environment( 7397): Static storage paths aren't available from AID_SYSTEM
    F/Environment( 7397): java.lang.Throwable
    F/Environment( 7397): 	at android.os.Environment.throwIfSystem(Environment.java:637)
    F/Environment( 7397): 	at android.os.Environment.getExternalStorageDirectory(Environment.java:316)
    F/Environment( 7397): 	at com.android.MtpApplication.MtpReceiver.onReceive(MtpReceiver.java:1121)
    F/Environment( 7397): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2445)
    F/Environment( 7397): 	at android.app.ActivityThread.access$1600(ActivityThread.java:154)
    F/Environment( 7397): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360)
    F/Environment( 7397): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    F/Environment( 7397): 	at android.os.Looper.loop(Looper.java:137)
    F/Environment( 7397): 	at android.app.ActivityThread.main(ActivityThread.java:5306)
    F/Environment( 7397): 	at java.lang.reflect.Method.invokeNative(Native Method)
    F/Environment( 7397): 	at java.lang.reflect.Method.invoke(Method.java:511)
    F/Environment( 7397): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
    F/Environment( 7397): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
    F/Environment( 7397): 	at dalvik.system.NativeStart.main(Native Method)
    


    (2) 设定日志格式


    日志格式字段 : 使用 adb logcat -v 日志格式 命令可以规定日志输出的格式, 只能跟随一个格式;

    -- brief : 最基本的显示, 即默认的 优先级/标签(进程号):日志信息;

    -- process : 只显示进程id; 

    -- tag : 只显示 优先级/标签;

    -- thread : 只显示 优先级/标签 线程id;

    -- raw : 只显示原始的日志信息, 没有其它字段;

    -- time : 显示日期 时间, 优先级/标签(进程号);

    -- long : 显示所有的元数据字段, 并用空行分隔消息内容;


    输出示例

    -- adb logcat -v brief

    octopus@octopus-Vostro-270s:~$ adb logcat -v brief
    --------- beginning of /dev/log/system
    D/BatteryService( 2252): Sending ACTION_BATTERY_CHANGED.
    D/STATUSBAR-BatteryController( 2408): onReceive() - ACTION_BATTERY_CHANGED

    -- adb logcat -v process

    mitter.java:206)  (System.err)
    W(29843) 	at com.ivt.mHealth.datacommunication.impl.BqfjSockPacketTransmitter.access$000(BqfjSockPacketTransmitter.java:25)  (System.err)
    W(29843) 	at com.ivt.mHealth.datacommunication.impl.BqfjSockPacketTransmitter$1.run(BqfjSockPacketTransmitter.java:101)  (System.err)

    -- adb logcat -v tag

    octopus@octopus-Vostro-270s:~$ adb logcat -v tag
    --------- beginning of /dev/log/system
    D/STATUSBAR-BatteryController: onReceive() - ACTION_BATTERY_CHANGED
    D/STATUSBAR-BatteryController: onReceive() - BATTERY_STATUS_DISCHARGING: tw_stat_sys_battery_usb_not_charge

    -- adb logcat -v thread

    octopus@octopus-Vostro-270s:~$ adb logcat -v thread
    --------- beginning of /dev/log/system
    D( 2252: 2299) sendNotification(1) - 17303322
    D( 2408: 2408) checkOverflow(560), More:false, Req:false Child:7
    
    -- adb logcat -v raw

    octopus@octopus-Vostro-270s:~$ adb logcat -v raw
    --------- beginning of /dev/log/system
    sendNotification(3) - 252119
    [SvcLED] turnOff:: id = 4mIsIDUsingPatternLED = true
    [SvcLED] setSvcLedStateLocked:: id = 4, color = 0, mode = Off, set = Off
    [SvcLED] ForcedSvcLEDTask is running.
    [SvcLED] setSvcLedLightLocked : mSvcLedState : 0x0  priority : 6  mSvcLedMode : 0
    checkOverflow(560), More:false, Req:false Child:6
    waitForAlarm result :8

    -- adb logcat -v time

    octopus@octopus-Vostro-270s:~$ adb logcat -v time
    --------- beginning of /dev/log/system
    03-13 19:01:00.020 D/STATUSBAR-IconMerger( 2408): checkOverflow(560), More:false, Req:false Child:7
    03-13 19:01:00.050 D/KeyguardClockWidgetService( 3910): onReceive action=android.intent.action.TIME_TICK
    03-13 19:01:08.400 E/Watchdog( 2252): !@Sync 1678
    03-13 19:01:12.295 D/BatteryService( 2252): update start

    -- adb logcat -v long

    octopus@octopus-Vostro-270s:~$ adb logcat -v long
    --------- beginning of /dev/log/system
    [ 03-13 19:01:12.300  2408: 2408 D/STATUSBAR-BatteryController ]
    onReceive() - ACTION_BATTERY_CHANGED
    
    [ 03-13 19:01:12.300  2408: 2408 D/STATUSBAR-BatteryController ]
    onReceive() - BATTERY_STATUS_DISCHARGING: tw_stat_sys_battery_usb_not_charge
    



    .

    作者 : 万境绝尘

    转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637

    .

  • 相关阅读:
    Linux驱动之内核自带的S3C2440的LCD驱动分析
    【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问? Eureka 注册中心
    java GC算法 垃圾收集器
    Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库
    Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库
    Java嵌入式数据库H2学习总结(一)——H2数据库入门
    Java Master-Worker模式实现
    RSA公钥格式PKCS#1,PKCS#8互转(微信获取RSA加密公钥)
    自定义注解完成数据库切库(读写分离)
    Linux下CPU飘高定位
  • 原文地址:https://www.cnblogs.com/hanshuliang/p/4215426.html
Copyright © 2011-2022 走看看