【问题标题】:Android App installs with API 24, but will not for API 19 (Jack toolchain issue?)Android App 使用 API 24 安装,但不适用于 API 19(Jack 工具链问题?)
【发布时间】:2017-04-26 01:46:25
【问题描述】:

我对 android dev 有点陌生,所以我在为多个 API 开发时遇到了一些问题。当我创建我的项目时,我将最低 API 级别设置为 18,这甚至不再受支持(根据 wiki:https://en.wikipedia.org/wiki/Android_version_history)

我在两部不同的手机上测试了 APK 的安装,都是 API 24,没有任何问题。但是,我与 API 19 的同事无法安装该应用程序。显然它给了他“未安装应用程序”的信息错误。

出于测试目的,我创建了一个新项目,并且没有添加任何代码(仅留下 Android Studio 生成的“Hello World”标签),生成了一个签名的 APK,然后将其发送给我的同事。他也没有安装它。

唯一需要注意的一点是,我玩弄了启用“jack”。我正在测试一些需要它的随机源代码。我想知道这会不会引起问题?这对于一个空项目来说是难以置信的。

更具体地说,我在测试上面提到的源代码时遇到了这个错误“错误:需要 Jack 才能支持 java 8 语言功能。启用 Jack 或删除 sourceCompatibility JavaVersion.VERSION_1_8。”所以,我当然启用了 Jack。

这是 build.gradle(如果有帮助?)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.random.name"
        minSdkVersion 18
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

任何想法都非常感谢!

【问题讨论】:

  • 出于好奇,您的同事是否尝试过在 AndroidStudio 中运行该应用程序?如果同样失败,您可能会收到更详细的错误消息。
  • @drawinfinity 简而言之 - 不。他最近卸载了Android Studio,但我已经敦促他重新安装。就像你说的,生成的错误码会有很大帮助!
  • 警告,jack 已被 google 正式弃用:tools.android.com/tech-docs/jackandjill
  • 我试图禁用 Jack,因为后来发现了这一点。不过谢谢!

标签: android android-studio apk android-install-apk


【解决方案1】:

看起来您正在尝试在您的项目中使用 java 8,java 8 在 API 级别 18 上不起作用,您还需要为此启用 jack 工具链

来源:https://developer.android.com/guide/platform/j8-jack.html

不过,如果您想使用 java 8 功能,您可以将 retrolambda 与 gradle 一起使用 https://github.com/evant/gradle-retrolambda

现在,如果您没有使用任何 java 8 功能,那么只需将 gradle 文件中的源兼容性更改为 java 7 而不是 java 8,它应该可以正常工作。

使用这个

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}

而不是

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

它可以粘贴到您的 gradle 文件中,例如:

 android {
 ...
 defaultConfig {
 ...

 }
 compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
 }
}

【讨论】:

  • 所以,看来我的问题是我的“build.gradle”文件没有显示 compileOptions...如果有的话,我可以玩弄一下。简直太奇怪了!我最终重新安装了 Android Studio - 但我测试了添加版本 1.8 以查看它会说什么,是的 - 它要求安装 Jack。当我将其更改为 1.7 时,它什么也没说.. 也没有要求刷新 Gradle。这意味着,Android Studio 会自动让我们为 1.7 进行设置。感谢您的回复,我会接受的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多