AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载

简介

现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来.

  1. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑,看它的价格就知道了,最开始是10美元1个月,后面好像涨到20美元了.

    我个人给它起了个嘴强王者的称号,就是动动嘴就能实现代码.

  2. Codeium是一款免费的Ai辅助编程工具,支持70多种编程语言,插件支持40多种编辑器.功能也挺强大的,关键免费的,

    我称赞它为白Piao党们的编程秘书.

    其他文章
    AndroidStudio上安装Codeium方法
    Android Studio安装AI编程助手Github Copilot

环境

  1. 测试使用的是Android Studio, Codeium要在VsCode上支持对话,这里只简单对比编程的功能.
  2. 语言Java

代码对比

在同一个Android Studio上,书写相似的简单代码,得到补全代码.然后对比二者表现.

代码尽量挑选平常会用到的公共函数.

Copilot

java 复制代码
// 作者:帅得不敢出门
public class Copilot {
    // 用递归实现斐波那契数列
    public static int fibonacci(int n) {
        if (n <= 1) return n;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }

    public void writeFile(String file, String content) {
        try {
            FileWriter fw = new FileWriter(file);
            fw.write(content);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 手动输入参数int dp后实现
    public int dp2px(int dp) {
        return (int) (dp * 3.0f + 0.5f);
    }

    // 手动输入Context参数
    public int dpToPx(Context context, int dp) {
        return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
    }

    // 实现获取最前端的Activity名称的函数
    // 输入上面这行,copilot无任何提示


    public String getTopActivity(Context context) {
        return context.getClass().getSimpleName();
    }

    public boolean isAppForeground(Context context, String packageName) {
        return packageName.equals(getTopActivity(context));
    }

    public boolean isAppSystem(Context context, String packageName) {
        return context.getPackageManager().getLaunchIntentForPackage(packageName) == null;
    }

    public int getStatusBarHeight(Context context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("status_bar_height",
                "dimen", "android");
        if (resourceId > 0) result = context.getResources().getDimensionPixelSize(resourceId);
        return result;
    }

    public int getScreenWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    public String bytes2HexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte aByte : bytes) {
            String hex = Integer.toHexString(aByte & 0xFF);
            if (hex.length() < 2) sb.append(0);
            sb.append(hex);
        }
        return sb.toString();
    }

    public boolean isPhoneNumber(String phoneNumber) {
        return phoneNumber.matches("^1[3-9]\\d{9}$");
    }

    public String getDate() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date());
    }

    public String getCurrentTime() {
        return new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
    }

    public static int getTodayOfWeek() {
        return new Date().getDay();
    }

    public static int getDayOfWeek(Date date) {
        return date.getDay();
    }

    public static boolean isChinese(String str) {
        return str.matches("[\\u4e00-\\u9fa5]+");
    }

    /*
    这个会编译不过
    public boolean isScreenOn(Context context) {
        return context.getSystemService(Context.POWER_SERVICE).isScreenOn();
    }
     */

    public void setBrightness(Context context, int brightness) {
        android.provider.Settings.System.putInt(context.getContentResolver(),
                android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness);
    }

    public String getAndroidId(Context context) {
        return android.provider.Settings.Secure.getString(context.getContentResolver(),
                android.provider.Settings.Secure.ANDROID_ID);
    }

}

Codeium

java 复制代码
// 作者:帅得不敢出门
public class Codeium {
    // 用递归实现斐波那契数列
    public int fib(int n) {
        if (n == 0) {
            return 0;
        } else if (n == 1) {
            return 1;
        } else {
            return fib(n - 1) + fib(n - 2);
        }
    }

    // 输入到writeFile(会自动提示出参数及实现
    public void writeFile(String fileName, String content) {
        try {
            File file = new File(fileName);
            FileWriter fw = new FileWriter(file);
            fw.write(content);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public int dp2px(int dp) {
        return (int) (dp * 0.5f + 0.5f);
    }

    // 要手动输入Context参数
    public int dpToPx(Context context, int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }

    public String getTopActivity(Context context) {
        return "com.benew.testm";
    }

    public boolean isAppForeground(Context context, String packageName) {
        return false;
    }

    public boolean isAppSystem(Context context, String packageName) {
        return packageName.equals("com.android.systemui");
    }

    public int getStatusBarHeight(Context context) {
        return 0;
    }

    // 这个要手动输入Context参数
    public int getScreenWidth(Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    public String bytes2HexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(0xFF & bytes[i]);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }

    public boolean isPhoneNumber(String phoneNumber) {
        // 默认是提示return false
        //return false;
        // 要手动先输入phoneNumber.matches(
        return phoneNumber.matches("^[1][3,4,5,7,8][0-9]{9}$");
    }

    public String getDate() {
        return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
    }

    public String getCurrentTime(){
        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date());
    }

    public static int getTodayOfWeek(){
        Calendar cal = Calendar.getInstance();
        return cal.get(Calendar.DAY_OF_WEEK);
    }

    public static int getDayOfWeek(Date date){
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_WEEK);
    }

    public static boolean isChinese(String str){
        return str.matches("[\\u4E00-\\u9FA5]+");
    }

    public boolean isScreenOn(Context context){
        return false;
    }

    public void setBrightness(Context context, int level){
        // 这里如果不主动输入codeium会无提示, 需要手动输入android.provider
        android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, level);
    }

    public String getAndroidId(Context context){
        // 这里codeium要手动输入return android.provider 才会提示, 否则会提示成return null
        return android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
    }

}

结果

代码部分对比图

由于工具,语言,代码量都较单一,无法以偏盖全,只是做个简单比较,另外就是输入的代码也会干扰到补全,

个人输入的与工具本身理解不一样也会导致结果差异.

  1. 斐波那契数列 Copilot会更简洁些,二者都未有异常处理,比如溢出,输入负数.
  2. public void writeFile(String file, String content)差不多,Copilot少一行.
  3. public int dp2px(int dp)结果不同,一个是剩0.5,一个是0.3都有问题, 需要参数中手动输入Context context参数才行.
  4. public int dpToPx(Context context, int dp) 因为手动输入Context参数结果正确,个人更喜欢Codeium不需要关注运算.
  5. public String getTopActivity(Context context)二者都不正确.
  6. public boolean isAppForeground(Context context, String packageName) 二者都不正确.
  7. public boolean isAppSystem(Context context, String packageName)二者都不正确.
  8. public int getStatusBarHeight(Context context)Copilot表现比较好.
  9. public int getScreenWidth(Context context)结果一样.
  10. public String bytes2HexString(byte\[\] bytes)差不多.
  11. 获取时间的字符串的函数,format的格式需要自己微调.
  12. public boolean isPhoneNumber(String phoneNumber),Codeium需要手动输入部分实现,Copilot表现好.
  13. getTodayOfWeek() Copilot用到过期的函数,Codeium表现好些.
  14. public static boolean isChinese(String str)二都结果一样.
  15. 设备屏幕亮度setBrightness,获取AndroidId getAndroidId, Codeium都需要手动输入部分实现,否则补全不了,Copilot表现好.

单纯从以上对比,Copilot综合实力更强,收费的,开通麻烦点,原因你懂的.

Codeium也能解决大部分场景,它是免费的,免费的,免费的,重要的事情说三遍,开通方便.

最后说一下,土豪上Copilot,其他上Codeium.

作者:帅得不敢出门 CSDN原创谢绝转载

相关推荐
爱笑鱼7 分钟前
Android 系统启动机制(二):init.rc 不是普通脚本,service、action 和 property 怎样驱动启动?
android
倔强的石头_11 分钟前
飞算JavaAI能防住API Key泄露吗?
ai编程
liuxiaocheng12 分钟前
文本生成的进阶:generateText / streamText 里迟早会撞上的东西
前端·后端·ai编程
Mr_liu_66622 分钟前
Claude非专业入门实战笔记(附录):关闭Telemetry-遥测,消除无用网络请求与日志噪音
linux·笔记·ubuntu·ai编程
新鲜势力呀24 分钟前
深入理解 Elliot CUDA 编程核心:PHP 实现 CUDA 并行计算思想与实践
android·开发语言·php
Justin3go34 分钟前
什么是 DeepSeek-Harness?完整介绍
ai编程·deepseek
恋猫de小郭1 小时前
Flutter 3.47 首坑,analysis_options 问题连环回归
android·前端·flutter
学代码的CJY1 小时前
DeepSeek Harness 安装配置教程
ai编程
AINative软件工程2 小时前
LLM 请求合并工程实践:用 Single-Flight 把并发重复调用从 N 次砍成 1 次
后端·llm·ai编程
ue星空3 小时前
第一个安卓程序
android