⑴ 如何使用Gradle構建不同版本的app
對於多種類型的apk包構建,通常有以下需求:
各版本有不同的代碼、資源
上述代碼中各版本有不同的依賴
各版本有不同的Manifest中元素需求
各版本有不同的proGuard
android
Studio中使用Gradle編譯多種apk包需要靠proctFlavors或者buildTypes實現,如果有兩種proct
flavor和兩種build
type,則他們可以生成2*2=4種不同類型的apk包。下文主要使用proctFlavors自定義apk內容,而buildTypes使用默認
⑵ android studio gradle build後為什麼沒生成apk
gradle build如果要直接生成apk的話,需要自己寫腳本,類似於當年的ant,如果不寫腳本的話,建議使用android strudio的Build菜單里有make apk選項,其中有兩個,一個是生成未簽名apk,一個是生成簽名apk。生成簽名apk時需要你先做一個簽名文件,然後根據生成apk向導導入簽名文件
⑶ gradle可以編譯android源碼嗎
方法/步驟
1
(可以省略)通過cmd命令行下載gradle源碼:
git clone https://github.com/spring-guides/gs-gradle-android.git
2
下載最新的gradle安裝包,地址:
http://gradle.org/downloads
點擊下載二進制文件
3
解壓到d盤,路徑為:D:\gradle-2.4
4
打開「計算機」-「右鍵」-「屬性」-「更改設置」-「高級」-「環境變數」,
在系統變數中,點擊新建,屬性名為GRADLE_HOME,屬性值為"D:\gradle-2.4"
5
打開「計算機」-「右鍵」-「屬性」-「更改設置」-「高級」-「環境變數」,
在系統變數中,找到Path,將";D:\gradle-2.4\bin"加入到Path中
6
打開cmd命令行,執行gradle,如果出現如圖所示,則說明gradle安裝成功
7
打開cmd命令行,進入android工程目錄,找到build.gradle文件,在目錄執行執行
gradle build
既可開始使用gradle打包apk,在成功後會在同目錄生成build文件夾,
⑷ Android Studio非gradle工程編譯後的apk文件在哪
1.選中工程,右鍵:
⑸ 安卓導入一個文件後,編譯apk出現問題
在 build.gradle 中將 version 那裡改成 2.14.1
⑹ android studio怎麼編譯apk文件
Android Studio編譯出來的APK無法安裝如何解決?隨著Android8.0的發布,國內雖然沒上8.0但是7.0、7.1已經比較普遍了。Android Studio也做了不少更新。
但是有不少人發現,我更新了Android Studio,發現我的手機無法調試了?根本無法直接安裝調試,就算先生成APK,在安裝也總是說安裝失敗,或者解析包錯誤我該怎麼辦?
在這里我也不知道具體原因,反正我是遇到過幾次。有的情況,我的猜測是因為了更新了build tool不知道它加了什麼限制條件。因為在低版本沒出現問題,更新了它之後就出現了!
第一種情況:直接無法安裝,並出現:Failed to finalize session : INSTALL_FAILED_INTERNAL_ERROR
這種情況比較好解決,本身AS也有提示:關閉選項 File--> settings-> Istant Run
第二種情況:虛擬機可以安裝調試,發送到真機上無法安裝。甚至是提示安裝包解析失敗?
我經常遇到就是這個,有時候讓我們懷疑是不是在傳輸過程安裝包損壞了,還是手機出問題了。其實都不是,我還在真感覺是build tool版本導致的。
因為有一個解決方案是這樣的:
請修改 project 的biuld.gradle
classpath 'com.android.tools.build:gradle:2.3.3'
改為
classpath 'com.android.tools.build:gradle:2.2.0'以下
還有另一個解決方案:
我們平時習慣都是生成debug包進行安裝,造成這個原因就是因為他是debug包!我自己測試出來的,估摸是Android加了什麼條件,限制了debug包的安裝。生成release包就沒任何問題,親測。
第三種情況,APK在大多數設備上能運行,但是有的設備卻不能安裝?
親~請查看你配置文件中的最低支持的Android版本,你設置最低5.0安裝在4.4的機器當然不行了!
這就是目前我遇到的三種情況,如果大家還有其他情況以及其他解決方案不妨分享出來~
⑺ 如何建立與 Android studio和 gradle android 庫
註: 此應答是純 Gradle 應答、 在這中使用 IntelliJ 定期但我不知道怎麼整合是以 Android 的工作室。我知道發生了什麼事對我來說,這我如何使用 Gradle 和 Android 的信徒。
Gradle 已定義的結構 (即您可以更改底部鏈接將告訴您如何),是與 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'
}
所以現在我們有一個要生成的項目。現在我們要添加其他人。我把它們放在一個目錄中,或許稱之為指標或子項目。這是無關緊要的但你需要知道你把它放哪。要告訴 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
build.gradle
task NativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn NativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniDir new File('build/native-libs')
}
⑻ 如何創建使用 Gradle 發布簽名的 apk 文件
我設法解決它添加此代碼,以及與建立 gradle build :
android {
...
signingConfigs {
release {
storeFile file("release.keystore")
storePassword "******"
keyAlias "******"
keyPassword "******"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
這將生成簽名的發布的 apk 文件。
⑼ 怎麼查看gradle編譯apk使用的jdk版本
我不知道我是不是正確的理解了你的意思,你是說你把一個APK反編了,然後再打包成APK是么,用SDK裡面提供的打包工具,?你這個不靠譜,你反編譯過的東西是不能直接運行的,你放進Eclipse就會發現一堆錯,你把文件一個個都拷貝進Eclipse以後再把資源文件也拷貝進去,然後修改每個.java文件中的錯誤,然後修改清單文件,這就是一整套流程,一般我不這樣干,太麻煩,
⑽ android gradle打包生成兩個包,怎麼去掉debug版本
Gralde 打包參數詳解
上面說了一大堆東西,其實並不吸引人去使用gradle,如果只是構建項目的話,adt不是更合適嗎?如果,你看完以下內容還是這么覺得的話,你就沒必要折騰gradle了。。。。。。
打簽名包
看附錄 默認輸出 release apk 是沒有簽名的,那麼我們需要簽名的很簡單,只需要在android{}裡面補充加上加上即可。完整build.gradle 請點擊我的gist
build.gradle
signingConfigs {
myConfig{
storeFile file("gradle.keystore")
storePassword "gradle"
keyAlias "gradle"
keyPassword "gradle"
}
}
buildTypes{
release {
signingConfig signingConfigs.myConfig
}
}
然後,運行gradle clean gradle build ,這次在build/apk 你看到了多了一個[項目名]-release-unaligned, 從字面上面我就可以知道,這個只是沒有進行zipAlign 優化的版本而已。而[項目名]-release 就是我們簽名,並且zipAlign 的apk包了. ###打混淆包### 只需要在原來的基礎上加上,完整的proguad.gradle 代碼 build.gradle
gradle clean
gradle build
打多渠道包(Proct Flavor)
現在來解釋一下上一節的問題,apk目錄下的兩個apk 的含義
為什麼產生了兩個apk?
默認的android gralde 插件定義了兩種apk 的類型debug, release,這兩種類型的詳細對比看附錄。
這個是android gralde 插件 buildTypes{} 方法產生的,默認配置好了兩個默認模板,當然你也可以修改,前面我們就是在修改默認的release 的配置,讓輸出release類型的的apk,具有簽名和混淆。
對於多渠道包,android 插件提供了一個名為Proct Flavor{} 的配置,用於進行多渠道打包。
例如,我的android應用有海外版,和國內版本,而且這兩個版本的包名是不一樣的!!(我就舉兩個市場的例子安裝這個思路,你要打包100個不同的市場只是幾行代碼的事情。)。
你只需要在android{} 補充上
build.gradle
proctFlavors {
playstore {
packageName='com.youxiachai.androidgradle.playstore'
}
hiapk {
packageName='com.youxiachai.androidgradle.amazonappstore'
}
}
僅此而已?然後gradle clean,gradle build,在build/apk 下面你會看到一堆的包,命名格式[項目名]-[渠道名]-release
Proct Flavor{} 不只是能改包名那麼簡單,還能夠對編譯的源碼目錄進行切換。
什麼意思? 不知道各位有沒有用過友盟做用戶統計,如果,你用的是分發渠道分析,你需要修改AndroidManifest.xml 添加上
如果,你很多渠道,,然後你就會很痛苦,現在用gradle 就非常舒服,你只需要在android.sourceSets指定我們的渠道名就行,android gradle 插件,會自動打包!!!例如
build.gradle
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
hiapk {
manifest.srcFile 'hiapk/AndroidManifest.xml'
}
playstore {
manifest.srcFile 'hiapk/AndroidManifest.xml'
}
instrumentTest.setRoot('tests')
}
然後運行gradle clean,gradle build,省下的時間去喝杯咖啡,睡個覺什麼的都好。。。 ###外部依賴### android gradle 對於外部jar 包的應用支持maven/ivy 管理的包,也支持指定具體文件,前面已經在上文說過。上面演示的完整 build.gradle gist 裡面也有寫。你需要加上如下代碼即可: build.gradle