Gradle对我和新的Android开发人员都有点困惑.任何人都可以解释Android Studio中的gradle是什么以及它的目的是什么?为什么Gradle包含在Android Studio中?
build-automation gradle android-studio android-gradle-plugin
我正在尝试使用新的Android Studio,但我似乎无法让它正常工作.
我正在使用Gson库来序列化/反序列化JSON对象.但是库不知何故不包含在构建中.
我创建了一个只有MainActivity的新项目.在/ libs文件夹中复制gson-2.2.3.jar并将其添加为库依赖项(右键单击 - >添加为库).这包括android studio中的jar,因此可以从源文件中引用它.
当我尝试运行该项目时,它无法编译,所以我添加:
compile files('libs/gson-2.2.3.jar')
Run Code Online (Sandbox Code Playgroud)
到de .gradle文件中的依赖项.之后它正确编译,但在运行应用程序时,我得到了一个ClassDefNotFoundException.
有谁知道我做错了什么?
android dependency-management gradle gson android-gradle-plugin
在网上搜索,目前尚不清楚Java 8是否支持Android开发.
在我下载/设置Java 8之前,有人可以在任何"官方"文档中指出我说Java 8是否支持Android开发.
我已经看了看文档与摇篮建设,但我仍然不知道什么之间的差异compileSdkVersion,并targetSdkVersion为.
它只是说:
该
compileSdkVersion属性指定编译目标.
那么,"汇编目标"是什么?
我看到两种可能的解释方式:
compileSdkVersion在构建应用程序所使用的编译器的版本,同时targetSdkVersion是"API级别的应用程序的目标".(如果是这种情况,我认为compileSdkVersion必须大于或等于targetSdkVersion?我看到之前已经问过这个问题,但是一个答案只引用了文档,这对我来说是不清楚的.
从我上一个项目更新后出现错误.我的代码不是问题,但我在build.gradle时遇到问题.我该如何解决?
build.gradle代码在这里:
apply plugin: 'android'
android {
compileSdkVersion 21
buildToolsVersion '20.0.0'
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
defaultConfig {
applicationId 'com.xxx.axxx'
minSdkVersion 14
targetSdkVersion 19
versionCode 6
versionName '1.0'
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
compile files('libs/commons-codec-1.8.jar')
compile files('libs/asmack-android-8-4.0.4.jar')
compile 'com.android.support:support-v4:21.0.0'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.jakewharton:butterknife:5.1.1'
}
Run Code Online (Sandbox Code Playgroud)
Gradle Sync消息输出: …
我想让我的Gradle构建使用Gradle创建一个发布签名的apk文件.
我不确定代码是否正确或者我在做gradle build什么时缺少参数?
这是我的gradle文件中的一些代码:
android {
...
signingConfigs {
release {
storeFile file("release.keystore")
storePassword "******"
keyAlias "******"
keyPassword "******"
}
}
}
Run Code Online (Sandbox Code Playgroud)
gradle构建完成SUCCESSFUL,在我的build/apk文件夹中我只看到...-release-unsigned.apk和...-debug-unaligned.apk文件.
关于如何解决这个问题的任何建议?
自从gradle android插件2.2-alpha4:
Gradle将尝试下载项目所依赖的缺失SDK包
这真是太酷了,并且被认为是一个JakeWharton项目.
但是,要下载SDK库,您需要:接受许可协议或gradle告诉您:
您尚未接受以下SDK组件的许可协议:[Android SDK Build-Tools 24,Android SDK Platform 24].在构建项目之前,您需要接受许可协议并使用Android Studio SDK Manager完成缺少的组件的安装.或者,要了解如何将许可协议从一个工作站转移到另一个工作站,请访问 http://d.android.com/r/studio-ui/export-licenses.html
这是一个问题,因为我喜欢在做一个时安装所有sdk依赖项gradle build.
我正在寻找一种自动接受所有许可证的解决方案.也许是一个gradle脚本?你有什么想法 ?
谢谢!
[编辑]
解决方案是执行:
android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository
Run Code Online (Sandbox Code Playgroud)
并手动安装,但这是gradle的新功能目的.
[编辑2]
更好的解决方案是使用sdkmananger:
yes | sdkmanager --licenses
Run Code Online (Sandbox Code Playgroud) 是否可以在Gradle中声明一个可用于Java的变量?基本上我想在build.gradle中声明一些变量,然后在构建时获取它(显然).就像C/C++中的预处理器宏一样......
宣言的一个例子就是那样......:
android {
debug {
A_VAR_RETRIEVABLE_IN_JAVA = 42
}
release {
A_VAR_RETRIEVABLE_IN_JAVA = 42+52
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做那样的事情?
我一直在尝试新的Android构建系统,我遇到了一个小问题.我已经编译了自己的ActionBarSherlock的aar包,我称之为'actionbarsherlock.aar'.我正在尝试做的实际上是使用这个aar来构建我的最终APK.如果我使用编译项目(':actionbarsherlock')将整个ActionBarSherlock库作为android-library模块包含到我的主项目中,我可以成功构建而没有任何问题.
但我的问题是,我想将该依赖项作为aar文件包手动提供,如果我想要一个JAR,那么我似乎无法弄清楚如何正确地将它包含到我的项目中.我试图使用编译配置,但这似乎不起作用.我继续在编译期间找不到符号,这告诉我来自aar包的classes.jar没有包含在类路径中.
有谁知道手动将aar包作为文件包含的语法?
的build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile files('libs/actionbarsherlock.aar')
}
android {
compileSdkVersion 15
buildToolsVersion "17.0"
}
Run Code Online (Sandbox Code Playgroud)
编辑:所以答案是它目前不支持,如果你想跟踪它,这是问题.
编辑:目前仍然没有直接支持,最好的替代方案似乎是来自@RanWakshlak的建议解决方案
编辑:使用@VipulShah提出的语法也更简单
我有一个用Android Studio编写的简单类:
package com.mysite.myapp;
import org.apache.http.client.HttpClient;
public class Whatever {
public void headBangingAgainstTheWallExample () {
HttpClient client = new DefaultHttpClient();
}
}
Run Code Online (Sandbox Code Playgroud)
从这里我得到以下编译时错误:
Cannot resolve symbol HttpClient
不HttpClient包含在Android Studio SDK中?即使不是,我也将它添加到我的Gradle构建中:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'org.apache.httpcomponents:httpclient:4.5'
}
Run Code Online (Sandbox Code Playgroud)
无论有没有最后一个编译行,错误都是一样的.我错过了什么?