2013-12-09 85 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' 
    } 
    

    對於依賴修補模塊上的所有模塊。