我正在Android应用程序上运行一些自动化测试(使用calabash-android),我需要以编程方式触发清除应用程序的缓存,而不是用户数据.
我发现adb shell pm clear解决方案不够用,因为它清除了用户数据(包括登录详细信息).
有没有办法在应用程序外部实现这一点(即没有代码更改)?
我正在开发一个基于Web的应用程序,也应该在基于Android的手机上运行.由于我没有,我成功使用SDK中的模拟器.
但是当我不断更改应用程序的一些JavaScript页面时,浏览器使用旧版本的缓存(服务器上的缓存控制是正确的 - 但我没有那里需要过多缓存的正常用例)
那么有没有办法告诉(默认)Android浏览器永久禁用它的缓存?
或者是否可以使用adb命令清除缓存?
我正在开发设备管理应用程序(已由制造商签名)。我正在使用它来安装其他应用程序,使用以下用于 android 9 的 adb shell 命令:-
cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293
Run Code Online (Sandbox Code Playgroud)
我只是像这样传递它:-
String command = "cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293"
Runtime.getRuntime().exec(command);
Run Code Online (Sandbox Code Playgroud)
但我收到错误“猫未知选项 S”。
当我从 adb shell 运行它时,相同的命令工作得很好。不知道我做错了什么,可以使用一些帮助。
编辑 1:- 我尝试运行如下命令:-
String[] commandInstall = {
"/system/bin/sh",
"-c",
"cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293"
};
Process process = Runtime.getRuntime().exec(commandInstall);
Run Code Online (Sandbox Code Playgroud)
但现在我收到错误:-
ava.lang.SecurityException: Reverse mode only supported from shell
at com.android.server.pm.PackageInstallerSession.doWriteInternal(PackageInstallerSession.java:679)
at com.android.server.pm.PackageInstallerSession.write(PackageInstallerSession.java:612)
at android.content.pm.PackageInstaller$Session.write(PackageInstaller.java:852)
at com.android.server.pm.PackageManagerShellCommand.doWriteSplit(PackageManagerShellCommand.java:2447)
at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:915)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:158)
at android.os.ShellCommand.exec(ShellCommand.java:103)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:21330)
at android.os.Binder.shellCommand(Binder.java:634)
at …Run Code Online (Sandbox Code Playgroud) 所以我设置了电子邮件/密码注册和登录。
那是有效的。我认为 Firebase 解决了这个问题,但显然没有。我希望在用户关闭应用程序后,下次打开应用程序时已经登录。
有什么不见了?
class LoginActivity : AppCompatActivity(){
lateinit var auth: FirebaseAuth
lateinit var user: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = FirebaseAuth.getInstance()
}
fun loginLoginClicked(view: View) {
// Perform login
val email = loginEmailTxt.text.toString()
val password = loginPasswordTxt.text.toString()
auth.signInWithEmailAndPassword(email, password)
.addOnSuccessListener {
finish()
}
.addOnFailureListener { exception ->
Log.e("Exception", "Could not sign in user - ${exception.localizedMessage}")
}
val loginIntent = Intent(this, MainActivity::class.java)
startActivity(loginIntent)
}
fun loginCreateClicked(view: View) {
// segue to the create user activity …Run Code Online (Sandbox Code Playgroud)