我在manifest.xml中指定了一个元数据,如下所示:
<meta-data android:value="5555555555" android:name="foo"></meta-data>
Run Code Online (Sandbox Code Playgroud)
访问元数据时,如下所示:
ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA);
Object value = (Object)ai.metaData.get(key);
Run Code Online (Sandbox Code Playgroud)
这个值被解释为int - 更重要的是 - 错误地解释为(1260588259).
由于类型是由构建系统(布尔值,整数,浮点数和字符串)自动确定的,我想知道是否有任何方法可以强制数据类型为字符串.
我尝试在末尾添加一个空格("5555555555"),但随后该值被解释为5.5555553E9 float!).
我也尝试使用getString而不是get,但是返回null.
有任何想法吗?TIA.
我一直在努力学习文本测量和缩放画布.
当画布未缩放时,getTextBounds和measureText可以提供准确的结果.但是,当缩放画布时,两种方法都不会提供与打印文本的实际大小相匹配的结果.
为了测试,我使用以下onDraw方法创建了View的子类:
final float scaling = 0.51f;
final int fontSize = 50;
canvas.scale(scaling, scaling);
font = Typeface.create("Arial", Typeface.NORMAL);
Paint paint = new Paint();
paint.setColor(0xff4444ff);
paint.setTypeface(font);
paint.setTextSize(fontSize);
paint.setAntiAlias(true);
int x = 10;
int y = 100;
final String text = "Lorem ipsum dolor sit amet, consectetur adipisici elit...";
canvas.drawText(text, x, y, paint);
// draw border using getTextBounds
paint.setColor(0xffff0000);
paint.setStyle(Paint.Style.STROKE);
paint.setTypeface(font);
paint.setTextSize(fontSize);
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
bounds.offset(x, y);
paint.setColor(0x80ffff00);
canvas.drawRect(bounds, paint);
// draw border using measureText …Run Code Online (Sandbox Code Playgroud) 我使用GLSurfaceView遇到了不同的行为.AFAIK是程序的责任,清除每帧的缓冲区(颜色和深度).这意味着如果我不清除缓冲区,我会得到最后一帧的内容(或者之前用于双缓冲的内容).
似乎无论在某些设备上是什么,缓冲区都被清除了.我在Addison Wesley OpenglES2.0编程指南中对一些具有不同结果的测试设备进行了"Hello Triangle"程序的以下修改:
有没有办法强制在每个绘制回调中获得一个未更改的缓冲区?
清除屏幕的设备的结果如下所示:

测试活动如下所示:
package com.example.glcleartest;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
public class MainActivity extends Activity {
protected static final int NUM_VERTICES = 3;
@Override
protected void onCreate(Bundle savedInstanceState) …Run Code Online (Sandbox Code Playgroud) 有没有办法在Android市场中隐藏属于特定内存类设备的应用程序?例如.我只想为具有32或更高内存级别的设备(AcivityManager.getMemoryClass())发布应用程序.
<uses-configuration>标记仅具有与屏幕/键盘相关的标记,<uses-feature>也没有与内存相关的设置.
有没有其他方法为应用程序指定必要的设备属性?
我的应用程序未显示在Nexus 7上.播放商店控制台在设备列表中显示Nexus 7:
Unsupported devices due to your manifest settings:
Nexus 7(grouper)"
Run Code Online (Sandbox Code Playgroud)
我的清单看起来像这样:
...
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14">
</uses-sdk>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<compatible-screens>
<screen android:screenSize="normal" android:screenDensity="mdpi"/>
<screen android:screenSize="normal" android:screenDensity="hdpi"/>
<screen android:screenSize="normal" android:screenDensity="xhdpi"/>
<screen android:screenSize="large" android:screenDensity="ldpi"/>
<screen android:screenSize="large" android:screenDensity="mdpi"/>
<screen android:screenSize="large" android:screenDensity="hdpi"/>
<screen android:screenSize="large" android:screenDensity="xhdpi"/>
<screen android:screenSize="xlarge" android:screenDensity="ldpi"/>
<screen android:screenSize="xlarge" android:screenDensity="mdpi"/>
<screen android:screenSize="xlarge" android:screenDensity="hdpi"/>
<screen android:screenSize="xlarge" android:screenDensity="xhdpi"/>
</compatible-screens>
...
Run Code Online (Sandbox Code Playgroud)
我不需要相机,这似乎是通常的不兼容问题的情况.我没有使用该supports-screens条目(我想排除所有小屏幕设备,以及ldpi普通设备,这是不可能使用支持屏幕条目AFAIK).
什么可能是什么问题?
一个有趣的细节可能是nexus …
我有一个项目,其中包含几个特定于 cpu 架构的 .so 文件 - 最大的是 xwalk lib,v8a 版本为 60MB,v7a 版本为 37MB。
当我们拆分 APK 时,arm-v7a 应用程序 apk 版本大约为 38mb,arm-v8a apk 大约为 41mb,这是有道理的 - 压缩 lib 将分别产生 23MB 和 20MB。
使用 app bundle 时,似乎生成的 APK 根本没有压缩。将 60MB 和 37MB 添加到 apk 大小几乎没有变化,导致 64 位 arm 设备的 apk 为 97MB。
当使用 bundletool 为一个特定设备生成 apk 以及从内部应用测试播放商店站点下载时,我得到一致的结果,该站点返回 apk 也取决于设备。
我是否在这里遗漏了一些东西,或者在包含 .so 文件时应用程序包不是最佳选择,最好再次使用拆分 APK?