在运行 Android 12 的模拟器上测试 Flutter 应用程序时,我会定期(大约每秒)在日志中看到类似这样的行:
D/EGL_emulation(32175): app_time_stats: avg=312.93ms min=133.69ms max=608.57ms count=4
Run Code Online (Sandbox Code Playgroud)
它们是什么意思,我该如何关闭它们?我从未在 Android 11 模拟器上见过它们,所以我猜测它与 Android 12 有关?
令人难以置信的是,在谷歌搜索这个非常基本的问题时,我找不到答案!
我注意到,自从Eclipse Helios升级到Eclipse Juno并更新Android SDK后,每当我创建一个新的Android项目时,Eclipse都会在项目根目录中放置一个名为ic_launcher-web.png的文件.该文件与项目创建对话框中选择的应用程序图标相同,但它的作用是什么?如上所述,它位于项目根目录中,而不是任何/ res /文件夹中.它是否包含在完成的.apk文件中,它的目的是什么?
我需要一种方法来检测EditText是否已被用户输入内容更改或由应用程序以编程方式更改文本.这样做的任何标准方式?我想我总是可以做一些像以前那样取消TextWatcher setText()
并且之后又重新设置它的东西,但是必须有更好的方法来做到这一点......对吗?
我试着检查EditText是否在TextWatcher中聚焦,但是由于EditTexts在滚动时无论如何都"半随机"聚焦,因此没什么帮助...
背景
我在每个listitem都有一个带有EditTexts的ListView.我已经整理出了存储EditTexts值的基本问题,以便在用户滚动时重用.
我还有一个TextWatcher,它汇总了所有EditTexts中的值,并在用户编辑任何EditTexts的内容时显示总和.
问题是,当我滚动列表并且我的自定义适配器重新输入EditTexts中的存储值时bindView()
,这也会触发TextWatchers afterTextChanged()
方法,导致滚动滞后,因为触发了求和功能.
我does not require android.permission.BIND_JOB_SERVICE permission
在调度时遇到错误JobService
,我已经拥有绑定权限.以下是我的代码.
JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
ComponentName componentName = new ComponentName(MainActivity.this,MyJobService.class);
JobInfo.Builder jobInfo = new JobInfo.Builder(101, componentName).setPeriodic(2000);
jobScheduler.schedule(jobInfo.build())
<service
android:name=".MyJobService"
android:permission="android:permission.BIND_JOB_SERVICE"
android:exported="true"/>
Run Code Online (Sandbox Code Playgroud)
错误:
java.lang.IllegalArgumentException:计划服务ComponentInfo {services.acadglid.com.acadgildservices/services.com.es.MyJobService}不需要android.permission.BIND_JOB_SERVICE权限
大约两年前,我使用Google Play开发者控制台中的“测试版”,为有限的用户发布了其中一个应用程序的版本作为Beta测试版本。我没有将该版本推广到生产环境,而是在生产轨道上发布了另一个版本。
那个旧的Beta还在徘徊,我找不到摆脱它的方法。我什至今天收到Google的电子邮件说
您好Google Play开发人员,
提醒您,从2018年11月1日开始,需要针对Android Oreo(API级别26)或更高版本对Google Play上的应用和游戏进行更新。在此日期之后,Play控制台将阻止您提交targetSdkVersion小于26的新APK。
将您的应用配置为针对最近的API级别可确保用户受益于显着的安全性和性能改进,同时仍允许您的应用在较旧的Android版本(最低为minSdkVersion)上运行。
需要采取的行动
请确保在2018年11月1日之前将您的应用配置为至少以Android 8.0(API级别26)为目标。有关如何更改应用的目标API级别以满足这些要求的技术建议,请参阅迁移指南。
受影响的应用
下面包含的应用在生产或测试轨道上具有一个或多个APK,这些APK当前未针对API级别26或更高级别。列出了应用程序的最高版本代码和相应的targetSdkVersion。如果您的帐户中可能有超过20个应用会受到影响,请查看Play控制台以获取完整列表。
com.mypackage.myapp 73 23
最底部的应用程序是使用了两年的Beta版本,版本号为73,并以API 23为目标。生产中的一个应用程序在几天前进行了更新,并以API 28为目标。
有什么办法可以从Google Play开发者控制台中删除旧的Beta版本?
有没有办法让Android模拟器运行除vanilla Android以外的系统映像?我正在开发一个在模拟器、华为物理设备和摩托罗拉物理设备上运行良好的应用程序,但在三星 Galaxy S7 上遇到了一些奇怪的问题。
由于我无法物理访问 Galaxy S7,有没有办法运行实际运行三星官方 ROM 的模拟器?请注意,我不是在谈论模拟器皮肤,而是在谈论实际的系统映像。
android android-emulator samsung-mobile samsung-galaxy android-rom
在构建 Flutter 应用程序时,ALT + Enter
键盘快捷键非常方便,不仅可以调出快速修复,还可以调出弹出菜单来包装/删除小部件。在我运行flutter upgrade
并更新 IntelliJ(版本2018.3.5
)中的 Dart 和 Flutter 插件之前,它运行良好。
我尝试了一个小时的键盘快捷键,禁用和重新启用 Dart/Flutter 插件,重新启动和使 IntelliJ 中的缓存无效,关闭所有其他应用程序并多次重新启动 Windows 10。什么都行不通。我不能Alt+Enter
再做任何事情了。在我更新插件和 Flutter SDK 之前它运行良好,所以这些更新中的某些东西似乎破坏了它。
实际上,Alt+Enter
似乎对任何事情都不起作用,“建议灯泡”也没有出现。例如,如果我输入
String x = 2;
Run Code Online (Sandbox Code Playgroud)
在2
得到正常的红色下划线,但无球表演起来,Al+Enter
什么都不做。我已经检查过设置中是否选中了“显示意图灯泡”,并且分配了正确的键盘快捷键(只是为了确保我已将它们重置为默认值)。
有没有其他人最近遇到过这种情况并找到了解决方法?我已经尝试了我在 StackOverflow 上能找到的所有建议,但没有一个有效,也没有一个专门针对 Dart/Flutter 意图/动作/快速修复弹出窗口。
编辑
这是重启后的 IntelliJ 日志。我从似乎打破 Alt+Enter 的 Dart SDK 开始,然后切换到另一个使 Alt+Enter 工作但禁用选择设备来运行应用程序的可能性,然后再次切换回第一个(请参阅日志末尾附近的评论):
// Startup with SDK C:\Users\MyUser\flutter\bin\cache\dart-sdk 2.2.0-edge.0a7dcf17eb5f2450480527d6ad1e201fb47f1e36
2019-03-04 10:10:01,523 [ 0] INFO - #com.intellij.idea.Main - ------------------------------------------------------ IDE STARTED ------------------------------------------------------
2019-03-04 10:10:01,539 [ 16] INFO …
Run Code Online (Sandbox Code Playgroud) 有时您需要在应用程序本身中存储密码,例如用于与您自己的服务器通信的用户名/密码.在这些情况下,不可能遵循存储密码的正常过程 - 即散列密码,存储散列,与散列用户输入进行比较 - 因为您没有任何用户输入来比较散列.密码需要由应用程序本身提供.那么如何保护APK中存储的密码呢?如下所示的密码生成功能是否合理安全?
纯文本:
String password = "$()&HDI?=!";
Run Code Online (Sandbox Code Playgroud)
简单的混淆:
private String getPassword(){
String pool = "%&/@$()7?=!656sd8KJ%&HDI!!!G98y/&%=?=*^%&ft4%(";
return pool.substring(4, 7) + pool.substring(20, 24) + pool.substring(8, 11);
}
Run Code Online (Sandbox Code Playgroud)
我知道ProGuard有一些混淆功能,但我很好奇上面的"混淆"技术在编译时会做什么,以及通过查看APK和/或使用其他更复杂的东西来弄清楚它有多难技术?
花了大约一个小时试图弄清楚为什么"Semantic issue - no matching function for call to 'swap'"
当我尝试构建下面的类(在XCode中)时,我会得到20个类型的错误消息.
test.h
#include <iostream>
#include <string>
#include <vector>
class Test{
std::vector<std::string> list;
void run() const;
static bool algo(const std::string &str1, const std::string &str2);
};
Run Code Online (Sandbox Code Playgroud)
TEST.CPP
#include "test.h"
void Test::run() const {
std::sort( list.begin(), list.end(), algo );
}
bool Test::algo(const std::string &str1, const std::string &str2){
// Compare and return bool
}
Run Code Online (Sandbox Code Playgroud)
大多数具有相同问题的人似乎已经使他们的算法成为类成员而不是静态成员,但这显然不是问题.
我有一个方便的方法,它返回 a ,其中Column
包含一些Text
小部件,我们称之为mySpecialColumn(String header, String body)
. 现在我遇到一种情况,我想在使用此方法的一个特定位置更改文本颜色。由于这是一个非常罕见的异常,因此Color
向 的方法签名添加(可选)参数mySpecialColumn
似乎有点过分了。
我发现我可以用 包装我的自定义小部件的这个实例Material
,因为它有一个textStyle
属性。这似乎工作正常,但这是执行此操作的首选方法吗?
也许我对此是错的,但Material
似乎它应该主要用于创建自定义Material
小部件,而不是像更改文本颜色这样琐碎的事情?我本以为会有一些类似Container
或类似的常见小部件可以改变其子项的文本颜色?
android ×7
flutter ×3
android-12 ×1
android-rom ×1
c++ ×1
dart ×1
decompiling ×1
eclipse ×1
google-play ×1
icons ×1
jobservice ×1
listview ×1
logcat ×1
obfuscation ×1
project ×1
sorting ×1
textwatcher ×1
widget ×1
xcode ×1