小编EAK*_*EAM的帖子

您无法提交更新,因为有关您的应用的某些信息不完整 (Google Play)

无法在 Google Play 中更新我的应用程序,因为它显示:

此版本包含 com.google.android.gms.permission.AD_ID 权限,但您在 Play 管理中心上的声明表明您的应用不使用广告 ID。

您必须更新您的广告 ID 声明。

首先,该应用程序不使用广告。

注入权限的库是 ->jetified-play-services-ads-identifier-18.0.0但我不知道它来自哪里。另外,为了确保删除此权限(无论如何),请在我的应用程序清单中添加:

<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)

但它仍然说我的应用程序无法更新,因为它包含该权限。我已经通过 APK 分析器检查了清单,只是为了确定,它在清单文件中没有权限(我不知道为什么它仍然说权限在那里)...

还更新了 Play 商店的广告设置: 在此输入图像描述

但同样的事情仍然发生:(

更新

找到此权限的来源并禁用这些模块:

implementation ("com.google.firebase:firebase-analytics-ktx:21.1.0") {
        exclude module: "play-services-ads-identifier"
        exclude module: "play-services-measurement"
        exclude module: "play-services-measurement-sdk"
        exclude module: "play-services-measurement-api"
    }
Run Code Online (Sandbox Code Playgroud)

更改之后,合并的清单不再包含也通过 APK 分析器测试的权限,但不幸的是 Google Play 仍然说该应用程序包含权限(奇怪)...

如有任何帮助,我们将不胜感激:)

android android-manifest google-play android-studio google-advertising-id

159
推荐指数
3
解决办法
6万
查看次数

如何从System.Diagnostics.Process停止进程并最终获取统计信息

我正在使用此代码但是当我停止进程时它不会获得ping统计信息:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "ping";
p.StartInfo.Arguments = "-c " + count + " -i " + interval + " -s " + buffer + " -W " + timeout + " " + address;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;

string readData = "";

DateTime dt = DateTime.Now.AddSeconds(5);
if (p.Start())
{
    Scanner scanner = new Scanner(p.StandardOutput.BaseStream);

    while (scanner.HasNextLine)
    {
        readData =  scanner.NextLine().ToString();
        Console.WriteLine(readData.ToString());

        if (!string.IsNullOrEmpty(readData) && !readData.StartsWith("---"))
        {
            Match M = Regex.Match(readData, @"^[\d]+ bytes from ([^:]+): …
Run Code Online (Sandbox Code Playgroud)

c# mono android xamarin.android xamarin

24
推荐指数
1
解决办法
607
查看次数

在Android P中弃用WifiManager中的startScan()

如何从wifi获取扫描结果,例如每3秒,没有 mWifimanager.startScan();

谷歌说:

startScan() This method was deprecated in API level P. The ability for apps to trigger scan requests will be removed in a future release.

请注意,这个API级别我正在使用 List<ScanResult> results = mWifiManager.getScanResults();而没有调用startScan,该列表包含wifi AP,但它更新非常慢

更新至2019年1月12日:https://issuetracker.google.com/issues/112688545

java android kotlin android-9.0-pie

19
推荐指数
3
解决办法
1万
查看次数

使用Proguard和R8差异的Android应用程序

在我的Android应用程序我正在使用Google R8(现在的实验版)和Proguard 6.0.3...根据您的经验你怎么想?主要区别是什么?随着R8我的应用程序的尺寸更小,与过程的速度相比,Proguard真的好多了.使用时的类数R8比较小Proguard.

R8与现有的Proguard规则兼容,但它忽略了一些如下:

Ignoring option: -optimizationpasses"
Ignoring option: -assumenoexternalreturnvalues"
Ignoring option: -assumenoexternalsideeffects"
Run Code Online (Sandbox Code Playgroud)

它只为错过的类而不是错误提供警告,例如:

AGPBI: {"kind":"warning","text":"Missing class: sun.net.www.protocol.http.HttpURLConnection","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.sun.net.httpserver.HttpHandler","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: org.dbunit.dataset.datatype.DefaultDataTypeFactory","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.inmobi.ads.InMobiNative$NativeAdListener","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: javax.enterprise.util.AnnotationLiteral","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: sun.net.www.protocol.http.Handler","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.flurry.android.ads.FlurryAdNativeListener","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: sun.net.spi.nameservice.NameServiceDescriptor","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: java.lang.ClassValue","sources":[{}],"tool":"D8"}
Run Code Online (Sandbox Code Playgroud)

因此,总的来说,我认为这R8Proguard它仍然是实验版本要好得多.

谷歌说:

R8是Proguard替代整个程序缩小和优化的替代品.

我认为这是真的.

但这些工具如何在细节中起作用?是什么让主要的彼此之间的差异以及R8如何在深层运作?

更新:

更新到Android Studio 3.3 Canary 2后,使用R8时似乎APK的大小与使用Proguard没有任何区别

ps:对不起我的英文:) :) :)

java android proguard android-studio

17
推荐指数
0
解决办法
1973
查看次数

Android P预览中的INSTALL_FAILED_OLDER_SDK

我正在尝试在我的应用程序中实现更新的android sdk,但它失败了:

INSTALL_FAILED_OLDER_SDK:Failed to parse during installpacageLi at binary xml line 8 : Requires development Platform P but this is a release platform

compileSdkVersion 'android-P'
        defaultConfig {
            applicationId "example"
            minSdkVersion 16
            targetSdkVersion 'P'
            versionCode 223
            versionName '2.2.3-BETA'
            //testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            vectorDrawables.useSupportLibrary = true
        }
Run Code Online (Sandbox Code Playgroud)

我试过:清理项目,重建,清理gradle缓存并重新启动......任何想法?

java android android-studio android-gradle-plugin

12
推荐指数
1
解决办法
2831
查看次数

应用程序崩溃无一例外或日志(似乎是xamarin/mono bug)

它在这里一个奇怪的情况:),我在片段中实现此代码扫描TCP Portsmultithread environment,它crash when debugging,有时crash in release mode与thoose消息太:

E/art (12972): Nested signal detected - original signal being reported

F/art (12972): art/runtime/fault_handler.cc:117] Check failed: !initialized_

试图设置Target Android to 23不起作用.

尝试运行adb shell setprop debug.mono.env MONO_DEBUG=soft-breakpoints不起作用.

试图使用不同的编译 Android API's Versions

任何想法为什么会发生这种情况?

这是我的代码:

    public void start()
    {
        for (int i = 0; i < 50; i++)
        {
            Task.Run(() => RunScanTcp());
            //ThreadPool.QueueUserWorkItem(RunScanTcp);
            //Thread thread = new Thread(new ThreadStart(RunScanTcp));
            //thread.Start();
        }
    }


    public void RunScanTcp() …
Run Code Online (Sandbox Code Playgroud)

c# mono android xamarin.android xamarin

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

在webview中选择元素

我在我的Android应用程序中实现了一个webview,并尝试在用户点击布局时突出显示或标记元素.

webview初始化如下:

myWebView.getSettings().setJavaScriptEnabled(true);
//myWebView.getSettings().setGeolocationEnabled(true);
//myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.setWebViewClient(new WebViewController());
Run Code Online (Sandbox Code Playgroud)

尝试标记用户点击的元素,例如在此屏幕截图中:

用点选择

我通过jsoup获取所有页面div:

doc = Jsoup.connect(url).get();
final Elements alldivs = doc.select("div");
ArrayList<String> list = new ArrayList<String>();
for (org.jsoup.nodes.Element e : alldivs) {
if (!e.id().equals(""))
list.add(e.id());
}
Run Code Online (Sandbox Code Playgroud)

但是如何将选择标记为上面的照片,然后从div id中选择标记的内容.

如何制作这样的东西?

java android webview

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

将一些声音数据添加到现有的mp3文件Android,lame encoder

所以,这就是mp3在android中从麦克风到文件的编码方式:

private void startBufferedWrite(final File file) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                output = null;
                try {
                    output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
                    while (mIsRecording) {
                        int readSize = mRecorder.read(buffer, 0, buffer.length);
                        if (readSize > 0) {
                            int bytesEncoded = androidLame.encode(buffer, buffer, readSize, mp3buffer);
                            if (bytesEncoded > 0) {
                                try {
                                    output.write(mp3buffer, 0, bytesEncoded);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                } catch (IOException e) {
                    Log.e("Error writing file : ", e.getMessage());
                } …
Run Code Online (Sandbox Code Playgroud)

java mp3 android lame android-studio

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

Android - 服务,IntentService,JobIntentService - 如果应用程序被杀,它们将被停止

我在StackOverflow和Web中已经阅读了很多相同的问题但是无法配置"永不结束服务"之类的东西,或者即使从任务中删除应用程序(强制终止)也无法运行.我只是想知道像Viber或WhatsUp这样的服务是如何工作的,因为当我们强制杀死那些应用程序时,当有人写信给我们时我们仍然能够接收消息(所以服务仍在运行).我知道前台服务,但它不是解决方案,因为用户不想看到通知.所以我在这里尝试过.:此代码在运行内部服务以检测实时更改,并且只是希望在应用程序的每个条件中保持活动:前景,背景,删除等...

firestoreDb!!.collection("example").document("example").collection("real_time_request")
                    .addSnapshotListener { documentSnapshot: QuerySnapshot?, _: FirebaseFirestoreException? ->

                    }
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的服务,以便在用户集合中发生更改时从Firestore数据库获取实时数据.

我尝试服务的方式是:

FirestoreListeners : IntentService("Firestore Listeners")
FirestoreListeners : Service
FirestoreListeners : JobIntentService
Run Code Online (Sandbox Code Playgroud)

当应用程序处于前台或后台时,上面的所有内容都正常工作,但是在应用程序强制关闭后(从任务中删除时)服务会被终止

我试图在清单中进行此更改:

android:stopWithTask="false"
android:directBootAware="true"
android:process=":remote"
Run Code Online (Sandbox Code Playgroud)

在应用层次中:

android:persistent="true"
Run Code Online (Sandbox Code Playgroud)

在IntentService onHandleIntent中:

setIntentRedelivery(true)
Run Code Online (Sandbox Code Playgroud)

在服务onStartCommand:

return START_STICKY
Run Code Online (Sandbox Code Playgroud)

如果系统销毁或杀死它,试图重新启动服务:

override fun onTaskRemoved(rootIntent: Intent) {
        val restartServiceIntent = Intent(applicationContext, this::class.java)
        restartServiceIntent.setPackage(packageName)
        val restartServicePendingIntent = PendingIntent.getService(applicationContext, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT)
        val alarmService = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent)
        Log.e("Service Firestore ", "Task Removed")
        super.onTaskRemoved(rootIntent)
    }
Run Code Online (Sandbox Code Playgroud)

但没有任何作用.实现这一目标的最佳解决方案是什么?所以目的是让某些东西在后台运行并监听Firestore Changes(或其他东西),即使在应用程序被杀或从Viber等任务中删除之后......也许他们正在使用没有通知图标的前台服务?但我不认为Android允许我们制作这种前台服务(没有通知)

我已经阅读了一些关于WorkManager谷歌的文章:

注意:WorkManager适用于需要保证系统即使应用程序退出也会运行它们的任务,例如将应用程序数据上传到服务器.如果应用程序进程消失,它不适用于可以安全终止的进程内后台工作; 对于这种情况,我们建议使用ThreadPools.

但无法弄清楚它是如何正常工作或如何用于我的目的 …

java android kotlin android-studio android-9.0-pie

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

如何使用最新的 R8 Shrinker 版本

由于一个错误,我使用了 R8 Shrinker 的本地 jar 文件(由 R8 团队推荐),并将类路径添加到 top gradle.build

classpath files($..../R8.jar/$)
Run Code Online (Sandbox Code Playgroud)

现在不管 Android Studio 有任何更新,Gradle 构建仍然使用R8我以前使用过的旧版本V. 1.4.55

最近我看到他们发布了最新版本:https : V. 1.4.69 //r8.googlesource.com/r8/

所以我的问题是:How to configure gradle to tell to use the latest version of R8, 因为我没有看到任何关于这个的文档

android android-gradle-plugin android-r8

3
推荐指数
1
解决办法
2723
查看次数