Articles of gradle

如何在Gradle构build脚本(Android)中定义和使用常量?

我正在使用Gradle作为构build系统的Android应用程序。 我的目标是使用一个值(一个包名称)作为applicationId : productFlavors { orange { applicationId "com.fruits.android.orange" // … 而且通过BuildConfig公开它,以便Java代码可以访问它。 这种访问必须从外部的味道(即免费版本的应用程序需要知道付费版本的包名称,以便它可以提示用户在Play商店升级)。 所以我想要这样做: productFlavors { orange { applicationId orangeProPackage // … buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ? 只有我不知道如何定义orangeProPackage以便它在整个build.gradle中可见并且不会中断脚本。 既然有几种不同的口味,那么最好能把这些常量按这种方式组合起来(我想呢?): def proPackages = [ orange: "…" apple: "…" banana: "…" ] 然后以proPackages.orange等清晰描述的方式引用它们。 问题是,如何做到这一点? 这是不是重复的是否有可能在Gradle中声明一个可用于Java的variables? 我已经看到了这个问题(和其他一些问题)。 我知道如何声明buildConfigFields,我已经有很多了。 我的问题是关于重用与buildConfigField 和 applicationId相同的值。

在切换到Android Studio 2.0后使用Dagger 2时出现NoClassDefFoundError

在升级到Android Studio 2.0之前,我可以使用Dagger 2没有问题。 现在我得到一个NoClassDefFoundError这已经closures了一天多,我伸出援手。 看起来好像Gradle不能我的AppModule类,即使它很清楚,它在我的项目中。 我甚至包括了set multiDexEnabled true即使我的项目只有几个文件。 我可以在网上find的所有东西都说可以点击你的库来导入。 Android Studio没有这样的奢侈品。 任何帮助将不胜感激,你将有我永远的忠诚。 04-21 17:26:54.006 7875-7875/com.androidtitan.spotscoreapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.androidtitan.spotscoreapp, PID: 7875 java.lang.NoClassDefFoundError: com.androidtitan.spotscoreapp.main.injection.AppModule_ProvidesApplicationFactory at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.initialize(DaggerAppComponent.java:31) at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.<init>(DaggerAppComponent.java:23) at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.<init>(DaggerAppComponent.java:0) at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent$Builder.build(DaggerAppComponent.java:66) at com.androidtitan.spotscoreapp.App.onCreate(App.java:28) at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:326) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5010) at android.app.ActivityThread.access$1600(ActivityThread.java:172) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5835) at java.lang.reflect.Method.invoke(Native Method) […]

在Android Studio中使用Gradle从编译中排除.jar

我目前有这样的build.gradle文件中的东西。 dependencies { compile 'com.android.support:support-v4:13.0.+' compile ('com.xxx:xxx-commons:1.+') { } } 由于jUnit和hamcrest-core都存在于com.xxx:xxx maven仓库中,所以出现了这样的问题: Gradle: Origin 1: /Users/yyy/.gradle/caches/artifacts-26/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar Gradle: Origin 2: /Users/yyy/.gradle/caches/artifacts-26/filestore/org.hamcrest/hamcrest-core/1.3/jar/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar Gradle: Execution failed for task ':android:packageDebug'. > Duplicate files copied in APK LICENSE.txt File 1: /Users/yyy/.gradle/caches/artifacts-26/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar File 2: /Users/yyy/.gradle/caches/artifacts-26/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar 因为jUnit实际上包含了hamcrest库,现在有一种方法可以实际排除jar:hamcrest-core-1.3.jar或者排除所有的.txt文件,或者从maven仓库中排除jUnit(不使用)。 任何其他的想法可能有帮助吗?

如何避免剥离的Android应用程序的本地代码符号

我得到本机代码sigsegv 11 ,我需要避免剥离了解什么是错的。 该应用程序使用图书馆(AAR),我可以避免与“cmd带” 黑客剥离。 但是在.so被剥离的版本.so反正使用,所以应用程序去掉符号,可能是transformNative_libsWithStripDebugSymbolForDebug gradle任务。 任何改变,以避免它? PS。 在SO上发现了类似的问题 ,但它有点不同(在我的情况下使用aar在这里没有剥离符号)。

Gradle – 如何从AndroidManifest获取值?

里面build.gradle Android项目 task runAndroidApplication(type: Exec, dependsOn: ':installDebug') { //TODO update Activity name below or find a way to get it from AndroidManifest.xml if (System.properties['os.name'].toLowerCase().contains('windows')) { // windows commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', "com.example.androidapptorun.MainActivity" } else { // linux commandLine 'adb', 'shell', 'am', 'start', '-n', "com.example.androidapptorun.MainActivity" } } 如何从AndroidManifest获取主Activity的默认Activity值? (如果有多个活动,则select一个的逻辑会使其变长,而处理是在Android工具内部) 有没有更好的方式从android插件然后parsingAndroidManifest.xml ? 更新: […]

Gitlab CI gradle依赖关系caching

我在Gitlab CI上构buildAndroid,每次下载依赖关系都很烦人。 我试过caching: $HOME/.gradle/ $HOME/.gradle/caches/ $GRADLE_HOME/caches/ $HOME/.m2/ .gradle/ build/ app/build/ 我的.gitlab-ci.yml的26594th迭代就在这里 。 我已经在我的编译环境中安装了gradle,因为每次都没有cachinggradlew下载它,这需要更多的时间。 我用于build筑的图像在这里 。 我的CI服务器启动脚本可以在这里find。 我认为,如果caching工作,我不会看到我的依赖关系下载每个版本的列表。 生成日志: gitlab-ci-multi-runner 0.7.2(998cf5d)使用Docker执行器与图像android …拉动docker图像gitlab / gitlab-runner:build …拉动docker图像android:最新…警告:不能拉最新版本的图像android:latest:错误:图像库/ android:最新未find警告:将使用本地find的图像。 Running on runner-76acd9d3-project-74192-concurrent-0 via ff9200d4be41… Fetching changes… Removing .gradle/ Removing artifacts.upload.log Removing rxfirebaseandroid/build/ HEAD is now at 7f151df djgfj Checking out 7f151df2 as ci-gitlab… HEAD is now at 7f151df… djgfj […]

Android Studio:构buildAPK与运行APK之间的差异

我已经注意到与这两个选项生成的apk之间的差异。 为什么会这样呢? 使用Build – > Build APK选项: MyProject \ app \ build \ outputs \ apk \ app-debug.apk(Size 2.997 KB) 使用运行应用程序选项: MyProject \ app \ build \ outputs \ apk \ app-debug.apk(尺寸3.300 KB) 谢谢。

Android Gradle构build:在APK LICENSE.txt的打包过程中复制文件

我正在尝试使用下面的gradle构build文件来构build一个Androidtesting buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.2' } apply plugin: 'android-library' repositories { mavenCentral() } dependencies { instrumentTestCompile "junit:junit:4.+" } android { compileSdkVersion 17 buildToolsVersion "17.0.0" instrumentTest.setRoot('tests') instrumentTest { java.srcDirs = ['tests/src'] res.srcDirs = ['tests/res'] assets.srcDirs = ['tests/assets'] resources.srcDirs = ['tests/src'] } } } 运行时出现以下错误: 错误:在打包过程中重复文件…归档中的path:LICENSE.txt来源1:…. gradle / caches / artifacts […]

IllegalArgumentException:已经添加:Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat $ AccessibilityServiceInfoIcsImpl;

我在MyProject + Facebook api上使用Android Studio + gradle作为库。 见下面的设置。 我已经尝试删除所有支持-v4(r7或18.0.0)的引用,并将其replace为support-v13,但v4的消息仍然存在。 我也注意到support-v4-r7出现在外部库中,即使它在任何地方都没有被引用。 那会是问题吗? MyProject build.gradle: buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() maven { url "https://raw.github.com/ark/ark/master/releases/" } } dependencies { compile 'com.andreabaccega:android-form-edittext:1.0.3' compile 'com.astuetz:pagerslidingtabstrip:1.0.0' compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.12' compile 'com.octo.android.robospice:robospice-spring-android:1.4.7' compile 'com.google.android.gms:play-services:3.1.36' compile files('libs/imageloader-core-1.5.8.jar') compile project(':libs:Facebook') } android […]

Android Studio 3.0 Canary 5 – 错误:无法加载类'org.gradle.api.internal.component.Usage'

我已经读过所有关于这个问题的现有堆栈问题,他们的解决scheme并没有帮助我。 这个问题已经很明显,因为所有AS更新超过2.3。 创build一个新的项目是好的,并build立 我试图复制“新项目”中的所有值,但仍然存在 错误: 错误:无法加载类“org.gradle.api.internal.component.Usage”。 这种意外错误的可能原因包括: Gradle的依赖关系caching可能已损坏(有时发生在networking连接超时之后)。重新下载依赖项并同步项目(需要networking) Gradle构build过程(守护进程)的状态可能已损坏。 停止所有的Gradle守护进程可能会解决这个问题。 停止Gradle构build过程(需要重新启动) 您的项目可能使用与项目中的其他插件或项目请求的Gradle版本不兼容的第三方插件。 在损坏的Gradle进程的情况下,您也可以尝试closuresIDE,然后杀死所有的Java进程。 gradle-wrapper.properties distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip 项目build.gradle buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-alpha5' classpath "io.realm:realm-gradle-plugin:0.89.1" } } allprojects { repositories { google() jcenter() maven { url 'https://jitpack.io' } } } task clean(type: Delete) { delete rootProject.buildDir } […]