V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  Android

使用 android studio ,各位是如何成功导入或打开他人的开源项目并编译运行的?

  •  
  •   tctc4869 · 2020-10-12 16:22:01 +08:00 · 9885 次点击
    这是一个创建于 1533 天前的主题,其中的信息可能已经有所发展或是发生改变。

    无论是什么样的编程开发,良好的 ide 能带给我良好的开发体验。之前开发 android 用过 eclipse,后来由于谷歌青睐 Idea,于是开始转向使用 android studio 。

    使用起来感觉基本比 eclipse 要好,唯一的致命缺陷,就是导入别人的开源项目,尤其是那些没有提供通过 grade 的 implementation 方式导入的开源项目,就得手动打开文件选择对话框,选择开源项目的 build.gradle 并打开进行加载,这个期间可能会爆出各种错误,要能成功编译运行,根据百度的教程就得改一堆东西,改了还不一定能成功,就因为这个情况导致学习一些别人的开源项目,连编译运行连跑都跑不起来,很郁闷。

    不知道各位有没有这种糟糕的使用经历,各位是如何打开别人的开源的 android 项目,并成功编译运行的?提供一下正确的打开方式

    26 条回复    2020-10-13 19:27:21 +08:00
    nicocho
        1
    nicocho  
       2020-10-12 16:29:53 +08:00
    开 VPN,提示下载就下,主要还是 build.gradle 里的版本不匹配问题。
    还有,建议 android studio 版本最好不要用最新的,
    多整几次,习惯就简单了~
    tctc4869
        2
    tctc4869  
    OP
       2020-10-12 16:32:33 +08:00
    @nicocho 我说的,不是梯子的问题,是用 android studio 导入别人的开源项目的使用体验问题,我没用新版本,用的是 android studio 3.4
    yingqi7
        3
    yingqi7  
       2020-10-12 16:35:28 +08:00 via iPhone   ❤️ 1
    @tctc4869 感觉最大的问题是版本兼容和开源项目且胳膊少腿🐶
    winterbells
        4
    winterbells  
       2020-10-12 16:39:02 +08:00 via Android
    没有 gradle 的项目是多老的。。
    tctc4869
        5
    tctc4869  
    OP
       2020-10-12 16:42:18 +08:00
    @yingqi7 你说的很对,我现在很郁闷,一些发布日期超过 2 年的开源项目,近年又没更新,打开就可能报错。
    tctc4869
        6
    tctc4869  
    OP
       2020-10-12 16:43:45 +08:00
    @winterbells 不一定,有 gradle 的开源项目,打开加载也有报错的可能。我最烦这种情况,而且改 grade 版本也不一定会有效果
    winterbells
        7
    winterbells  
       2020-10-12 17:59:40 +08:00 via Android
    @tctc4869 有些直接下载的我会手动改 lib 版本
    但一般都是在线看看关键地方,编译跑一个没有必要
    Anarchy
        8
    Anarchy  
       2020-10-12 18:59:09 +08:00 via Android
    导入项目首先不要提示升级 gradle 版本就点了,当然有的 gradle 版本太老就没办法了一点一点改问题了。
    StonyGround
        9
    StonyGround  
       2020-10-12 21:34:33 +08:00
    导入之前,先手动改 gradle 、sdk 版本,改成自己电脑上有的
    shiguiyou
        10
    shiguiyou  
       2020-10-12 21:55:41 +08:00   ❤️ 1
    将项目文件夹下面的 build.gradle 里面的 google()改为阿里云的地址就行了,速度很快
    Daming
        11
    Daming  
       2020-10-12 22:50:08 +08:00
    千万不要手欠升级 gradle!!
    "Android Gradle Plugin is ready to update." 无视掉
    Hallujah
        12
    Hallujah  
       2020-10-12 22:51:05 +08:00 via Android
    兴趣使然用过一阵,导入 GitHub 三五个项目,挨个改错误,百度下都是需要我改 gradle 版本的,改了也不行,改了好几处都不行,遂卸载。
    tctc4869
        13
    tctc4869  
    OP
       2020-10-13 08:47:53 +08:00
    @shiguiyou 不是墙的问题
    chenjiajia9411
        14
    chenjiajia9411  
       2020-10-13 09:08:36 +08:00
    如果你说的是开源库的话,你可以自己打成 aar 包然后 implementation 进来,甚至直接用 jitpack 之类的。
    即使没法打包,那也应该导入模块而不是导入 gradle 。
    如果是完整项目的话,直接打开一般不会有什么问题,有问题跟着报错对应修改就行了。
    tctc4869
        15
    tctc4869  
    OP
       2020-10-13 14:59:29 +08:00
    @winterbells


    @chenjiajia9411

    一般有一些开源项目,用 android studio 打开,以“android”视角看待,会有一个 app 文件夹,和一个 library 文件夹,这个 library 文件夹的内容,会不会就是核心内容,但是如果要拿出来放到我的项目,要怎么弄?
    tctc4869
        16
    tctc4869  
    OP
       2020-10-13 14:59:57 +08:00
    @tctc4869 拿出来放到我的项目里,进行使用
    chenjiajia9411
        17
    chenjiajia9411  
       2020-10-13 15:09:58 +08:00
    @tctc4869 #15 两种方式随你喜好:
    1.项目打开之后直接 Make Project (或者你知道 module 是什么的话,Make module "library"更快),然后在项目根目录 /library/build/outputs/aar 下会出现一个 aar 文件,把它复制到你的项目的 lib 文件夹下,再以 implementation (name: 文件名不带扩展名, ext: 'aar')引入即可。
    2.直接在你的项目里 File-New-Import Module,选择你要的项目里的 library 文件夹并改一个你需要的模块名,finish 之后再以 implementation project(':模块名')引入(并且要在 setting.gradle 内添加 include:':模块名')。
    但是说真的,一般开源项目都会发布到 jcenter 之类的,再不济用 jitpack 自己打个包,要你自己编译的是个什么项目我想见识一下。(或者一般这种是作者还没有写好不方便发布版本,这种情况下你下下来应该也是不能用的)
    winterbells
        18
    winterbells  
       2020-10-13 15:19:19 +08:00 via Android
    @tctc4869 和你新建一个模块原理是一样的


    @chenjiajia9411 我们有很多都都是拷源码过来的。一般不更新了,或者更新慢,有些地方要加保护
    tctc4869
        19
    tctc4869  
    OP
       2020-10-13 16:00:52 +08:00
    @chenjiajia9411 我是 Yasea 吧,github 上有,就是国人开源的著名 rtmp 推流项目,算是比较老的开源项目,用我电脑上的 android studio 3.4 打开,改了 project 的 grade 版本到是能跑起来运行,我没有找到没有 implementation 导入方式或你所说的 arr 文件,
    tctc4869
        20
    tctc4869  
    OP
       2020-10-13 16:01:35 +08:00
    @tctc4869 开头说错了,是 Yasea 吧
    chenjiajia9411
        21
    chenjiajia9411  
       2020-10-13 16:19:13 +08:00
    @tctc4869 #19
    https://jitpack.io/#begeekmyfriend/yasea/-SNAPSHOT
    `implementation 'com.github.begeekmyfriend:yasea:-SNAPSHOT'`
    Jitpack 是可以用的啊。
    tctc4869
        22
    tctc4869  
    OP
       2020-10-13 16:20:30 +08:00
    谢谢,我其实没用过 Jitpack
    tctc4869
        23
    tctc4869  
    OP
       2020-10-13 16:30:24 +08:00
    @chenjiajia9411 谢谢提供,其实另外还有问题,用 implementation 导入一些资源会出现如下错误“

    ERROR: Failed to resolve: com.github.begeekmyfriend:yasea:-SNAPSHOT
    Show in Project Structure dialog
    Affected Modules: app

    grade project 里,我是怎么写的
    repositories {
    google()
    maven { url "https://jitpack.io" }
    jcenter()


    }
    这个错误我不太明白怎么解决,你能指点一下么
    chenjiajia9411
        24
    chenjiajia9411  
       2020-10-13 16:37:09 +08:00
    @tctc4869 #23 你是不是写在了 buildscript 的 repositories 里?应该把 jitpack 目录写进 allprojects 的 repositories 里。
    像这样:

    ````
    buildscript {
    repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
    maven { url 'https://storage.googleapis.com/r8-releases/raw' }
    maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    maven { url 'https://kotlin.bintray.com/kotlinx' }
    maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local' }
    maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots'
    }
    mavenLocal()
    }
    dependencies {
    //gradle plugin

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
    }

    allprojects {
    repositories {
    google()
    jcenter()
    mavenCentral()
    maven { url 'https://jitpack.io' }
    maven { url 'https://repo.spring.io/snapshot' }
    maven { url 'https://oss.jfrog.org/libs-snapshot' }
    maven { url 'https://oss.jfrog.org/artifactory/oss-snapshot-local/' }
    maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    maven { url 'https://kotlin.bintray.com/kotlinx' }
    maven { url 'https://maven.aliyun.com/repository/releases' }
    maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots'
    }
    maven {
    url 'https://repository.apache.org/content/groups/snapshots'
    }
    flatDir {
    dirs 'libs'
    }
    mavenLocal()
    }
    }
    ````
    tctc4869
        25
    tctc4869  
    OP
       2020-10-13 16:52:34 +08:00
    @chenjiajia9411 明白了,谢谢指导
    silencelixing
        26
    silencelixing  
       2020-10-13 19:27:21 +08:00
    当然是用梯子,用梯子可以大大提高成功率
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5266 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:46 · PVG 13:46 · LAX 21:46 · JFK 00:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.