无法在 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 分析器检查了清单,只是为了确定,它在清单文件中没有权限(我不知道为什么它仍然说权限在那里)...
但同样的事情仍然发生:(
更新
找到此权限的来源并禁用这些模块:
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
我正在使用此代码但是当我停止进程时它不会获得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) 如何从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
在我的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)
因此,总的来说,我认为这R8
比Proguard
它仍然是实验版本要好得多.
谷歌说:
R8是Proguard替代整个程序缩小和优化的替代品.
我认为这是真的.
但这些工具如何在细节中起作用?是什么让主要的彼此之间的差异以及R8如何在深层运作?
更新:
更新到Android Studio 3.3 Canary 2后,使用R8时似乎APK的大小与使用Proguard没有任何区别
ps:对不起我的英文:) :) :)
我正在尝试在我的应用程序中实现更新的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缓存并重新启动......任何想法?
它在这里一个奇怪的情况:),我在片段中实现此代码扫描TCP Ports
中multithread 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) 我在我的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中选择标记的内容.
如何制作这样的东西?
所以,这就是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) 我在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.
但无法弄清楚它是如何正常工作或如何用于我的目的 …
由于一个错误,我使用了 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, 因为我没有看到任何关于这个的文档