Git rebase合并多个commit

有时候为了修改一个功能,对一个功能进行了多次琐碎commit,想把这些琐碎的commit整合成一个commit就可以使用rebase进行操作。比如,我现在有4个分支分别如下:

  • fix issue CAT-1061
  • fix issue CAT-1061
  • fix issue CAT-1061
  • removed unused variable

现在我想把这个4个commit合成一个commit。

第一步,打开你的项目的git bash界面。

输入如下命令:

git rebase -i HEAD~4

命令说明:i代表interactive的意思,就理解为对它的操作吧。HEAD是指向当前版本的文件头指针,HEAD~4指的是对从HEAD开始的前4个commit进行操作。

第二步,指向完上面的命令以后,会弹出一个文本编辑器(git默认是vim或者其他的文本编辑器)如下图

pick

pick代表支持rebase整合的分支,如果把那个pick移除掉这个commit就会不见。这里我们的目标是合并所以,把后三条的pick改成squash(挤压的意思)就可以达成我们压缩commit的目的,结果如下:

squash

 

然后保存并退出就会开始rebase了。

Tips:如果是用vim,在退出编辑模式(按esc)然后就是进入了command mode,此时输入命令:wq就是保存和退出的意思。

Android studio添加.so文件

在用到百度sdk和一些第三方库的时候会有.so文件的添加,而官方一般只给出了Eclipse的添加方法,国内的教程也是停留在比较老的gradle版本的.国外的一些教程也是对于老版本的gradle添加的一些奇技淫巧(workaround),在gradle 0.73的时候已经对这个有支持了,在stackoverflow看到了方法和大家分享一下

  • 确定你gradle版本在0.7.3 以上(如果下载的最新的Android studio就不用看了)
  • 在你的工程下创建如下文件 (x86 那是对不同版本的cpu的支持,一般添加armeabi就行了)

  • 点开app里的build.gradle

对应刚才建立的文件夹添加:

   productFlavors {
        x86 {
            ndk {
                abiFilter "x86"
            }
        }
        arm {
            ndk {
                abiFilters "armeabi-v7a", "armeabi"
            }
        }

    }

 

完成!

Fragment简单上手

刚开始接触android开发,我们知道一个界面就是一个Activity.那Fragment拿来干什么呢?我们先从名字上看,Fragment的中文意思是”碎片”,我们就可以简单理解Fragment可以存放一个个我们界面的小碎布,我们可以拼接起多个小碎布在一个平面里(一个Activity里多个Fragment).或者我们可以更加简单(不是很准确)的理解,我们就把Fragment当Activity使用,不同就是Fragment可以动态改变.

Fragment说明
一个Activity里两个Fragment的示例

简单实用方法(这里只说动态的添加方法,不说静态):

  • 首先,我们得有一个容器来放Fragment的布局

建一个xml(叫main.xml),作为放Fragment的容器这个标签叫FrameLayout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

这个就像是一个空白的白板可以放入其他的布局

  • 我们要有个继承自Fragment的类(这就相当于Activity),这里填充我们要添加的新界面的xml布局文件
public class FragmentExample extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =  inflater.inflate(R.layout.要填充的layout名字, container, false);
        return  view;
    }
}

这里我们只Override一个onCreateView方法,里面填充我们页面的layout.(就是当这个Fragment的view创建的时候做的事情)类似Activity的onCreate.(注意Fragment也有自己的生命周期也有onCreate方法,具体请看google文档).

  •  每个Fragment都要住(host)在一个Activity里,里面调用一个FragmentManager,来管理Fragment
  public class OneActivity extends FragmentActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 找到放container的layout
        setContentView(R.layout.main);
        // 这里是用来support class 如果你目标是3.0以上就可以直接用FragmentManager就好了
        FragmentManager manager = getSupportFragmentManager();
        Fragment fragment = manager.findFragmentById(R.id.frame_container);
        
        // 可能fragment已经存在了(和生命周期有关)
        if (fragment == null){
            // 创建刚才建立的Fragment
            fragment = new ExampleFragment();
            // 把它添加给Fragment Manager
            manager.beginTransaction()
                .add(R.id.frame_container,fragment)
                .commit();
        }
    }
  }

 

这样这个Activity里就填充了刚才new的Fragment了.

用一个新的Fragment代替当前的Fragment

// 把新的Fragment替换到当前的fragment_container里
transaction.replace(R.id.fragment_container, newFragment);
// 加到statck里让用户按back的时候还可以回来
transaction.addToBackStack(null);

// 添加到FragmentManger 里
transaction.commit();

 

快速下载Android SDK更新

用SDK manger更新非常慢,不妨用迅雷下载.

步骤:

  1. 先在sdk manger里选中要更新下载的东西
  2. 打开sdk的目录,在里面会有一个叫temp的文件夹,里面会有刚选中下载的文件
  3. 复制它的名字;在迅雷里新建下载链接 格式: “https://dl-ssl.google.com/android/repository/刚才复制的文件名(注意后缀也要有)”
  4. 下载完成后复制进刚才temp这个文件夹内,然后再点install就马上开始安装了!