您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
基於android Studio手動build構建項目(gradle與gradlew的使用)
发布时间:2022-04-04 14:15:35编辑:雪饮阅读()
這裏以構建一個c++支持的安卓項目
首先我的android studio版本信息為:
Android Studio Bumblebee | 2021.1.1 Patch 2
Build #AI-211.7628.21.2111.8193401, built on February 17, 2022
Runtime version: 11.0.11+9-b60-7590822 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 12
Registry: external.system.auto.import.disabled=true
Non-Bundled Plugins: com.intellij.marketplace (211.7628.36), edu.umontreal.hatchery (0.2.1), com.thoughtworks.gauge (211.6693.111)
建立項目
file=>new=>new Project=>phone and tablet=>native c++
然後我這裏選擇的支持最小sdk是安卓9.(api28)
接下來在android studio自動build時候就一直卡在Gradle Configure projects這裏好久。
那麽連進度條都沒有,對於像我這種嚴謹的人來説,沒有給我一種安全感。
那麽我想知道他卡在這裏到底是在幹嘛?爲什麽這麽久?
gradle構建
那麽我們需要手動在命令行中進行構建才能知曉到底在做什麽,命令中顯示的信息更透明些。
在file=>project structure中的project中可以看到android gradle plugin version版本,也就是這個項目所使用的gradle plugin的版本信息。同路徑上也能看到gradle version版本信息。
比如我這裏顯示的gradle version信息就是7.2
然後在project files中我們的項目文件裏面gradle目錄裏面的wrapper的文件gradle-wrapper.properties中的distributionUrl字段可以看到所依賴的gradle對應版本的安裝包,是一個下載地址,那麽我可以用迅雷等軟件自己手動下載,比如我這裏下載后就是gradle-7.2-bin.zip。
那麽接下來我可以解壓這個gradle-7.2-bin.zip並使用解壓后的這個gradle去手動構建咱們的這個項目
C:\Users\Administrator\AndroidStudioProjects\MyApplication5>D:\gradle-7.2\bin\gradle C:\Users\Administrator\AndroidStudioProjects\MyApplication5
Welcome to Gradle 7.2!
Here are the highlights of this release:
- Toolchain support for Scala
- More cache hits when Java source files have platform-specific line endings
- More resilient remote HTTP build cache behavior
For more details see https://docs.gradle.org/7.2/release-notes.html
Starting a Gradle Daemon, 2 busy and 1 stopped Daemons could not be reused, use --status for details
> Configure project :app
[CXX1101] NDK at D:\AndroidSdk\ndk\21.4.7075529 did not have a source.properties file
Checking the license for package NDK (Side by side) 21.4.7075529 in D:\AndroidSdk\licenses
License for package NDK (Side by side) 21.4.7075529 accepted.
Preparing "Install NDK (Side by side) 21.4.7075529 (revision: 21.4.7075529)".
<======-------> 50% CONFIGURING [16m 55s]
> :app
然後這裏會發現正在獲取一個ndk的軟件包,然後也卡這裏了好久。
基於gradlew與ndk進行手動構建項目
基於gradle構建時候可以看到由於咱們這個項目是c++項目,則ndk是需要的。
所以,這裏有下載一個指定的ndk就一直卡在這裏,ndk包是很大的,基本在1G左右。
那麽ndk是否可以自己手動下載,然後構建時候使用本地的呢?當然也是可以的。
這裏引入一個gradlew的東西,gradlew就是gradle+wrapper。
gradlew:
gradlew就是对gradle的包装和配置,gradlew是gradle Wrapper,Wrapper的意思就是包装。
因为不是每个人的电脑中都安装了gradle,也不一定安装的版本是要编译项目需要的版本,那么gradlew里面就配置要需要的gradle版本。
然后用户只需要运行gradlew就可以按照配置下载对应的gradle到项目的目录中,仅仅给项目本身用,然后就是clean、build等操作。
但是如果执行gradle clean 这样的命令的话,系统使用的是电脑环境变量中配置的gradle,或者是找不到命令。
此时我们就用gradlew clean这个命令,其实内部调用的是本项目中的gradle来执行的,所以就相当于进行了一次包装。
那麽看來官方是更建議使用gradlew,而且感覺gradlew更方便,那麽這裏我們可以首先向上面離綫使用gradle指定版本一樣,這裏gradlew也可以離綫使用gradle指定版本,我們只需要在project files中的gradle/wrapper/gradle-wrapper.properties中配置distributionUrl字段值為一個我們本地解壓指定gradle安裝包后的一個file協議的路徑,如我這裏配置為:
distributionUrl=file\:/D:/gradle/gradle-7.2-bin.zip
這樣便完成了離綫使用gradle7.2了,那麽接下來我們還需要配置ndk,ndk離綫使用對於以前是在project files中的local.properties中配置的。
那麽現在官方推薦配置在project files/app/build.gradle中。
那麽首先我們剛才使用gradle進行構建時候可以知道命令行中發現到使用的ndk版本是
21.4.7075529。
於是我們到安卓官方網站ndk下載的地方可以找到對應該版本的ndk包,那麽我這裏是windows10系統,我找到對應我的ndk包是的下載地址:https://dl.google.com/android/repository/android-ndk-r21e-windows-x86_64.zip
那麽同樣的也是下載后解壓后得到一個本地的路徑,然後在project files/app/build.gradle中配置如:
plugins {
id 'com.android.application'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.myapplication"
minSdk 28
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ''
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ndkPath "D:\\ndk\\android-ndk-r21e-windows-x86_64\\android-ndk-r21e"
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
id 'com.android.application'
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.myapplication"
minSdk 28
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ''
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ndkPath "D:\\ndk\\android-ndk-r21e-windows-x86_64\\android-ndk-r21e"
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
那麽接下來我們就可以離綫使用gradle和這個ndk包了,命令和上面gradle是類同的。

C:\Users\Administrator\AndroidStudioProjects\MyApplication5>gradlew build
Downloading file:/D:/gradle/gradle-7.2-bin.zip
..........10%...........20%...........30%...........40%...........50%...........60%...........70%...........80%...........90%...........100%
> Configure project :app
Checking the license for package CMake 3.18.1 in D:\AndroidSdk\licenses
License for package CMake 3.18.1 accepted.
Preparing "Install CMake 3.18.1 (revision: 3.18.1)".
"Install CMake 3.18.1 (revision: 3.18.1)" ready.
Installing CMake 3.18.1 in D:\AndroidSdk\cmake\3.18.1
"Install CMake 3.18.1 (revision: 3.18.1)" complete.
"Install CMake 3.18.1 (revision: 3.18.1)" finished.
> Task :app:lintReportDebug
Wrote HTML report to file:///C:/Users/Administrator/AndroidStudioProjects/MyApplication5/app/build/reports/lint-results-debug.html
BUILD SUCCESSFUL in 3m 29s
111 actionable tasks: 111 executed。
最後可以通過android studio運行到手機,或者通過路徑如C:\Users\Administrator\AndroidStudioProjects\MyApplication5\app\build\outputs\apk\debug\app-debug.apk將該apk用adb命令安裝到手機進行驗證。
當然這裏我選擇了使用android studio安裝到手機的,雖然android studio剛才一直卡在那個Gradle Configure projects地方,當時我取消了,現在重新try again會發現很快就又好了,這裏猜測它使用的是我們剛才手動構建的緩存,所以才會這麽快,當然我們手動也已經解決了gradle的離綫以及ndk的離綫,所以就算它不用緩存,也是比之前快的。
參考文檔:基於命令行構建項目
https://developer.android.com/studio/build/building-cmdline#bundle_build_gradle
关键字词:android,Studio,手動,build,gradle,gradlew
相关文章
- android camera2 API初探打開攝像頭(自拍那個攝像頭)
- android studio關於gradle的版本更換及distributionUr
- 惊艳的android12 内置的无线调试
- pixel4a第二次破解獲取root權限基於安卓12 android 12
- s5代理socket5代理安卓端如何連接(proxy droid的使用)
- androidStudio(Android Studio Arctic Fox 2020.3.1)
- 利用androidStudio快速实现安卓view的透明
- androidStudio4.1.2小技巧 快速为你的view选择背景颜
- androidStudio4.1.2為c盤減負(優化c盤占用)sdk目錄遷移,
- androidStudio4.1.2關於ndk配置自定義目錄的變遷