GVKun编程网logo

Android Studio 导入开源项目的正确姿势及注意事项(android studio 导入源码)

7

在这篇文章中,我们将为您详细介绍AndroidStudio导入开源项目的正确姿势及注意事项的内容,并且讨论关于androidstudio导入源码的相关问题。此外,我们还会涉及一些关于AndroidSt

在这篇文章中,我们将为您详细介绍Android Studio 导入开源项目的正确姿势及注意事项的内容,并且讨论关于android studio 导入源码的相关问题。此外,我们还会涉及一些关于Android Studio 3.0及Gradle Plugin 3.0升级注意事项、Android Studio 如何导入开源库?、Android Studio 安装注意事项、Android Studio 安装配置完全步骤、注意事项及常见问题的知识,以帮助您更全面地了解这个主题。

本文目录一览:

Android Studio 导入开源项目的正确姿势及注意事项(android studio 导入源码)

Android Studio 导入开源项目的正确姿势及注意事项(android studio 导入源码)

报错:Error:(2,0) Plugin with id 'realm-android' not found.

注意:项目中用到的插件,需要根目录下的build.gradle中添加它classpath,执行下面的build.gradle文件覆盖前先检查下,或者备份一个。

当我们在Github上看到优秀的项目时,往往想下载下来学习,但是导入到AS中经常报各种错误,那么导入开源项目的正确姿势是什么呢?

(1) 第一步,新建一个项目,跑一遍。

(2) 打开 我们从Github下载的项目的文件。依次 找到 gradle文件夹(必须)、build.gradle (必须)、gradle.properties (必须)和.gradle 文件夹 (非必须)。

(3) 把我们之前 在AS新建的那个项目的 gradle 文件夹(必须) 、build.gradle (必须)

和gradle.properties (必须) 这三个 复制到 下载的那个项目中去。

(4).然后 在AS中依次执行以下操作:File ―― New ―― Import Project 一下。注意:

引入的时候不是选择project名称,而是选择的项目的build.gradle文件。

总结

以上所述是小编给大家介绍的Android Studio 导入开源项目的正确姿势,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

您可能感兴趣的文章:

  • Android Studio3.0升级后使用注意事项及解决方法
  • Android 程序执行Linux命令的解决方法及注意事项
  • 将Eclipse工程转Android Studio工程的步骤与注意事项
  • AndroidStudio升级到3.0的新特性和注意事项小结
  • 详解Android Service 使用时的注意事项
  • Android 中ViewPager中使用WebView的注意事项
  • Android TimerTask 的简单应用及注意事项
  • Android 如何使用log4j及注意事项
  • Android集成百度地图开发流程和注意事项
  • Android onNewIntent()触发机制及注意事项
  • Android Studio添加第三方库的注意事项
  • Android 程序申请权限注意事项
  • Android Service自启动注意事项分析
  • 关于Android WebView的loadData方法的注意事项分析
  • Android NDK中socket的用法以及注意事项分析
  • Android生存指南之:开发中的注意事项
  • Android 编程下字库的使用及注意事项
  • 60条Android开发注意事项与经验总结

Android Studio 3.0及Gradle Plugin 3.0升级注意事项

Android Studio 3.0及Gradle Plugin 3.0升级注意事项

最近终于有空升级了一下项目中的GradleGradle Plugin的版本,还是踩了蛮多的坑。特别是依赖以及渠道编译这块变动较大,因此把遇到的一些问题点记录下来,分享给后人查阅~

Gradle版本升级

其实当AS升级到3.0之后,Gradle Plugin和Gradle不升级也是可以继续使用的,但很多新的特性如:Java8支持、新的依赖匹配机制、AAPT2等新功能都无法正常使用~ 所以长期看来,最后还是得升的。

  • Gradle Plugin升级到3.0.0及以上,修改project/build.gradle文件:

    123456789101112
    buildscript {    repositories {        ...                // new plugin.        google()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.0.0'    }}
  • Gradle升级到4.1及以上,修改project/gradle/gradle-wrapper.properties文件:

    1
    distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip

生成APK文件名属性outputFile变为只读

改完第一步后会提示如下报错:

Error:(88, 0) Cannot set the value of read-only property ‘outputFile’ for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=appDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl.

之前改apk名字的代码类似:

1234567
applicationVariants.all { variant ->    variant.outputs.each { output ->        def file = output.outputFile        def apkName = 'xxx-xxx-xxx-signed.apk'        output.outputFile = new File(file.parent, apkName)    }}

由于outputFile属性变为只读,需要进行如下修改,直接对outputFileName属性赋值即可:

123456
applicationVariants.all { variant ->    variant.outputs.all {        def apkName = 'xxx-xxx-xxx-signed.apk'        outputFileName = apkName    }}

依赖关键字的改变

  • api: 对应之前的compile关键字,功能一模一样。会传递依赖,导致gradle编译的时候遍历整颗依赖树
  • implementation: 对应之前的compile,与api类似,关键区别是不会有依赖传递
  • compileOnly: 对应之前的provided,依赖仅用于编译期不会打包进最终的apk中
  • runtimeOnly: 对应之前的’apk’,与上面的compileOnly相反

关于implementationapi的区别,主要在依赖是否会传递上。如:A依赖B,B依赖C,若使用api则A可以引用C,而implementation则不能引用。

这里更推荐用implementation,一是不会间接的暴露引用,清晰知道目前项目的依赖情况;二是可以提高编译时依赖树的查找速度,进而提升编译速度。详见SO的这个回答,讲得非常详细了:https://stackoverflow.com/questions/44413952/gradle-implementation-vs-api-configuration

渠道需要声明flavor dimensions

刚开始Sync的时候应该会报错:

Error:All flavors must Now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

也就是每个flavor渠道都必须归属一个dimension维度,若只有一个维度,渠道中可以不写dimension属性,默认分配到该维度。直接添加一个默认的维度即可,如:flavorDimensions "dimension"。当然flavorDimensions也可以设置多个维度,详见官方实例:

1234567891011121314151617181920212223242526
// Specifies two flavor dimensions.flavorDimensions "mode", "minApi"productFlavors {    free {        // Assigns this product flavor to the "tier" flavor dimension. Specifying        // this property is optional if you are using only one dimension.        dimension "mode"        ...    }    paid {        dimension "mode"        ...    }    minApi23 {        dimension "minApi"        ...    }    minApi18 {        dimension "minApi"        ...    }}

库多variant依赖方式的修改

Gradle plugin 3.0.0+之后引入了新的variant自动匹配机制,也就是说app的flavorDebug变体会自动匹配library的flavorDebug变体。

回顾一下旧的方式,如果app在某个variant下需要依赖library相应的类型,需要按照下面的方式声明依赖:

123456
dependencies {    // This is the old method and no longer works for local    // library modules:    debugCompile project(path: ':library', configuration: 'debug')    releaseCompile project(path: ':library', configuration: 'release')}

新的方式,gradle会自动感知并匹配对应的variant(前提是app与library中有对应的variant类型):

1234567
dependencies {    // Instead, simply use the following to take advantage of    // variant-aware dependency resolution. You can learn more about    // the 'implementation' configuration in the section about    // new dependency configurations.    implementation project(':library')}

处理app与lib的依赖匹配问题

上面我们了解到新的variant匹配机制,但若app或library中不存在对应的variant类型呢?匹配将如何进行?下面列出了可能出现的几种情形:

情形1:app中有某个build type但library却木有

可以通过matchingFallbacks属性来设置回退策略,提供可能的匹配列表,代码如下:

123456789101112131415
// In the app's build.gradle file.android {    buildTypes {        debug {}        release {}        staging {            // Specifies a sorted list of fallback build types that the            // plugin should try to use when a dependency does not include a            // "staging" build type. You may specify as many fallbacks as you            // like, and the plugin selects the first build type that's            // available in the dependency.            matchingFallbacks = ['debug', 'qa', 'release']        }    }}

若希望可以针对app的每个build type都执行相同的回退策略(例如我们大量的library只有一个release的build type),则可以使用批量指令:

123
buildTypes.all { type ->    type.matchingFallbacks = ['release']}

(注意:在该情景下,若library中有某个build type但app却木有,不会对app有任何影响)

情景2:在同一个dimension维度下,如:tier。若app中有某个flavor但library却木有:

同样可以通过matchingFallbacks属性来设置回退策略,代码如下:

1234567891011121314151617181920212223242526
// In the app's build.gradle file.android {    defaultConfig{    // Do not configure matchingFallbacks in the defaultConfig block.    // Instead, you must specify fallbacks for a given product flavor in the    // productFlavors block, as shown below.    }    flavorDimensions 'tier'    productFlavors {        paid {            dimension 'tier'            // Because the dependency already includes a "paid" flavor in its            // "tier" dimension, you don't need to provide a list of fallbacks            // for the "paid" flavor.        }        free {            dimension 'tier'            // Specifies a sorted list of fallback flavors that the plugin            // should try to use when a dependency's matching dimension does            // not include a "free" flavor. You may specify as many            // fallbacks as you like, and the plugin selects the first flavor            // that's available in the dependency's "tier" dimension.            matchingFallbacks = ['demo', 'trial']        }    }}

(注意:在该情景下,若library中有某个flavor但app却木有,不会对app有任何影响)

情景3:library中有某个dimension维度,但app中却没有:

可以通过missingDimensionStrategy属性来设置选择策略,代码如下:

12345678910111213141516171819202122
// In the app's build.gradle file.android {    defaultConfig{    // Specifies a sorted list of flavors that the plugin should try to use from    // a given dimension. The following tells the plugin that, when encountering    // a dependency that includes a "minApi" dimension, it should select the    // "minApi18" flavor. You can include additional flavor names to provide a    // sorted list of fallbacks for the dimension.    missingDimensionStrategy 'minApi', 'minApi18', 'minApi23'    }    flavorDimensions 'tier'    productFlavors {        free {            dimension 'tier'            // You can override the default selection at the product flavor            // level by configuring another missingDimensionStrategy property            // for the "minApi" dimension.            missingDimensionStrategy 'minApi', 'minApi23', 'minApi18'        }        paid {}    }}

说明:其中missingDimensionStrategy属性的第一个值为dimension维度,后面的Strings为该维度下的渠道flavors。我们可以看下它的函数原型:

12345
public void (String dimension, String requestedValue);public void (String dimension, String... requestedValues);public void (String dimension, List<String> requestedValues);

(注意:在该情景下,若app中有某个dimension维度,但library中却没有,不会对app有任何影响)

情景4:若library没有任何dimension和flavor,则不需app做任何flavor的回退处理~

说了这么多种场景,是不是快被绕晕了?其实诸如dimension的声明以及提供匹配回退策略都是为了实现精确的variant匹配。但是这么多的场景咋看之下还是比较晕,在遇到具体的业务依赖场景后再回来看这一块的内容,你会更加的有收获~

Java8特性的支持

升级到Gradle Plugin 3.0.0之后,一直被诟病的Jack已经被官方弃用了,取而代之的是最新的desugar方案。

若项目之前用了类似retrolambda或者Jack这种旧方案的话,会出现以下提示告诉你移除相关的代码:

Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle: apply plugin: ‘me.tatarka.retrolambda’ To learn more, go to https://d.android.com/r/tools/java-8-support-message.html

启用最新的desugar也非常简单,设置一下sourceCompatibilitytargetCompatibility即可:

12345678910
android {  ...  // Configure only for each module that uses Java 8  // language features (either in its source code or  // through dependencies).  compileOptions {    sourceCompatibility JavaVersion.VERSION_1_8    targetCompatibility JavaVersion.VERSION_1_8  }}

目前所支持Java8的特性有:

  • Lambda expressions
  • Method References
  • Type Annotations
  • Default and static interface methods
  • Repeating annotations

(注意:stream及function包下的api只能在API level 24+以上才可以使用)

禁用该特性也是分分钟的事情:

1
android.enableDesugar=false

官方文档:
https://developer.android.com/studio/write/java8-support.html

android-apt相关的异常

最后的最后很多同学会遇到以下关于android-apt的报错:

解决方法:

  • 移除android-apt相关的plugin,如:

    1
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  • 依赖中的apt改成annotationProcessor,如:

    1
    annotationProcessor 'com.android.databinding:compiler:3.0.0'
  • 如果有用到类似Realm这种第三方的plugin,确保升级到最新版试试(旧版的Realm用的还是android-apt),突然发现升级到最新版后api接口被改了,泪奔中…

    12345678
    buildscript {    repositories {        jcenter()    }    dependencies {        classpath "io.realm:realm-gradle-plugin:4.2.0"    }}

更多

还有更多的迁移变化,由于项目中还没涉及到,就先不写了,大家可以参考官方文档:
https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

原文:大专栏  Android Studio 3.0及Gradle Plugin 3.0升级注意事项


Android Studio 如何导入开源库?

Android Studio 如何导入开源库?

android开发小白一枚,开发环境:Android Studio ,想用github的开源库,像Android-PullToRefresh。网上给的导入方法都是Eclipse,自己尝试➕百度,还是错误频出,不会用开源库。

谢谢大家了。

Android Studio 安装注意事项

Android Studio 安装注意事项

http://tools.android.com/download/studio/canary      每周都有更新,不内置 SDK

NOTE: These .zip files do not contain an embedded SDK install. If you have an existing install of Studio which contains an embedded SDK, if you upgrade by installing one of these zips, make sure you copy over the SDK as well.

http://tools.android.com/download/studio/dev           版本对应下面↓, 不内置 SDK

http://developer.android.com/sdk/installing/studio.html    开发者官网,内置 SDK

This download includes:

  • Android Studio early access preview

  • All the Android SDK Tools to design, test, debug, and profile your app

  • The latest Android platform to compile your app

  • The latest Android system image to run your app in the emulator

如果已经从官网安装了 Android Studio, 应该可以通过 canary 和 dev channel 下载的 zip 解压覆盖,完成更新.

SDK 下载 可以选择 SDK Tools Only 下载。解压到自己指定的目录,运行 SDK Manager 即可在线更新.

如需离线更新 SDK, 可以通过 SDK Manage 每次打开时显示的 Log, 浏览器中打开希望更新的文件 xml 地址,在页面中找到文件名,更改 xml 地址后缀为文件名,复制到迅雷即可下载.

下载完成后,复制到,SDK 目录下的 temp 中,在打开 SDK Manager, 选择更新的文件,因为文件已经下载,所以显示 Downloading 只有几秒,然后开始解压安装.

例子:

要安装 Intel x86 Atom System Image 以创建更快的模拟器,查看 Log

知道文件 xml 地址为:https://dl-ssl.google.com/android/repository/sys-img/x86/sys-img.xml, 在浏览器中打开,可以找到各个版本 SDK 对应的文件名:

要用迅雷下载 sysimg_x86-19_r02.zip, 可知其下载地址为:https://dl-ssl.google.com/android/repository/sys-img/x86/sysimg_x86-19_r02.zip

离线更新 AndroidStudio 注意事项:

从 http://tools.android.com/download/studio/canary/latest 下载最新 Canary 版本离线包。

例如下载 0.5.8,解压后的 android-studio 文件夹下有四个文件夹和三个文本。

到本地 Android Studio 的安装目录(C:\Android\android-studio),备份 “四个文件夹和三个文本”,然后删除原本,复制新的过去。

打开,出现提示: This version of Android Studio may not work correctly without Android SDK Tool revision 22.6.2 or above. 

然后就按要求下载更高级版本的 SDK 吧。

Android Studio 安装配置完全步骤、注意事项及常见问题

Android Studio 安装配置完全步骤、注意事项及常见问题

一、安装配置 JDK

1.1 下载 JDK 安装包

下载路径 1:官网下载(注:官网下载需要注册 ORACLE 账户,繁琐)。

下载路径 2:百度软件软件中心或网上自行搜索下载。

1.2 安装 JDK,配置环境变量

(1)安装 JDK(可以选择默认安装路径或者自定义安装路径)。

(2)配置环境变量(根据安装路径自行修改变量值,下面以默认安装路径为例)

        右键点击 “我的电脑”- 属性 - 高级系统设置 - 环境变量 - 系统变量

  • 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.8.0_101
  • 变量名:CLASSPATH 变量值:.;% JAVA_HOME%\lib\dt.jar;% JAVA_HOME%\lib\tools.jar;
  • 变量名:PATH 变量值:% JAVA_HOME%\bin;% JAVA_HOME%\jre\bin;

        注意:CLASSPATH 的变量值前两个字符为 “.;”

                  CLASSPATH 的变量值前两个字符为 “.;”

                  CLASSPATH 的变量值前两个字符为 “.;”

        系统变量适用于本机,用户变量只适用于当前用户。配置环境变量尽量选择配置 “系统变量”。另外,用户变量可以引用系统变量,反之则不行。 

1.3 验证 JDK 环境变量配置

        windows+R,输入 CMD,进入命令行。分别输入命令 java,javac,java -version。如命令执行成功,则 JDK 安装配置正确,可以进行下一步骤 ——AndroidStudio 安装。否则,检查并重新配置环境变量。

二、Android Studio 安装

2.1 下载 Android Studio 安装包

下载地址 1:Android Studio 中文社区。

下载地址 2:百度软件软件中心或网上自行搜索下载。

2.2 Android Studio 安装及注意事项

(1)安装 Android Studio

        勾选安装 SDK 与 AVD,开始安装...

  • 可以选择安装 200 多 M 安装包的 Android Studio + 单独下载的 SDK
  • 如果日常调试使用的是真机,可以取消勾选 AVD

        安装完成后,不要直接勾选 “Start Android Studio” 启动应用。

(2)启动前配置 1— 防止重新下载 SDK

        再次注意:安装完成后,不要直接勾选 “Start Android Studio” 启动应用。

                        安装完成后,不要直接勾选 “Start Android Studio” 启动应用。

                        安装完成后,不要直接勾选 “Start Android Studio” 启动应用。

        Android Studio 启动前,打开安装目录,先将 bin 目录的 idea.properties 文件中增加一行:

  disable.android.first.run=true

        为什么这样做? 

        Android Studio 安装完成后,第一次启动 AS 前,为了避免重新下载新版本的 SDK,需要做如下操作:先将 bin 目录的 idea.properties 文件中增加一行:disable.android.first.run=true

(3)启动前配置 2— 防止下载 gradle 花费时间过长(墙的原因)

        单独下载 gradle,下载完成后将压缩包解压文件至 C:\Users\username\.gradle\wrapper\dists 下

        如果在用户目录下没有找到.gradle,请启动 Android Studio,此时 Android Sudio 会在你新建项目之后,开始下载构建工具 gradle。由于墙,下载速度慢,所以需要强制关闭程序(同时在任务管理器中关掉进程 studio64)。此时再次打开 user 目录就会发现.gradle 目录已经及建立,其中有未下载完成的文件,可将之前下载好的 gradle 包解压到目录下。(ps->gradle 简介)

 (5)验证安装是否正确

        Android Studio 左下角会有如下提示 “Gradle build finished in x s x ms”,表明 Gtadle 解压成功。

        

三、Android Test Tools

3.1 adb 配置使用

  • 配置

        (1)将 platform-tools 配置到系统环境变量中 (D:\SDK\platform-tools)

        (2)命令行使用 adb,验证环境变量是否配置成功 

   此时,打开手机 “开发者选项 - USB 调试”,命令行输入

adb devices

    打开连接设备列表,如果设备列表不为空,说明可以使用 adb 调试手机。如果设备列表显示为空,则进行下一步操作 — 驱动安装。

  • 驱动安装

        (1)百度搜索下载 adb 驱动。

        (2)打开 “设备管理器”,找到并更新 Android 驱动(选择已下载的本地驱动)。

       (3)再次通过 adb 命令查看设备。

补充:有些手机的驱动需要单独安装专用驱动,不可以使用通用 android 驱动。请自行百度下载。

3.2 UIAutomatorviewer 配置

  • 配置

            (1)SDK 的 tools 目录下的 bin 目录配置到环境变量 path 中。

            (2)打开命令行,输入 uiautomatorviewer,查看连接设备的截屏。

  • “Unable to connect to adb .Check if adbs is installed correctly” 解决方法

           (1)打开 uiautomatorviewer.bat,找到 uiautomatorviewer.bat 文件最后一行:

call "%java_exe%" "-Djava.ext.dirs=%javaextdirs%" "-Dcom.android.uiautomator.bindir=%prog_dir%" -jar %jarpath% %*

            (2)将其中的 binddir=%prog_dir% 修改为 SDK 的 platform-tools 所在路径。

call "%java_exe%" "-Djava.ext.dirs=%javaextdirs%" "-Dcom.android.uiautomator.bindir=D:\Android\SDK\platform-tools" -jar %jarpath% %*

        

 

 

 

 

 

 

关于Android Studio 导入开源项目的正确姿势及注意事项android studio 导入源码的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android Studio 3.0及Gradle Plugin 3.0升级注意事项、Android Studio 如何导入开源库?、Android Studio 安装注意事项、Android Studio 安装配置完全步骤、注意事项及常见问题等相关内容,可以在本站寻找。

本文标签: