小编Mos*_*jad的帖子

Android上的Web开发人员工具

我正在尝试找到一种在Android浏览器中使用开发者工具的方法,例如Chrome和Firefox.它们似乎没有附带构建版本,以避免使用我认为不到1%的用户使用的功能而使它们混乱.

我的背景:我现在使用我的Android手机作为功能开发环境,在最近的一个桌面Android界面(+键盘和桌面显示器)上使用Termux和Vim.但是,我不能在本地进行Web开发,因为它需要使用浏览器开发工具(至少是控制台,检查器和调试器).Firefox和Chrome的远程调试不会这样做,因为重点是避免使用笔记本电脑.

鉴于它们现在是独立的HTML/React应用程序(chromefirefox),

  • 在Play商店中提供这些浏览器的"开发者版本"有多难?

  • 是否有可能将它们集成为Web扩展(至少对于Firefox,因为Chrome for Android会将它们停用)?

或者,由于两个浏览器都可以远程调试,这意味着它们会公开API.两个浏览器都通过unix套接字与主机通信.

我可以看到它们正在运行(cat/proc/net/unix | grep devtool),但我无法将其转发到localhost:9222,这是chrome dev工具前端需要的.

应该在Android设备上重现的是简单的命令: adb -s <device> forward tcp:9222 localabstract:@chrome_devtools_remote.

我天真地尝试的是:socat -d tcp-listen:9222,fork abstract-connect:chrome_devtools_remote.

不幸的是,它不起作用:"由同行重置连接".我是否错过了从Unix套接字到JS开发工具前端可以理解的某种翻译步骤?

android unix-socket google-chrome-devtools firefox-developer-tools

9
推荐指数
0
解决办法
839
查看次数

为什么Memory Profiler中的"Code"和"Native"部分会占用太多内存,如何减少它?

当用户第一次打开它时,我的应用程序使用75MB内存.

我使用Android Studio中的Android Profiler工具来检查我的Android应用程序的内存使用情况.当主屏幕打开时,应用程序开始使用75MB内存,即使主活动不会创建任何需要太多内存的对象.没有位图或任何大数组等.

40MB来自"代码"部分,19MB来自"本机",我们在此活动中不加载任何本机库.我们在用户打开另一个Activity之后加载.我试图减少内存使用量,我想知道如何从"代码"和"本机"部分减少.

Android Profiler的屏幕截图

在此输入图像描述

memory android android-profiler

8
推荐指数
1
解决办法
3469
查看次数

如何将浮动操作按钮放置在约束布局内的屏幕右下角?

ScrollView在顶部有一个,里面有一个ConstraintLayout. 将高度设置为match_parent在 ConstraintLayout 中不起作用,因此高度与屏幕不匹配。在我的内部,我ConstraintLayout有一个浮动操作按钮,它没有停留在屏幕的右下角,而是停留在ConstraintLayout.

我的屏幕图像

在此处输入图片说明

如何使浮动操作按钮停留在屏幕右下角?

android floating-action-button android-constraintlayout

6
推荐指数
2
解决办法
3863
查看次数

带有版本目录的 kotlin-kapt 插件

我已将我的构建迁移到使用版本目录。我已从 build.gradle 中删除了以下内容

plugins {
id 'kotlin-android'
id 'kotlin-kapt'
}
Run Code Online (Sandbox Code Playgroud)

kapt "androidx.room:room-compiler:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

kapt "com.google.dagger:hilt-compiler:$hilt_version"
Run Code Online (Sandbox Code Playgroud)

现在我得到了

warning: The following options were not recognized by any processor: 
'[dagger.hilt.internal.useAggregatingRootProcessor, room.schemaLocation, 
dagger.fastInit, dagger.hilt.android.internal.disableAndroidSuperclassValidation, 
dagger.hilt.android.internal.projectType]'
Run Code Online (Sandbox Code Playgroud)

1 条警告

A failure occurred while executing 
com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
 > 2 files found with path 'META-INF/gradle/incremental.annotation.processors' from 
 inputs:
  - /.gradle/caches/transforms- 
 3/5f588ae3973231906376832b3350f55d/transformed/jetified-hilt-android-compiler- 
 2.45.jar
   - /.gradle/caches/transforms- 
 3/f1c91d9e7fbd546100043f736678c477/transformed/jetified-dagger-compiler-2.45.jar
Run Code Online (Sandbox Code Playgroud)

现在我想知道如何kotlin-kapt作为插件添加到版本目录中。或者如何使用annotationProcessor版本目录?

annotation-processing android-studio android-gradle-plugin android-jetpack-compose

6
推荐指数
1
解决办法
5881
查看次数

在移动设备和穿戴设备之间同步数据项

我正在尝试在我的移动设备和我的穿戴设备之间同步数据。但没有任何成功。我认为我按照开发人员文档做了所有事情。

这是我的移动代码的 MainActivity:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.wearable.DataClient;
import com.google.android.gms.wearable.DataItem;
import com.google.android.gms.wearable.PutDataMapRequest;
import com.google.android.gms.wearable.PutDataRequest;
import com.google.android.gms.wearable.Wearable;

import java.util.Date;

public class MainActivity extends AppCompatActivity {

    Button button;
    private static final String COUNT_KEY = "com.example.torbengab.sendwatchmessage";

    DataClient mDataClient;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.button2);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendStuff();
            }
        });
    }

    private void sendStuff() {
        mDataClient = Wearable.getDataClient(this);
        PutDataMapRequest …
Run Code Online (Sandbox Code Playgroud)

android

5
推荐指数
1
解决办法
1405
查看次数

安排android中的作业在特定时间运行

我有一个Android应用程序需要每隔午夜将备份数据发送到我的云服务器.为此,我需要安排每24小时一次的工作.我已经阅读了有关AlarmManagerJobScheduler类的信息,可以有效地安排你的工作.

在我的情况下,我使用的是JobScheduler类,这里是我的scheduleJob()方法,它将作业设置为每隔86400000毫秒(即一天)后安排.

@RequiresApi(api =Build.VERSION_CODES.LOLLIPOP)
public void scheduleJob(View v){
    JobInfo.Builder builder = new JobInfo.Builder(1,new ComponentName(this,JobSchedule.class));
    builder.setPersisted(true);
    builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
    builder.setPeriodic(86400000);
    builder.setRequiresCharging(false);
    builder.setRequiresDeviceIdle(false);
    builder.setBackoffCriteria(10000,JobInfo.BACKOFF_POLICY_EXPONENTIAL);

    int test = jobScheduler.schedule(builder.build());
    if(test <= 0){
        //sth went wrong
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是,从哪里以及如何实现jobSchedule()以便我可以让脚本在午夜12点运行.

另外,如果我从Android的Activity XYZ的onCreate()方法调用scheduleJob方法,那么每次 调用Activity XYZ时,都会调用它的覆盖方法onCreate()并调度另一个作业.那么我应该做什么,从哪里安排工作,以便在应用程序的整个生命周期内只安排一项工作?

总结一个例子,Whatsapp每天凌晨2点备份数据.即使我关闭了网络连接,它也会在我上线后立即备份我的数据.我想在我的应用程序中实现类似的功能.

android

5
推荐指数
1
解决办法
1450
查看次数

数据绑定和 MVVM。通过单击按钮显示 DatePickerDIalog

现在我有这个代码:

class MyFragment : DaggerFragment() {
    ...
    private fun setTimePickerDialog() {
        binding.timeButton.setOnClickListener{
            val calendar = viewModel.calendar
            val curHourOfDay = calendar.get(Calendar.HOUR_OF_DAY)
            val curMinute = calendar.get(Calendar.MINUTE)
            val dialog = TimePickerDialog(context, { _, hourOfDay, minute ->
                 val c = Calendar.getInstance()
                 c.set(1970, 0, 1, hourOfDay, minute)
                 viewModel.time.value = SimpleDateFormat("HH:mm:ss").format(c.time)
            }, curHourOfDay, curMinute, true)
            dialog.show()
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想利用 DataBinding 库而不是setOnClickListener在我的片段中写入。但我无法将此代码移至ViewModel,因为需要上下文。通过使用 DataBinding 和 MVVM 单击按钮来显示 DatePickerDialog 的简洁方法是什么?

android mvvm android-databinding android-architecture-components

5
推荐指数
1
解决办法
4900
查看次数

Android Studio未检测到构建/运行时的代码更改(

每当我在Android Studio(版本3.0.1)中进行代码更改时,我需要在构建之前进行清理,以使更改生效.进行更改并按下绿色箭头构建/运行按钮看起来像是构建,但除非事先清理项目,否则不会合并新的更改.例如,如果我添加一些日志记录然后构建/运行,则新的日志不会出现,直到我清理然后再次构建/运行.几乎所有的变化似乎都是这种情况.有时它可以工作,大部分时间它没有.

编译器应检测代码的更改并每次重建这些文件.感觉就像他们优先考虑构建速度而不是正确性.还有其他人解决了这个问题吗?如果没有那么是否有一些设置在每次构建/运行之前强制清理?

android android-studio android-studio-3.0

4
推荐指数
2
解决办法
1821
查看次数