update - how to use android studio




如何使用Android Studio和gradle構建Android庫? (3)

Gradle Build Tools 2.2.0+ - 一切正常

這是做到這一點的正確方法

在試圖避免實驗性並坦率地厭倦NDK及其所有黑客行為的時候,我很高興2.2.x的Gradle構建工具出來了,現在它正常運行。 關鍵是externalNativeBuild並在Android.mk指向ndkBuild路徑參數,或將ndkBuild更改為cmake並將路徑參數指向CMakeLists.txt構建腳本。

android {
    compileSdkVersion 19
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 19

        ndk {
            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
        }

        externalNativeBuild {
            cmake {
                cppFlags '-std=c++11'
                arguments '-DANDROID_TOOLCHAIN=clang',
                        '-DANDROID_PLATFORM=android-19',
                        '-DANDROID_STL=gnustl_static',
                        '-DANDROID_ARM_NEON=TRUE',
                        '-DANDROID_CPP_FEATURES=exceptions rtti'
            }
        }
    }

    externalNativeBuild {
        cmake {
             path 'src/main/jni/CMakeLists.txt'
        }
        //ndkBuild {
        //   path 'src/main/jni/Android.mk'
        //}
    }
}

有關更多詳細信息,請查看Google關於添加本機代碼的頁面

安裝正確後,您可以./gradlew installDebug並關閉你。 您還需要注意,由於gcc現已在Android NDK中棄用,因此NDK正在轉向叮噹聲。

我正在嘗試從Eclipse遷移項目,但沒有嘗試過。 在Eclipse中,我有3個項目(2個android應用程序項目和1個android庫項目)。 這兩個應用程序項目取決於圖書館項目。 當我執行gradle導出時,我得到3個不起作用的項目。 我願意重組項目,但沒有找到任何文件說明如何完成這項工作。

有沒有辦法讓Eclipse導出的3個項目一起工作? 我是否更好地重組事情,如果是的話,是否應該如何做文件?

更新

我已經將整個項目上傳到GitHub https://github.com/respectTheCode/android-studio-library-example

更新1

根據Padma Kumar的建議,這是我嘗試過的。

  1. 創建一個名為MyApp的新項目
  2. 單擊File > New Module ,選擇Android Library並將其命名為MyLib
  3. 點擊Build > Make Project

構建失敗並出現此錯誤

Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.

然後我在清單中添加了一個package屬性

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >

建立後,我得到這個錯誤

Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist

添加依賴關係似乎對錯誤沒有任何影響。 從上面繼續

  1. 單擊File > Project Structure > Modules > MyApp-MyApp
  2. 切換到Dependencies選項卡
  3. 點擊+ > Module Dependency並選擇MyLib
  4. 單擊ApplyOK
  5. 點擊Build > Make Project

更新2

根據Ethan的建議,這是我們得到的

2子項目build.gradle似乎有所有正確的部分,唯一的區別是插件行下面是MyApp/build.gradle

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

根項目build.gradle是空的,所以我添加了這樣的兩個項目

dependencies {
    compile project(":MyLib")
    compile project(":MyApp")
}

我現在在構建時遇到這個錯誤

Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

更新3

非常感謝Ethan為了解決這個問題。

  1. compile project(':SubProjects:MyLib')MyLib/build.gradle
  2. MyLib/build.gradle刪除compile files('libs/android-support-v4.jar')
  3. 關閉項目並從Gradle導入根項目

更新4

從0.1.2開始,現在可以包含compile "com.android.support:support-v4:13.0.0"而不是compile files('libs/android-support-v4.jar') 。 由於它現在來自mavin,所以你可以將它包含在多個項目中而沒有任何問題。

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

dependencies {
    compile "com.android.support:support-v4:13.0.0"

    compile project(':SubProjects:MyLib')
}

更新5

從0.1.3開始,工具欄中現在有一個“Sync Project”按鈕。 您可以單擊它,而不必在更改.gradle文件後重新導入項目。


注意 :這個答案是純粹的Gradle答案,我經常在IntelliJ中使用它,但我不知道如何與Android Studio進行集成。 我相信知道發生了什麼,所以這就是我如何使用Gradle和Android。

TL; DR完整示例 - https://github.com/ethankhall/driving-time-tracker/

免責聲明 :這是我正在進行的項目。

Gradle有一個defined好的結構(你可以改變,底部的鏈接告訴你如何),如果你曾經使用它,它與Maven非常相似。

Project Root
+-- src
|   +-- main (your project)
|   |   +-- java (where your java code goes)
|   |   +-- res  (where your res go)
|   |   +-- assets (where your assets go)
|   |   \-- AndroidManifest.xml
|   \-- instrumentTest (test project)
|       \-- java (where your java code goes)
+-- build.gradle
\-- settings.gradle

如果您只有一個項目,則不需要settings.gradle文件。 但是你想添加更多的項目,所以我們需要它。

現在我們來看看build.gradle文件。 你將需要它(添加android工具)

的build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.3'
    }
}

現在我們需要告訴Gradle一些Android部件。 這很簡單。 一個基本的(在我的大多數情況下工作)如下所示。 我在這個塊中有一條評論,它允許我在生成APK時指定版本名稱和代碼。

的build.gradle

apply plugin: "android"
android {
        compileSdkVersion 17
        /*
        defaultConfig {
            versionCode = 1
            versionName = "0.0.0"
        }
        */
    }

我們希望添加的東西,幫助那些還沒有看到Gradle之光的人,這是他們在不安裝它的情況下使用該項目的一種方式。

的build.gradle

task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
    gradleVersion = '1.4'
}

所以現在我們有一個項目要建立。 現在我們要添加其他人。 我把它們放在一個目錄中,也許稱它為deps或subProjects。 這並不重要,但是你需要知道你把它放在哪裡。 要告訴Gradle您需要將項目添加到settings.gradle中。

目錄結構:

Project Root
+-- src (see above)
+-- subProjects (where projects are held)
|   +-- reallyCoolProject1 (your first included project)
|       \-- See project structure for a normal app
|   \-- reallyCoolProject2 (your second included project)
|       \-- See project structure for a normal app
+-- build.gradle
\-- settings.gradle

settings.gradle:

include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'

你應該確定的最後一件事是subProjects / reallyCoolProject1 / build.gradle已經apply plugin: "android-library"而不是apply plugin: "android"

像每個Gradle項目(和Maven)一樣,我們現在需要告訴根項目關於它的依賴關係。 這也可以包含所需的任何常規Java依賴關係。

的build.gradle

dependencies{
    compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'
    compile project(":subProjects:reallyCoolProject1")
    compile project(':subProjects:reallyCoolProject2')
}

我知道這似乎是很多步驟,但一旦你做了一次或兩次,它們就非常容易了。 假如您在那里安裝了Android SDK,這種方法也將允許您在CI服務器上構建。

NDK側注意:如果你打算使用NDK,你將需要下面的東西。 示例build.gradle文件可以在這裡找到: https://gist.github.com/khernyo/4226923 ://gist.github.com/khernyo/4226923

的build.gradle

task copyNativeLibs(type: Copy) {
    from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
  pkgTask.jniDir new File('build/native-libs')
}

資料來源:

  1. defined
  2. https://gist.github.com/khernyo/4226923
  3. https://github.com/ethankhall/driving-time-tracker/

這是我的Mac用戶解決方案我認為它也適用於窗口:

首先轉到您的Android Studio工具欄

Build> Make Project(當你們在線讓它下載文件)然後

構建>編譯模塊“你的應用程序名稱顯示在這裡”(仍在線讓該文件
下載並完成)然後

運行你的應用程序,它會啟動你的模擬器並配置它然後運行它!

這就對了!!! 快樂編碼傢伙!!!!!!!





android-studio