如何使用Gradle实验插件对64位Android APK进行代码签名?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Gradle实验插件对64位Android APK进行代码签名?相关的知识,希望对你有一定的参考价值。

我正在使用开放框架(一种支持android的C ++框架)开发Android应用。它的Android项目使用Gradle实验性插件来支持C ++。 我已经能够获得这些文件来构建运行良好的APK [[未签名 APK(使用Android Studio 2.3.2、3.0、3.5或3.5.1,实验性Gradle插件0.9.3和Gradle发行版3.3 .0)。 但是现在我需要对它们进行代码签名并包括64位版本才能将它们发布到Android Store。

Gradle实验性插件始终需要为自己的每个版本使用特定的Gradle发行版。 current doc page for the plugin表示我们可以“在Android Studio 3.0或更高版本上继续使用实验性插件0.11.0”,但上述内容似乎在Android Studio 3.5和3.5.1中被我阻止了代码签名。

[当我尝试使用最新版本的Android Studio(版本3.5或3.5.1)来“生成签名的APK”时,我被“需要4.1版本版本停止。”

当我尝试使用旧版本的Android Studio(2.3.2或3.0版)来“生成签名APK”时,我可以构建32位带代码签名的APK,但是我不知道如何构建64位APKs。

我发现的文档似乎不适用于我从Open Frameworks获得的Gradle文件。关于我尝试解决此问题的注意事项:

(据我所知,Gradle插件版本与映射为in this table的Gradle发行版不同。)

我在任何地方都可以找到与Gradle实验插件0.11.0一起使用的Gradle

distribution版本的唯一来源是this answer to a related question。我问了答录者他们使用的是哪个版本的Android Studio,他们说的是3.1,但没有提及代码签名(我现在已经问过他们)。

看起来“ Android Gradle插件”版本始终与Android Studio版本相同,所以

似乎没有办法在Android Studio 3.5.1上运行Android Gradle插件3.0版本,对吗?

>因此,基于以上,我尝试了:

使用Gradle发行版3.3.0的带有实验性Gradle 0.9.3的Android Studio(因此也具有Gradle插件版本)2.3.2(共同设计32位APK-不知道如何做64位)

使用Gradle发行版3.3.0的带有实验性Gradle 0.9.3的Android Studio(因此也具有Gradle插件版本)3.0.0(共同设计32位APK-不知道如何做64位)

使用Gradle发行版4.1.0的带有实验性Gradle 0.11.0的Android Studio(以及相应的Gradle插件版本)3.0.0-我收到了Gradle错误:

*Gradle sync failed: Exception thrown while executing model rule: BaseComponentModelPlugin.Rules#createVariantData(ModelMap<AndroidBinaryInternal>, ModelMap<AndroidComponentSpec>, TaskManager) > afterEach() Consult IDE log for more details (Help | Show Log) (21s 58ms)*

[我找到了有关如何使用Gradle HERE创建64位签名APK的假定文档,但是建议用于列出ABI过滤器的格式:

ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'

导致错误,Open Frameworks的项目build.gradle试图包含所有ABI,如build.gradle底部附近的android.productFlavors部分所示,如下所示:

def ofRoot(){ return '../../../' } // Load common functions apply from: ofRoot()+"libs/openFrameworksCompiled/project/android/common-functions.gradle" buildscript { apply from: "../../../libs/openFrameworksCompiled/project/android/ndk-verify.gradle" repositories { jcenter() } dependencies { // Using the gradle-experimental version that supports c++ classpath 'com.android.tools.build:gradle-experimental:0.9.3' } } allprojects { repositories { jcenter() } } apply plugin: 'com.android.model.application' model { android { // openFrameworks currently only supports compiling against SDK 19 compileSdkVersion = 23 buildToolsVersion = "25.0.3" defaultConfig.with { minSdkVersion.apiLevel = 23 targetSdkVersion.apiLevel = 28 versionCode = 4 versionName = "0.1.1" } } android.ndk { moduleName = ofAppModuleName() toolchain = buildToolchain() stl = compilerStl() platformVersion = "21" } android.sources { main { jni { source { srcDirs= appSrcDirs(ofRoot()) includes = srcIncludes(ofRoot()) excludes = srcExcludes(ofRoot()) } // Link to openFrameworks dependencies { project ":openFrameworksProject" linkage "static" } } manifest { source { srcDirs = [ "." ] } } res { source { srcDirs = [ "res" ] } } java { source { srcDirs = [ "srcJava" ] } } aidl { source{ srcDirs = ['srcJava'] } } renderscript{ source{ srcDirs = ['srcJava'] } } jniLibs { source { srcDirs = ['libs'] } } assets { source { srcDirs = ['bin/data'] + addonData(ofRoot()) } } } } android.lintOptions { abortOnError = false } android.buildTypes { release { minifyEnabled = false } } // Setup the different types of flavors (arm / x86), // and add linker flags based on that android.productFlavors { getAbis().each { abi -> create(getFlavorName(abi)) { ndk { abiFilters.add(abi) cppFlags.addAll(coreCppFlags(abi, ofRoot())) cppFlags.addAll(addonCppFlags(abi, ofRoot())) ldLibs.addAll(coreLdLibs(abi, ofRoot())) ldLibs.addAll(addonLdLibs(abi, ofRoot())) ldFlags.addAll(coreLdFlags(abi, ofRoot())) ldFlags.addAll(addonLdFlags(abi, ofRoot())) } } } } } dependencies { addonJavaDependencies(ofRoot()).each { dep -> compile(project(path: dep[1] )) } compile project(path: ':ofAndroidLib') }

但是这在codesign APK向导中仅产生32位Arm和386 ABI选项。

任何人都可以告诉我如何使用Android Studio(任何版本)为实验性插件构建经过代码签名的64位APK吗?

我正在使用开放框架(一种支持Android的C ++框架)开发Android应用。它的Android项目使用Gradle实验性插件来支持C ++。我已经能够将它们获取到...
答案
[有一些使用命令提示符和zipalign签名APK的工具。这是文档

以上是关于如何使用Gradle实验插件对64位Android APK进行代码签名?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android Gradle 插件 0.7 配置 NDK

android gradle 插件和 gradle 的区别

如何将插件应用于gradle中的一种风格?

Android Gradle 插件组件化中的 Gradle 构建脚本实现 ② ( 组件化基本实现 | Project 相关目录 | 定义组件切换标志位 | 切换插件导入 | 切换设置应用 ID )

64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致

如何使用Android Studio开发Gradle插件