Articles of android gradle

来自sourceSet的Gradle排除文件无法正常工作

我有一个项目,我试图将java源文件树中的单个文件包含到库项目中。 无论我做什么,我都不能只包含那个文件。 我在另一个项目中取得了成功,排除了除一个文件之外的所有文件,但只有在从库项目运行gradle时才有效。 从应用程序目录运行时,包含所有文件。 在尝试创建一个可以重现问题的简单项目时,同样排除所有问题也不起作用。 示例文件树很简单: application – android app that includes the two libraries library1/ build.gradle src/main/AndroidManifest.xml library2/ build.gradle src/main/AndroidManifest.xml java/src/com/company/product/ /pkg1 Source1.java, Source2.java, Source3.java libraryoneonly/Library1Source.java /pkg2 Source1.java, Source2.java, Source3.java library1 build.gradle看起来像这样。 下面的工作既不包括也不包括在内。 LIBRARY1 /的build.gradle apply plugin: ‘com.android.library’ android { sourceSets { main.jni.srcDirs = [] main.jniLibs.srcDir ‘src/main/libs’ main.java { srcDir “../../java/src” exclude { FileTreeElement […]

使用Android Studio在gradle中使用系统环境variables的正确方法

我正在使用Android Studio在Ubuntu 14.04系统上构建我的项目。 我在build.gradle文件中写了以下内容,以避免在我的git仓库中硬编码storeFile,storePassword,keyAlias和keyPassword: signingConfigs { debug { storeFile file(System.getenv(“KEYSTORE”)) storePassword System.getenv(“KEYSTORE_PASSWORD”) keyAlias System.getenv(“KEY_ALIAS”) keyPassword System.getenv(“KEY_PASSWORD”) } 但是gradle sync错误出现以下情况: Error:(49, 0) Neither path nor baseDir may be null or empty string. path=’null’ basedir=’./pathto/TMessagesProj’ Error:(49, 0) Neither path nor baseDir may be null or empty string. path=’null’ basedir=’./pathto/TMessagesProj’ 我的.bashrc包含: source ~/.gradlerc和my~ / .gradlerc包含以下内容: export KEYSTORE=”/home/myname/keystore/mykey” export […]

自动解决Android构建错误:帧像素必须是实心或透明(不是中间alpha)。 – 在顶部边缘的像素#4处find

Android Studio(使用SDK 19,21或22)显示Eclipse ADT(使用SDK 19)没有的错误: 错误:9-patch image D:\ Workspaces …. \ res \ drawable-hdpi \ btn_bg_common_press.9.png格式错误。 错误:帧像素必须是实心或透明(不是中间alpha)。 – 在顶部边缘的像素#4处find。 或者另一个错误 : 错误:透明框中的刻度必须为黑色或红色。 两者都在 错误:错误:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理’命令’E:\ Android \ sdk-Android-Studio \ build-tools \ 19.1.0 \ aapt .exe”以非零退出值42结束 文件示例在上面,但有20多个这样的文件运行良好。 如何让Android Studio或Gradle跳过此错误而不会失败,而无需逐个修改这些文件? 如果使用Gradle无法实现,我可以用什么命令行工具替换所有透明像素? 应用程序模块(资源所在的)的build.gradle文件如下所示。 我已经尝试过使用SDK 19和SDK 21以及构建工具19.1,21.1.2,22 。 AOSP上的类似问题, 问题159464:Android studio:mergeDebugResources导入Eclipse项目时失败 。 buildscript { repositories { jcenter() } dependencies { […]

在依赖解析中包含配置后,无法更改配置’:app:api’的依赖关系

在依赖解析中包含配置后,无法更改配置‘:app:api’的依赖关系。

如何修复“Support-v13:19.1.0取决于库,但不是库本身”?

自从从0.6.2升级以来,我刚刚在Android Studio 0.8.1中推出了一个项目。 引发的错误是“错误:模块版本com.android.support:support-v13:19.1.0取决于库,但不是库本身”。 有谁知道为什么会这样? 我已经安装了一些新的API20用于Android L,但是这个项目的buildTools仍然设置为19.1.0。 这是我的build.gradle的依赖项部分: dependencies { compile fileTree(dir: ‘libs’, include: [‘*.jar’]) compile ‘com.android.support:appcompat-v7:19.1.+’ compile ‘com.android.support:support-v13:19.1.+’ compile ‘com.jakewharton:butterknife:5.1.0’ compile ‘de.greenrobot:eventbus:2.2.1’ compile ‘com.google.code.gson:gson:2.2.4’ compile ‘com.mcxiaoke.viewpagerindicator:library:2.4.1’ compile ‘uk.co.chrisjenx:calligraphy:0.7.+’ compile ‘com.crashlytics.android:crashlytics:1.+’ compile ‘com.google.android.gms:play-services:4.4.+’ } SDK / Buildtools设置如下: compileSdkVersion 19 buildToolsVersion “19.1.0” 任何人都可以解释这个或指向我修复? 我很难过。

构建脚本错误,发现不支持的Gradle DSL方法:’release()’!

我在我的gradle包装器中使用Android studio 0.50发行版和gradle 1.11-all。 我有3个模块,以下是build.gradle文件。 第1单元 apply plugin: ‘android’ apply plugin: ‘android-test’ android { compileSdkVersion 19 buildToolsVersion ‘19.0.1’ packagingOptions { exclude ‘META-INF/ASL2.0’ exclude ‘META-INF/LICENSE’ exclude ‘META-INF/NOTICE’ } defaultConfig { minSdkVersion 10 targetSdkVersion 19 versionCode 1 versionName “1.0” } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.txt’ } } sourceSets { androidTest.setRoot(‘src/test’) } } 第2单元 […]

无法在同一设备上安装调试版和发行版

我已经在我的项目中使用applicationIdSuffix配置了构建变体,以便我可以在我的设备上安装调试版和发行版。 这是我的build.gradle (相关部分): buildTypes { debug { buildConfigField “String”, “BASE_URL”, ‘”http://dev.xyz.com”‘ applicationIdSuffix “.debug” } release { buildConfigField “String”, “BASE_URL”, ‘”http://api.xyz.com”‘ minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } 但是当我尝试安装两者时,它失败了。 我尝试了不同的方法: 1.生成调试和发布apks,并将它们传输到我的手机存储。 第一个安装,第二个安装错误“App not installed” – 没有进一步的信息。 无论我先安装哪个版本,都是一样的。 2.从存储安装调试版本,然后尝试从Play商店安装发行版本,但Play商店提供错误: 无法安装应用程序错误代码:-505。 3.从商店安装发布版本,然后尝试从android studio运行项目,这是我的’运行’日志: Launching app $ adb push D:\myPROJECTS\MyApp\app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.myapp.debug $ adb shell pm install -r “/data/local/tmp/com.example.myapp.debug” java.lang.UnsatisfiedLinkError: […]

安装split apks时出错:com.android.ddmlib.InstallException:无法完成会话:INSTALL_FAILED_INVALID_APK

Android Studio没有将我的APK推送到具有Marshmallow(6.0.1)的物理Nexus 5X。 这是输出和错误: 01/15 01:51:48: Launching mobile $ adb install-multiple -r /Users/MyUser/AndroidStudioProjects/MyApp/mobile/build/outputs/apk/mobile-development-debug-unaligned.apk /Users/MyUser/AndroidStudioProjects/MyApp/mobile/build/intermediates/split-apk/development/debug/main.apk /Users/MyUser/AndroidStudioProjects/MyApp/mobile/build/intermediates/split-apk/development/debug/main.apk Error installing split apks: com.android.ddmlib.InstallException: Failed to finalize session : INSTALL_FAILED_INVALID_APK: Split lib_main was defined multiple times Error during launch 细节: defaultConfig:minSdkVersion 9 targetSdkVersion 23 multiDexEnabled true 2 buildTypes:debug和release 2 productFlavors:开发和生产 dexOptions:incremental false preDexLibraries = false jumboMode = true javaMaxHeapSize“4096M” […]

java.lang.IllegalAccessError:Method’void android.support.v4.content

我在我的sdk中更新了playservice,我收到了这个错误。 我无法访问GCM令牌。 在更新sdk之前,我的项目完美运行。 我浪费了整整一天但没有find任何解决方案。 我尝试了这个,但是在这个依赖项com.google.android.gms:play-services-plus:9.0.0 这是我的logcat Caused by: java.lang.IllegalAccessError: Method ‘void android.support.v4.content.ContextCompat.()’ is inaccessible to class ‘com.google.android.gms.iid.zzd’ (declaration of ‘com.google.android.gms.iid.zzd’ appears in /data/data/com.hwindiapp.passenger/files/instant-run/dex/slice-com.google.android.gms-play-services-iid-9.0.0_b51865a18dbfbfb3651aaa54856c955adf1e354f-classes.dex) at com.google.android.gms.iid.zzd.zzeC(Unknown Source) at com.google.android.gms.iid.zzd.(Unknown Source) at com.google.android.gms.iid.zzd.(Unknown Source) at com.google.android.gms.iid.InstanceID.zza(Unknown Source) at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source) at com.mainProfile.classFiles.RegisterFbLoginResCallBack$registerFBUser.processGCMID_user(RegisterFbLoginResCallBack.java:166) at com.mainProfile.classFiles.RegisterFbLoginResCallBack$registerFBUser.doInBackground(RegisterFbLoginResCallBack.java:219) at com.mainProfile.classFiles.RegisterFbLoginResCallBack$registerFBUser.doInBackground(RegisterFbLoginResCallBack.java:153) at android.os.AsyncTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at […]

Gradle for Android,AAR和条件依赖项

简短forms :为AAR组织代码/ POM有哪些方法,这样使用该AAR的应用程序只有他们实际需要的依赖项? 长forms : 假设我们有一个依赖于打包为AAR(L)的Android库项目的应用程序。 L包含多个类,任何给定的应用程序(如A)都只使用这些类的子集。 例如: L可能包含本机API Level 11片段的Fragment实现,反向移植的片段和ActionBarSherlock风格的片段 L可能包含常规活动的Activity实现, FragmentActivity , ActionBarActivity和ActionBarSherlock风格的活动 L可以通过LocalBroadcastManager ,Square’s Otto和greenrobot的EventBus引发事件 等等 正如我所看到的,这些案例有两个主要共性: 应用程序通常只关心某些类。 例如,使用Otto的应用程序不关心引用greenrobot的EventBus的代码,或者使用ActionBarActivity的应用程序不关心ActionBarSherlock。 如果AAR是回购中的工件,则应用程序将不关心构建AAR所需的所有可能的上游依赖项。 例如,使用本机API Level 11片段的应用程序将不需要support-v4或actionbarsherlock ,即使AAR本身需要它们来构建AAR 如果我们使用JAR而不是AAR并转储依赖关系管理,这是相当简单的。 构建JAR将具有编译时依赖性(例如, support-v4 )。 但是,使用该JAR的应用程序可以跳过这些依赖项,只要这些应用程序不使用真正需要这些依赖项的类,生活就会很好。 但是,我很难看到如何使用build.gradle文件中指定的AAR和Maven工件完成相同的操作。 如果L具有引用上游依赖关系的dependencies块,那么当应用程序依赖于L时,应用程序将依次传递这些依赖关系。 我相当确定的一个解决方案是将L分成几个库。 例如,使用片段方案,我们可以: L1,包含本机API Level 11版本的片段的实现,以及其他场景所需的任何公共代码。 该库没有上游依赖项。 L2,其中包含使用Android Support包的片段backport的实现。 L2将依赖于L1和support-v4 。 L3,包含使用Sherlock风格片段的实现。 L3将依赖于L1和actionbarsherlock 。 然后,应用程序将选择是依赖于L1,L2还是L3,因此只会获得必要的上游依赖项(如果有的话)。 我的问题是:这是最好的解决方案吗? 或者Gradle for Android,AAR和Maven风格的工件世界还有什么东西可以让应用程序依赖单个L? 我担心库的组合爆炸可能会处理各种上游依赖关系。 我也担心奇怪的应用程序实际上需要多个实现,以及我们是否可以可靠地指定那些依赖项(例如,一个应用程序取决于L1和L2,因为那是该应用程序的作者认为应用程序需要的)。 我知道有一些应用程序可以阻止 […]