• MAC中如何配置两套android-sdk环境


    1 背景介绍

       随着android studio的完善和普及,越来越多Android app开发者从Eclipse+ADT环境转到Android Studio(后文统一用AS表示)。但是,AS往往需要较新的SDK,从目前的测试结果来看,在MAC OSX 10.10系统中很多基于老版本SDK开发的东西并不能完美运行在新版本的SDK中,即两者并不能完美兼容,比如,在Eclipse+ADT环境中创建的模拟器镜像或快照就无法在AS中使用(具体表现为模拟器或快照无法启动,或启动之后马上crash)。因此,最好的解决方案就是在系统中同时使用两套SDK,老版本的给Eclipse使用,新版本的用于AS。

       目前检测到的主要问题发生在DDMS上,貌似新版SDK中的DDMS并不能兼容原来版本较旧的Eclipse。具体原因待以后有时间了再深究~

    2 如何创建两套SDK

       创建两套SDK很简单,但是如何让两套SDK独立运行且互不干扰却相对麻烦。为方便描述,下文将老版的SDK目录称做old_sdk,新版的SDK目录称作new_sdk。

       首先由于笔者当前还是以Eclipse开发为主,所以默认SDK就是old_sdk,只有在使用AS的时候才需要用到new_sdk。因此,笔者在~/.bash_profile文件中做了如下配置:

    #default sdk
    export ANDROID_HOME=/Users/your_user_name/android/env/old-android-sdks

       这样我们在启动程序的时候默认就是用上述old_sdk目录。那么如何在启动AS的时候使用new_sdk呢?同样是在~/.bash_profile中操作,这里我们添加一条alias命令:

    # set new sdk envrionment for Android Studio
    alias myas='export ANDROID_HOME=/Users/your_user_name/android/env/new-android-sdks && open -a /Applications/Android Studio.app/'

       通过上面的设置,当我们需要使用AS的时候只需要在终端中输入myas即可。不过这种方式并不完美,因为如果我们新开一个终端,然后使用adb命令的话,其默认是使用老版的adb,这或多或少会出现一些兼容性问题。为什么会这样呢?答案见bash_profile中的PATH环境变量的设置:

    export  PATH=/user/local/bin:$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

       因为PATH的值是在我们更改ANDROID_HOME之前就设置完成的,所以此时的ANDROID_HOME是old_sdk。因此最好的方式就是提供一个alias命令可以一次性切换ANDROID_HOME和PATH:

    # set new sdk envrionment for Android Studio
    alias change_android_sdk='export ANDROID_HOME=/Users/your_user_name/android/env/new-android-sdks && export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH'
    alias myas='change_android_sdk && open -a /Applications/Android Studio.app/'

      通过上述设置,就能确保在AS中使用的一定是new_sdk,且当我们在AS环境下进行Android编程的时候,如果要使用到adb之类的命令,只需要在新的终端中使用change_android_sdk命令就能切换到new_sdk了。

    3 遇到的一些奇特bug集锦

       问题一:模拟器快照crash问题

       注意:为了方便,笔者是使用emulator命令启动的模拟器快照,而非通过Emulator Devices Manager

       由于当初是使用old_sdk创建的模拟器快照,因此该快照并不能与new_sdk兼容。具体crash场景就是:

    先在old_sdk环境下启动快照,一切正常。
    然后使用myas打开Android Studio,一切正常。
    然后在myas中运行一个app到快照中,一切正常。
    这时候关闭快照,然后重新启动快照,出现BUG,快照无法启动,或者很快crash!

    为什么会这样呢?因为启动了AS之后当前系统中运行的adb, ddms之类的组件都是来自new_sdk的,而笔者启动的快照必须基于old_sdk,所以就出现了兼容性问题。
    解决方案如下:
    首先关闭Android Studio, 然后打开Eclipse(新开一个终端使用open命令打开,或者直接通过系统自带的快捷方式启动),这时候Eclipse会自动启动old_sdk中的满足Eclipse运行的必备的组件(如adb, ddms等),且这些组件会替换掉当前系统中正在运行的、由AS启动的那些new_sdk组件,此时我们再启动模拟器快照就没有问题了!

    4 总结

       模拟器快照crash问题卡了笔者整整两天时间,起见还进行过一次系统还原o(╯□╰)o。很幸运最后能够解决这个问题,因为终于可以一边保持原有Eclipse环境,一边享受Android Studio带来的高效开发了!

       鉴于MAC与Linux的相似性,上述方案应该也可以应用到Linux环境中,只是上述.bash_profile文件会根据具体的系统而不同,常见的等效文件名如下:

       .bash_login   .bashrc   .profile

    

  • 相关阅读:
    "点赞"组件:<like> —— 快应用组件库H-UI
    "视频新闻"组件:<news-video> —— 快应用组件库H-UI
    "热点话题"组件:<news-hot> —— 快应用组件库H-UI
    "图集新闻"组件:<news-image> —— 快应用组件库H-UI
    "新闻详情"组件:<news-detail> —— 快应用组件库H-UI
    "新闻三叶草"组件:<news-three-pics> —— 快应用组件库H-UI
    "新闻单叶草"组件:<news> —— 快应用组件库H-UI
    adjustResize模式下ExpandaleListView中输入框焦点错乱及布局底部的导航栏被顶在键盘上方的处理
    recyclerview嵌套GridView去屏蔽后者的点击事件,而是前者响应到事件。
    安卓编程之自定义字体控件导致应用闪退
  • 原文地址:https://www.cnblogs.com/wanyuanchun/p/5143923.html
Copyright © 2020-2023  润新知