问题标签 [android-instant-run]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
42 浏览

android - 为什么冷插拔受 API 级别影响,而热插拔不在 Android Instant Run 中?

最近我读到一篇关于 Android Studio 中的 Instant Run 是如何工作的文章。 https://medium.com/google-developers/instant-run-how-does-it-work-294a1633367f

我想我得到了这篇文章的大部分内容,但我不明白为什么只有冷交换受 API 级别影响,而热交换不受。(反之亦然)我很好奇热插拔和冷插拔在替换dex文件的方式上有什么区别,因为我认为热插拔也需要替换多个dex的能力。

0 投票
3 回答
2565 浏览

android - Android 图像在发布构建后不显示,或者如果我即时运行关闭

我在运行时使用getIdentifier方法使用以下代码从 drawable-hdpi 获取图像 id

我也尝试了以下方法

并使用以下代码设置图像资源

当我从 android studio 打开即时运行时,它们都可以工作,但不幸的是,当我从 android studio 关闭即时运行功能时,它们都不起作用。我在调试和发布时使用 Proguard 使用以下代码

观察到的场景 图像未显示。即时运行时,代码运行完美并显示图像。我进行发布构建然后反编译它,我观察到图像(.png 扩展名)在 res/drawable-hdpi 文件夹中,但大小被转换为 1*1 尺寸(67 字节),当我试图打开一个点时可见当我尝试打开 jpg(转换为 0 字节大小)文件时,它们没有打开。

预期场景 图像必须可见 解决措施 使图像尺寸变小 将图像从 .png 转换为 jpg 我坚持这个问题,所以请帮助我。感谢,如果有人可以帮助解决问题。

0 投票
1 回答
1354 浏览

javascript - WebView JavaScript 接口似乎只能通过 Android Studio 的 Instant-Run 工作,但不能通过常规 gradle 编译

设置

我有一个托管 WebView 组件的简单片段。在这个片段的初始化过程中,我向我的应用程序注册了一些 JavaScript 接口方法:

我的 JavaScript 钩子并没有什么特别之处,所有这些钩子都以下列方式声明:

为了确保这些方法不会被混淆或优化而被遗忘,我在我的ProGuard 配置中添加了以下内容:

问题

一切都按预期工作。网页通过提供的“Android”对象成功调用方法,方法被调用并执行相应的任务。但是,它仅在我使用通过 Android Studio 的Instant-Run功能生成的 APK 运行应用程序时才有效。

APK是通过Android Studio安装还是通过命令行安装都没有关系adb install

如果我通过常规 gradle 编译我的 APK(或者如果我禁用 Instant-Run),那么 JavaScript 界面将停止工作。

调试

首先,我确保ProGuard禁用。即使 ProGuard 以某种方式 ✨ 神奇地 ✨ 启用,我的 ProGuard 配置应该确保我的 JS 方法不受影响。

我还对 APK 进行了反汇编,以确保通过 JS 接口公开的方法不会以某种方式被破坏(或删除)。他们不是。正如声明的那样,它们似乎存在于 DEX 文件中。

当我运行启用 Instant-Run 生成的 APK 时,我可以(通过 Chrome)检查 WebView 中加载的页面,并查看我的“Android”对象是否可用以及我公开的所有方法都在那里(并且可调用):

但是,当我在禁用 Instant-Run(即 vanilla gradle)的情况下运行 APK 时,“Android”对象可用,但我的方法都不存在。它只是一个空对象。

我在 WebView 中加载的页面位于我控制的公开可见的服务器上。在两个 APK 构建中加载相同的页面,并且以相同的方式调用方法。只有使用 Instant-Run 功能构建的 APK 似乎可以工作。

我整天都在挖掘,但我找不到任何真正有用的东西。大多数建议都指向 ProGuard 配置问题或 WebView 中的旧错误(即 Gingerbread 时代)。

0 投票
2 回答
1227 浏览

android - Android Studio 2.2.3 Instant Run 不是一个选项

我有一个新安装的 Android Studio,我正在开始我的第一个项目。当我读到我已经应该启用即时运行功能时,我正在寻找加快部署/测试开发周期的方法。

我仔细检查了一些设置:

  • Tools->Android->Enable ADB Integration被检查

  • File->Settings->Build, Execution, Deployment->Instant Run Enable Instant Run...已选中,同时在代码更改上重新启动活动在正在运行的应用程序中显示 Toast...

  • 我的模拟器是 Nexus 5,API 24

  • Android gradle 插件定义为:classpath 'com.android.tools.build:gradle:2.2.3'
  • 项目minSdkVersion为 16,targetSdkVersion为 25

然而,即时运行图标不会出现在我的运行配置中,重新部署涉及重新启动整个应用程序,大约需要一分钟。错误的一些可能性:

  • 我读到必须禁用 DDMS,Instant Run 才能解决另一个问题。我不知道这是否属实,因为我没有在官方文档中看到它,但是如果我转到Android Device Monitor,我会看到一个无法取消选中的 DDMS 按钮。

  • 预见到未来的集成,我启用了这个项目以允许集成 C++ 代码。我不确定这是否起作用。

0 投票
1 回答
126 浏览

android - 更新 applicationId 时即时运行的问题

我通过添加 .fb 更新了我的 applicationId

它不是必需的,所以我去掉applicationIdSuffix ".fb"了味道。由于此更新我无法使用即时运行,因此在尝试启动我的应用程序时出现异常:

它仍在尝试使用旧的 aplicationId 安装并抛出此异常:

即使在使缓存无效并重新启动,计算机重新启动后,问题仍然存在。如果我禁用即时运行,我将毫无问题地运行我的应用程序。

即时运行是否在我可以清理的地方有缓存?还是我需要做一些事情才能再次使用即时运行?

0 投票
4 回答
8913 浏览

android - 如何在 Android 内部共享使用即时运行创建的拆分 APK?

背景

我有一个应用程序(此处),除其他功能外,它还允许共享 APK 文件。

为此,它通过访问 packageInfo.applicationInfo.sourceDir 的路径(此处的文档链接)来访问文件,并仅共享文件(在需要时使用 ContentProvider,正如我在此处使用的那样)。

问题

这在大多数情况下都可以正常工作,尤其是从 Play 商店或独立 APK 文件安装 APK 文件时,但是当我使用 Android-Studio 本身安装应用程序时,我在此路径上看到多个 APK 文件,但没有一个是可以安装和运行没有任何问题的有效的。

这是此文件夹内容的屏幕截图,在尝试了来自“Alerter”github repo的示例后 :

在此处输入图像描述

我不确定这个问题是什么时候开始的,但至少在我的 Nexus 5x 和 Android 7.1.2 上确实发生了。甚至可能更早。

我发现了什么

这似乎只是因为在 IDE 上启用了即时运行,因此它可以帮助更新应用程序而无需重新构建它:

在此处输入图像描述

禁用后,我可以看到只有一个 APK,就像过去一样:

在此处输入图像描述

您可以看到正确的 APK 和拆分的 APK 之间的文件大小差异。

此外,似乎有一个 API 可以获取所有拆分 APK 的路径:

https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#splitPublicSourceDirs

问题

共享必须拆分为多个 APK 的最简单方法应该是什么?

真的需要以某种方式合并它们吗?

根据文档似乎有可能:

零个或多个拆分 APK 的完整路径,当与 sourceDir 中定义的基本 APK 组合时,形成一个完整的应用程序。

但是正确的方法是什么,有没有一种快速有效的方法呢?也许没有真正创建文件?

是否有一个 API 可以从所有拆分的 APK 中获取合并的 APK?或者也许这样的APK已经存在于其他路径中,并且不需要合并?

编辑:刚刚注意到我尝试过的所有第三方应用程序都应该共享已安装应用程序的 APK 在这种情况下无法这样做。

0 投票
3 回答
15160 浏览

ios - Xcode 的即时运行或热重载

我是一名 Android 开发人员,最近开始学习 Swift。Android Studio 中有一个很酷的功能,称为Instant Run,它可以显着减少编码期间增量代码更改的构建和部署时间。

在 Android Studio 2.0 中引入的Instant Run 是 Run 和 Debug 命令的一种行为,可显着缩短应用更新之间的时间。尽管您的第一次构建可能需要更长的时间才能完成,但 Instant Run 会在不构建新 APK 的情况下将后续更新推送到您的应用程序,因此更改可见性要快得多。

如果您在 Android Studio 上启用 Instant Run,则无需从头开始构建和运行应用程序,特别是当您在应用程序中间处理一些细节视图控制器时(故事板)。

我很想知道 XCode 中是否提供此功能或类似功能,或者每次我想测试应用程序时我都必须从头开始运行应用程序?

0 投票
2 回答
8404 浏览

android - Android Studio 2.3 更新未打开应用 [Instant Run Service]

我最近将 Android Studio 更新到 2.3。当我点击即时运行按钮时,它会编译应用程序,但不会在 Android 设备上打开应用程序。之后甚至没有启用“热插拔”,它显示“没有活动的“应用程序”启动”。知道我可能做错了什么。我尝试创建一个新项目,但也存在此错误。

我收到以下错误:

0 投票
4 回答
31101 浏览

android - Instant Run 执行了完整的构建和安装,因为设备上的安装与磁盘上的本地构建不匹配

在启用即时运行的情况下运行应用程序时,Android Studio 会出错。我今天已将我的 android studio 更新到 2.3,从那时起它向我展示了上述信息。

0 投票
2 回答
6607 浏览

android-studio - Android Studio Instant Run 总是重启应用程序

在 Android Studio 中,“即时运行”功能“应用更改”在此处输入图像描述总是重启应用程序,即使代码没有变化(Android Studio 2.3.0 - MacOS 10.12.3)。当应用程序处于调试状态并在断点处暂停时会发生这种情况,如果那时我尝试应用更改应用程序重新启动在此处输入图像描述

这是我的 build.gradle: