file-type

通过BundleTool命令行从.aab文件生成APK的方法

下载需积分: 5 | 26.09MB | 更新于2024-11-15 | 132 浏览量 | 5 评论 | 1 下载量 举报 收藏
download 立即下载
Android App Bundle 是一种新的Android应用分发格式,由Google在2018年推出,旨在替代传统的APK格式。aab文件包含了应用的所有本地代码和资源,但与传统APK不同的是,它可以针对不同的设备配置生成优化后的APK,以提供更加高效的分发和更新机制。不过,由于.aab文件本身不能直接被用户安装,因此开发者需要通过特定的工具将.aab文件转换为可以安装的APK文件。 在命令行中,这一转换过程可以借助BundleTool这个命令行工具完成。BundleTool是一个开源工具,由Google提供,用于从.aab文件生成APK、Android App Bundle的各种分发包,或者模拟不同设备的APK。 以下是使用BundleTool将.aab文件转换为APK的基本命令行格式: ``` java -jar C:\Users\qwe\Desktop\bundletool\bundletool-all-1.14.0.jar build-apks --bundle=.aab路径 --output=输出.apks路径 --ks=app签名路径.jks --ks-pass=pass:签名密码 --ks-key-alias=签名别名 --key-pass=pass:签名密码 --device-spec=C:\Users\qwe\Desktop\bundletool\config.json ``` 解释上述命令行中各参数的含义: - `java -jar`:调用Java运行环境来执行jar文件,这里是指定的bundletool-all-1.14.0.jar。 - `C:\Users\qwe\Desktop\bundletool\bundletool-all-1.14.0.jar`:指定BundleTool的jar包所在路径。 - `build-apks`:这是BundleTool的命令之一,用于生成APKS文件,它包含了多个针对不同设备配置的APK。 - `--bundle`:指定.aab文件的路径。 - `--output`:指定生成的APKS文件存放的路径。在指定的输出路径中会生成一个以.apks为后缀名的文件。 - `--ks`:指定签名证书(.jks)文件的路径。 - `--ks-pass`:提供签名证书的密码。 - `--ks-key-alias`:提供签名证书中的密钥别名。 - `--key-pass`:提供密钥的密码。 - `--device-spec`:指定一个JSON文件的路径,这个文件定义了需要生成APK的设备配置。 生成APKS文件后,这个文件本质上是一个ZIP格式的压缩包,里面包含为不同设备配置生成的APK文件。通常情况下,为了简化操作,BundleTool还提供了将APKS文件转换为可分发的ZIP格式的功能。如果直接得到APKS文件,可以按照以下步骤操作: 1. 在指定的输出路径下找到生成的.apks文件。 2. 将此文件的后缀名从.apks更改为.zip。 3. 使用任何标准的ZIP解压缩工具(如WinRAR、7-Zip等)打开这个ZIP文件。 4. 在ZIP文件内部,通常会找到一个名为"apks"的文件夹,里面有针对不同设备生成的APK文件。 5. 根据需要选择合适的APK文件进行安装。 需要注意的是,生成APK并进行签名是应用发布的最后一步,确保在整个过程中保护好签名密钥是非常重要的,丢失或泄露签名密钥可能会导致应用安全问题。此外,APK的生成和签名过程可能会受到Android平台版本、设备配置等多种因素的影响,开发者需要仔细阅读官方文档,确保遵循最新的最佳实践。

相关推荐

filetype

会是因为Firebase那些依赖问题嘛,下面是我的launcherTemplate.gradle配置: apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' buildscript { // repositories { // google() // mavenCentral() // } repositories { google() mavenCentral() } dependencies { // Must be Android Gradle Plugin 3.6.0 or later. For a list of // compatible Gradle versions refer to: // https://developer.android.com/studio/releases/gradle-plugin // classpath 'com.android.tools.build:gradle:3.6.0' // For Unity2019.4.9, version of gradle:5.1.1, we use:3.4.3 // see https://android-developers.googleblog.com/2020/07/preparing-your-build-for-package-visibility-in-android-11.html // see https://developers.google.com/ar/develop/unity/android-11-build //classpath 'com.android.tools.build:gradle:7.4.2' classpath 'com.google.gms:google-services:4.4.3' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' //classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1' } } dependencies { implementation project(':unityLibrary') // api 'com.alibaba:fastjson:1.2.73' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.appcompat:appcompat:1.3.0-alpha02' implementation 'com.google.android.material:material:1.3.0' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.android.billingclient:billing:7.0.0' } android { namespace "**NAMESPACE**" ndkPath "**NDKPATH**" compileSdkVersion **APIVERSION** buildToolsVersion '**BUILDTOOLS**' compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } defaultConfig { minSdkVersion **MINSDKVERSION** targetSdkVersion **TARGETSDKVERSION** applicationId '**APPLICATIONID**' ndk { abiFilters **ABIFILTERS** // abiFilters "armeabi-v7a" , "arm64-v8a", "x86" } versionCode **VERSIONCODE** versionName '**VERSIONNAME**' } aaptOptions { noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.bundle', '.unityexp'] + unityStreamingAssets.tokenize(', ') ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~" } signingConfigs { release { storeFile file('E:/Jenkins/workspace/girls/samsung/client/girlsumm.keystore') storePassword 'yinhe2077' keyAlias 'yinhe' keyPassword 'yinhe2077' } } lintOptions { abortOnError false } buildTypes { debug { minifyEnabled **MINIFY_DEBUG** // proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG** jniDebuggable true } release { minifyEnabled **MINIFY_RELEASE** // proguardFiles getDefaultProguardFile('proguard-android.txt')**SIGNCONFIG** } }**PACKAGING_OPTIONS****SPLITS** **BUILT_APK_LOCATION** bundle { language { enableSplit = false } density { enableSplit = false } abi { enableSplit = true } } }**SPLITS_VERSION_CODE****LAUNCHER_SOURCE_BUILD_SETUP** task copyStringXML(type: Copy) { from("${project.rootDir}/unityLibrary/unity-android-resources/res/values") { include "**" } into "${project.projectDir}/src/main/res/values" include("${project.projectDir}/src/main/res/values/strings.xml") } preBuild.dependsOn(copyStringXML) task copyGoogleJson { copy { from "${project.rootDir}/../../Assets/Plugins/Android/google-services.json" into "${project.projectDir}/src/main" include("google-services.json") } } preBuild.dependsOn(copyGoogleJson) tasks.whenTaskAdded { task -> if (task.name.startsWith("bundle")) { def renameTaskName = "rename${task.name.capitalize()}Aab" def flavor = task.name.substring("bundle".length()).uncapitalize() tasks.create(renameTaskName, Copy) { def path = "${buildDir}/outputs/bundle/${flavor}/" from(path) include "launcher-release.aab" destinationDir file("${buildDir}/outputs/bundle/${flavor}/") rename "launcher-release.aab", "launcher.aab" } task.finalizedBy(renameTaskName) } } 以下是mainTemplate.gradle: // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN // plugins { // id 'com.android.library' // //id 'com.google.gms.google-services' // 启用 Firebase // //id 'com.google.firebase.crashlytics' // 启用 Crashlytics // } configurations { compileClasspath } apply plugin: 'com.android.library' //**APPLY_PLUGINS** dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation(platform("com.google.firebase:firebase-bom:33.4.0")) implementation "com.google.firebase:firebase-auth" implementation "com.google.firebase:firebase-firestore" // implementation 'com.google.android.gms:play-services-ads:23.3.0' // Android Resolver Dependencies Start implementation 'androidx.appcompat:appcompat:1.3.0-alpha02' // Assets/TradplusSDK/Networks/Android/n40/Editor/Dependencies.xml:8 implementation 'androidx.legacy:legacy-support-v4:1.0.0' // Assets/TradplusSDK/Networks/Android/n40/Editor/Dependencies.xml:6 implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency implementation 'com.android.support:cardview-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency implementation 'com.applovin:applovin-sdk:13.0.0' // Assets/TradplusSDK/Networks/Android/n9/Editor/Dependencies.xml:10 implementation 'com.facebook.android:facebook-applinks:[17.0.0,18)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:6 implementation 'com.facebook.android:facebook-core:[17.0.0,18)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:5 implementation 'com.facebook.android:facebook-gamingservices:[17.0.0,18)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:9 implementation 'com.facebook.android:facebook-login:[17.0.0,18)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7 implementation 'com.facebook.android:facebook-share:[17.0.0,18)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:8 implementation 'com.google.android.gms:play-services-ads:23.4.0' // Assets/TradplusSDK/Networks/Android/n2/Editor/Dependencies.xml:10 implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' // Assets/TradplusSDK/Networks/Android/n19/Editor/Dependencies.xml:12 implementation 'com.google.android.gms:play-services-base:18.7.2' // Assets/Firebase/Editor/AppDependencies.xml:17 implementation 'com.google.code.gson:gson:2.8.6' // Assets/TradplusSDK/Networks/Android/n40/Editor/Dependencies.xml:10 implementation 'com.google.firebase:firebase-analytics:23.0.0' // Assets/Firebase/Editor/CrashlyticsDependencies.xml:15 implementation 'com.google.firebase:firebase-app-unity:13.0.0' // Assets/Firebase/Editor/AppDependencies.xml:22 implementation 'com.google.firebase:firebase-common:22.0.0' // Assets/Firebase/Editor/AppDependencies.xml:13 implementation 'com.google.firebase:firebase-crashlytics-ndk:20.0.0' // Assets/Firebase/Editor/CrashlyticsDependencies.xml:13 implementation 'com.google.firebase:firebase-crashlytics-unity:13.0.0' // Assets/Firebase/Editor/CrashlyticsDependencies.xml:20 implementation 'com.pangle.global:ads-sdk:6.2.0.7' // Assets/TradplusSDK/Networks/Android/n19/Editor/Dependencies.xml:14 implementation 'com.parse.bolts:bolts-android:1.4.0' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:4 implementation 'com.tradplusad:tp_exchange:40.12.1.10.1' // Assets/TradplusSDK/Networks/Android/n40/Editor/Dependencies.xml:12 implementation 'com.tradplusad:tradplus:12.7.10.1' // Assets/TradplusSDK/TradplusManager/Editor/TPEditorGradleDependencies.xml:3 implementation 'com.tradplusad:tradplus-applovin:9.12.7.10.1' // Assets/TradplusSDK/Networks/Android/n9/Editor/Dependencies.xml:12 implementation 'com.tradplusad:tradplus-googlex:2.12.7.10.1' // Assets/TradplusSDK/Networks/Android/n2/Editor/Dependencies.xml:12 implementation 'com.tradplusad:tradplus-pangle:19.12.7.10.1' // Assets/TradplusSDK/Networks/Android/n19/Editor/Dependencies.xml:10 implementation 'com.tradplusad:tradplus-unity:5.12.7.10.1' // Assets/TradplusSDK/Networks/Android/n5/Editor/Dependencies.xml:10 implementation 'com.unity3d.ads:unity-ads:4.12.3' // Assets/TradplusSDK/Networks/Android/n5/Editor/Dependencies.xml:12 implementation 'com.unity3d.mediation:mediation-sdk:[1.0,2.0[' // Assets/Editor/MediationAdapterDependencies.xml:8 implementation 'com.unity3d.mediation:unityads-adapter:[1.0,2.0[' // Assets/Editor/MediationAdapterDependencies.xml:10 // Android Resolver Dependencies End **DEPS**} // Android Resolver Exclusions Start android { ndkPath "**NDKPATH**" packagingOptions { exclude ('/lib/armeabi/*' + '*') exclude ('/lib/mips/*' + '*') exclude ('/lib/mips64/*' + '*') exclude ('/lib/x86/*' + '*') exclude ('/lib/x86_64/*' + '*') } } // Android Resolver Exclusions End android { namespace "**NAMESPACE**" compileSdkVersion **APIVERSION** buildToolsVersion '**BUILDTOOLS**' compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } defaultConfig { minSdkVersion **MINSDKVERSION** targetSdkVersion **TARGETSDKVERSION** ndk { abiFilters **ABIFILTERS** } versionCode **VERSIONCODE** versionName '**VERSIONNAME**' consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD** } lintOptions { abortOnError false } aaptOptions { noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.bundle', '.unityexp'] + unityStreamingAssets.tokenize(', ') ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~" }**PACKAGING_OPTIONS** }**REPOSITORIES****SOURCE_BUILD_SETUP** **EXTERNAL_SOURCES**

资源评论
用户头像
洪蛋蛋
2025.06.02
文档详细说明了转换过程,但需要具备一定的技术背景来理解和执行。
用户头像
有只风车子
2025.05.21
对于初学者可能稍显复杂,但对于熟悉命令行操作的开发者则是极好的资源。
用户头像
FloritaScarlett
2025.05.20
按照步骤操作,即便是复杂的构建过程也能变得简单明了。
用户头像
RandyRhoads
2025.03.30
通过BundleTool命令行工具,可以快速地从.aab分发格式生成.apk文件。
用户头像
陈熙昊
2025.01.10
这个教程对于需要从.aab格式转换到.apk的Android开发者来说非常有用。
@半夏微凉科技
  • 粉丝: 1944
上传资源 快速赚钱