2013-12-09 84 views
2

一个月前我已将项目移至Android Studio,尽管需要切换至新的(功能更强大的)构建系统(gradle),但我很高兴自己能做到。有一件事我在Eclipse中已经知道,但我无法弄清楚现在如何实现,正在修补支持库。我知道这听起来不是一个好习惯,但是一些代码行让我发疯,而解决方法就是简单地修改它来解决我的问题。
我试图修改sdk的“。\ extras \ android \ m2repository \ com \ android \ support”目录中的代码,但这似乎并没有影响真正用于编译的代码。
有关如何实现这一点的任何想法?使用Android Studio的补丁支持库

编辑:

我想在我的项目,以创建一个模块“SupportLibraryV4”,而这正是gradle这个告诉我,当我尝试建立它:

Error Code: 
    1 
Output: 

    trouble processing "java/android/support/v4/R$anim.class": 

    Ill-advised or mistaken usage of a core class (java.* or javax.*) 
    when not building a core library. 

    This is often due to inadvertently including a core library file 
    in your application's project, when using an IDE (such as 
    Eclipse). If you are sure you're not intentionally defining a 
    core class, then this is the most likely explanation of what's 
    going on. 

    However, you might actually be trying to define a class in a core 
    namespace, the source of which you may have taken, for example, 
    from a non-Android virtual machine project. This will most 
    assuredly not work. At a minimum, it jeopardizes the 
    compatibility of your app with future versions of the platform. 
    It is also often of questionable legality. 

    If you really intend to build a core library -- which is only 
    appropriate as part of creating a full virtual machine 
    distribution, as opposed to compiling an application -- then use 
    the "--core-library" option to suppress this error message. 

    If you go ahead and use "--core-library" but are in fact 
    building an application, then be forewarned that your application 
    will still fail to build or run, at some point. Please be 
    prepared for angry customers who find, for example, that your 
    application ceases to function once they upgrade their operating 
    system. You will be to blame for this problem. 

    If you are legitimately using some code that happens to be in a 
    core package, then the easiest safe alternative you have is to 
    repackage that code. That is, move the classes in question into 
    your own package namespace. This means that they will never be in 
    conflict with core system classes. JarJar is a tool that may help 
    you in this endeavor. If you find that you cannot do this, then 
    that is an indication that the path you are on will ultimately 
    lead to pain, suffering, grief, and lamentation. 

    1 error; aborting 

令人印象深刻!

+0

你必须导入支持库项目(从:“ANDROIDSDKPATH \ extras \ android \ support \ v4 \ src”)作为模块到你的项目并替换'compile'c​​om.android.support:support-v4:19.0.0 ''用'编译项目(“:NameOfSupportModule”)'在你的“主”模块的build.gradle – Selvin

+0

thx Selvin =)你可以把你的答案作为答案(而不是评论)吗?这样我可以“验证”它或评论它...... btw,我有一个问题,导入库build.gradle: 无法执行使用Gradle分布的构建'http://services.gradle.org/distributions/gradle- 1.9-rc-3-bin.zip”。 构建文件'C:\ Users \ zgui \ AppData \ Local \ Android \ android-studio \ sdk \ extras \ android \ support \ v4 \ src \ build.gradle'line:21 评估根项目'src' 。 评估根项目'src'时发生问题。 无法在根项目'src'的参数[5]中找到方法getAndroidPrebuilt()。 – elgui

+0

我做了一些测试,嗯,这是无效的答案... – Selvin

回答

0

修补SupportLib和手动添加它作为一个罐子:

  • 把SupportLib水罐里的libs文件夹
  • 右键单击它并点击“添加为库”
  • 确保编译文件( '库/ supportlib.jar')是在你的文件的build.gradle
  • 做一个干净的构建

免责声明:Android Studio: Add jar as library?

+0

谢谢,但我的主要问题实际上是在Android Studio中构建库。我可以创建一个Eclipse项目,特别是如果我没有其他选择,但... – elgui

+0

只需使用命令行? http://stackoverflow.com/questions/10871378/create-java-library-file – for3st

3

Android sdk没有建立支持库所需的全部文件。 你需要从https://android.googlesource.com签附加仓库:

  • 平台/框架/支持
  • 平台/ prebuilts/gradle这个-插件
  • 平台/ prebuilts/MAVEN_REPO /安卓
  • 平台/ prebuilts/SDK
  • 平台/ prebuilts /工具

请保持目录结构为Android存储库。

现在您可以更改支持库中的任何代码。如果您需要更改api v.4的支持库,请在“platform \ frameworks \ support \ v4”中执行。支持建立图书馆的gradle使用的补丁版本,下一个命令:

platform\frameworks\support\v4\gradle clean jar 

导致罐子可以在 “平台\出\主机\ gradle这个\框架\ SUPPORT \ V4 \库\” 中找到。把它放到你项目的libs文件夹中并添加build.gradle文件。

+0

听起来不错,我会尽力多谢=) – elgui

0

原来,伊利亚特列季亚科夫的答案只适用于支持库中没有资源的部分,因为它们不能放入.jar

构建例如设计支持库是如下正确的方法:

结帐这些回购协议从https://android.googlesource.com并保持文件结构:

  • 平台/框架/支持
  • 平台/ prebuilts/gradle-plugin
  • 平台/ prebuilts/maven_repo/android
  • 平台/ prebuilts/sdk
  • 平台/ prebuilts /工具

导航到平台/框架/支持/设计和编辑任何你想要的文件。现在重建一切与gradle clean assembleRelease

您可以在platform/out/host/gradle/frameworks/support/support-design/build/outputs/aar

找到生成的库文件support-design-release.aar在项目中创建一个app/libs文件夹和编辑app/build.gradle

repositories{ 
    flatDir{ 
     dirs 'libs' 
    } 
} 

dependencies { 
    compile(name:'support-design-release.aar', ext:'aar') 
} 

做项目的一个干净的重建和一切都将按预期工作

1

更新回答2016年为Linux和OS X使用捆绑gradle包装,而不是该系统的gradle这个安装:

结帐以下从https://android.googlesource.com信息库,并保持目录结构:

  • 平台/框架/支持
  • 平台/ prebuilts/gradle这个-插件
  • 平台/ prebuilts/MAVEN_REPO/android
  • 平台/ prebuilts/sdk
  • 平台/ prebuilts /工具
  • 平台/工具/外部/ gradle这个

修改库中的文件:在platform/frameworks/support/

  • 更改文件生成AAR

    • cd platform/frameworks/support
    • ./gradlew jarRelease
    • 由此产生的。AAR是platform/out/host/gradle/frameworks/support/<module>/build/outputs/aar/

    添加到项目

    • 创建旁边的应用程序的的build.gradle
    • 一个libs/文件夹添加libs文件夹到的build.gradle:repositories{ flatDir{ dirs 'libs' } }
    • 复制。 aar文件到libs/
    • 在build.gradle中添加aar到您的依赖项部分,例如:dependencies { compile(name:'my_custom_supportlib_module', ext:'aar') }

    模块已经在项目

    当补丁支持库模块,其他模块依赖,你会在构建导致错误有它的两倍。这可以通过排除原始依赖关系来避免。

    比如你修补recyclerview-v7,并添加

    dependencies { 
        compile(name:'recyclerview-v7-release', ext:'aar') 
    } 
    

    你必须排除这样的依赖。更改

    compile "com.android.support:design:24.2.1" 
    

    compile("com.android.support:design:24.2.1") { 
        exclude group: 'com.android.support', module: 'recyclerview-v7' 
    } 
    

    对于依赖修补模块上的所有模块。