【发布时间】:2019-10-25 20:00:04
【问题描述】:
我正在使用 Open Frameworks 开发一个 Android 应用程序,这是一个支持 Android 的 C++ 框架。它的 Android 项目使用 Gradle 实验插件来允许 C++。 我已经能够得到这些来构建运行良好的 未签名 APK (使用 Android Studio 2.3.2、3.0、3.5 或 3.5.1,实验性 Gradle 插件 0.9。 3,和 Gradle 分布 3.3.0)。 但现在我需要对它们进行代码设计并包含 64 位版本,以便将它们发布到 Android 商店。
Gradle Experimental Plugin 一直要求每个版本都有一个特定的 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”时,我被“需要 Gradle 版本 4.1”阻止。
当我尝试使用旧版本的 Android Studio(版本 2.3.2 或 3.0)“生成签名 APK”时,我可以构建 32 位代码签名 APK,但我不知道如何构建 64 -bit APKs。我找到的文档似乎不适用于我从 Open Frameworks 获得的 Gradle 文件。
关于我尝试处理此问题的说明:
(据我所知,Gradle 插件版本与映射 in this table 的 Gradle 分发版本不同。)
我在任何地方找到的与 Gradle Experimental 插件 0.11.0 一起使用的 Gradle 发行版 版本的唯一来源是 this answer to a related question。我问回答者他们使用的是什么版本的 Android Studio,他们说是 3.1,但没有提到代码设计(我现在已经问过他们了)。
看起来“Android Gradle Plugin”版本总是和Android Studio版本一样,所以似乎没有办法用Android Studio 3.5.1运行Android Gradle Plugin 3.0版本,对吧?
所以基于以上,我尝试了:
Android Studio(以及 Gradle 插件版本)2.3.2 和 Experimental Gradle 0.9.3 使用 Gradle 分发版 3.3.0(代码设计 32 位 APK - 不知道如何做 64 位)
Android Studio(以及 Gradle 插件版本)3.0.0 和 Experimental Gradle 0.9.3 使用 Gradle 发行版 3.3.0(代码设计 32 位 APK - 不知道如何做 64 位)
Android Studio(以及 Gradle 插件版本)3.0.0 和 Experimental Gradle 0.11.0 使用 Gradle 发行版 4.1.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')
}
但这会导致代码设计 APK 向导中只有 32 位 Arm 和 386 ABI 选项。
谁能告诉我如何使用 Android Studio(任何版本)为实验性插件构建代码签名的 64 位 APK?
【问题讨论】:
标签: android android-studio android-gradle-plugin code-signing gradle-experimental