续上篇:http://blog.csdn.net/jimbo_lee/article/details/8694265
Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。这个方法有两个参数:
1。packageName 包名,要得到Context的包名
2。flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
/**
* bytes转换成十六进制字符串
*/
public static String byte2HexStr(byte[] b) {
String hs = "";
String stmp = "";
for(int n = 0; n < b.length; n++){
stmp = (Integer.toHexString(b[n] & 0XFF));
if(stmp.length() == 1)
hs = hs + "0" + stmp;
else
hs = hs + stmp;
}
return hs.toUpperCase();
}
/**
* 十六进制字符串转换成bytes
*/
public static byte[] hexStr2Bytes(String src) {
int m = 0, n = 0;
int l = src.length() / 2;
byte[] ret = new byte[l];
for(int i = 0; i < l; i++){
m = i * 2 + 1;
n = m + 1;
ret[i] = uniteBytes(src.substring(i * 2, m), src.substring(m, n));
}
return ret;
}
private static byte uniteBytes(String src0,String src1) {
byte b0 = Byte.decode("0x" + src0).byteValue();
b0 = (byte) (b0 << 4);
byte b1 = Byte.decode("0x" + src1).byteValue();
byte ret = (byte) (b0 | b1);
return ret;
}
在处理byte数组与字符串转换的时候,可以使用中间类型十六进制字符串。
附: java中 byte字符处理
/**
*将字节数组补成8的倍数,以0填充;
*/
public static byte[] addZerosForDes(byte[] source)
{
byte [] ret = null;
if(source==null || source.length%8==0)
ret = source;
else
{
int i = source.length+8-source.length%8;
ret = new byte[i];
System.arraycopy(source,0,ret,0,source.length);
}
return ret;
}
/**
*将字节数组末尾的0去掉(小于8位);
*/
public static byte[] removeZerosForDes(byte[] encoding) {
byte[] ret = null;
if (encoding != null && encoding.length > 0) {
int i = encoding.length;
while (i-1>=0) {
if (encoding[i - 1] != (byte) 0)
break;
i--;
}
ret = new byte[i];
System.arraycopy(encoding, 0, ret, 0, i);
}
return ret;
}
str.matches(
"\\d+"
);
// int
str.matches(
"\\d+(\\.)?(\\d+)?"
);
// double or float
InputStream inputStream = resource.openRawResource(resId);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
byte[] bitmapBuffer = bitmap2ByteArray(bitmap);
public static byte[] bitmap2ByteArray(Bitmap bitmap) {
int height = bitmap.getHeight();
int width = bitmap.getWidth();
byte[] tmpBuf = new byte[(height / 8 + 1) * width + 1];
int[] p = new int[8];
int t = 0;
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y += 8) {
for (int m = 0; m < 8; m++) {
if (y + m >= height){
p[m] = 0;
}else {
p[m] = (bitmap.getPixel(x, y + m) == -1 ? 0 : 1);
}
}
int value = p[0] * 128 + p[1] * 64 + p[2] * 32 + p[3] * 16 + p[4] * 8 + p[5] * 4 + p[6] * 2 + p[7];
tmpBuf[(++t)] = ((byte) value);
}
}
byte[] realBuf = new byte[t + 1];
for (int i = 0; i < t + 1; i++) {
realBuf[i] = tmpBuf[i];
}
return realBuf;
}
第一步:在对应的mk文件中加入:LOCAL_LDLIBS := -llog
第二步:在要使用LOG的cpp文件中加入:
#include
第三步:定义各个宏
#define LOG_TAG "nativeRfidUnpack"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , LOG_TAG, __VA_ARGS__)
第四步:使用
LOGE("---Java_com_odm_rfid_RfidDevice_nativeDeviceUnpack ---");
将NDK编译的第三方静态拷贝到JNI目录下,在Android.mk中添加如下代码
以openssl静态库(libcrypto-static.a)为例
第一种链接方法:LOCAL_LDFLAGS := libcrypto-static.a
第二种链接方法:LOCAL_LDLIBS := libcrypto-static.a
第三种链接方法:
include $(CLEAR_VARS)
LOCAL_MODULE := third_static_lib (可以随便起一个名字)
LOCAL_SRC_FILES := libcrypto-static.a
include $(PREBUILT_STATIC_LIBRARY)
//在你要编译的模块中引用third_static_lib
LOCAL_STATIC_LIBRARIES := third_static_lib
在native的实现文件中开头加入代码:
namespace android {
#ifdef __cplusplus
extern "C" {
#endif
结尾加入代码:
#ifdef __cplusplus
}
#endif
}//namespace android
即ok了
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
return true;
}else{
return false;
}
一、打包成一般的jar包:
步骤如下:
1)在要打包的项目上右击,选择Export。
2)在弹出的窗口中,选择Java -> JAR File,然后点击next按钮。
3)在JAR File Specification窗口中,设置打包成的文件名和存放位置,点击两侧next。
4)在JAR Manifest Specification窗口中,设置MANIFEST.MF清单文件的配置,若仅仅打包成单纯的jar包的话,不用做任何修改,采取默认即可,若打包成可执行jar包的话,可以使用已存在的MANIFEST文件或者直接选择Main class。
5)点击Finish按钮,完成打包。
二、打包成可运行的jar包
步骤如下:
1)在要打包的项目上右击,选择Export。
2)在弹出的窗口中,选择Java -> Runnable JAR File,然后点击next按钮。
3)在Runnable JAR File Specification窗口中,选择Launch configuration和Export destination。
4)点击Finish按钮,打包完成。
在oncreate函数中增加代码
final android.view.Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);
或在调用setContentView函数之前增加代码
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED, WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);
LOCAL_MODULE_TAGS :=user eng tests optional
user: 指该模块只在user版本下才编译
eng: 指该模块只在eng版本下才编译
tests: 指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译
long now = System.currentTimeMillis();
String s = String.format("%tR", now);// "15:12"
Date d = new Date(now);
s = String.format("%tD", d);// "07/13/04" // Current month/day/year
s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"
s = String.format("%05d", 123); // "00123"
格式: %[argument_index$][flags][width][.precision]conversion
可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。
可选的 flags 是修改输出格式的字符集。有效标志的集合取决于转换类型。
可选 width 是一个非负十进制整数,表明要向输出中写入的最少字符数。
可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。
所需的 conversion 是一个表明应该如何格式化参数的字符。给定参数的有效转换集合取决于参数的数据类型。
对于日期、时间 第一个字符是 't' 或 'T'。第二个字符表明所使用的格式 具体格式参考 类 java.util.Formatter
示例代码:
Double d = 12.3366;
System.out.println(String.format("%2$08d", -3123,-5566));
System.out.println(String.format("%1$9d", -31));
System.out.println(String.format("%1$-9d", -31));
System.out.println(String.format("%1$(9d", -31));
System.out.println(String.format("%1$#9x", 5689));
//小数点后面两位
System.out.println(String.format("%1$.2f", 5689.0)); //必须是同类型的才能进行转换
//格式化的位置
/*String str = "I love ni %s, you love me %s";
String str2 = "I love ni %2$s, you love me %1$s";
System.out.println(String.format(str, "abcdefg","1234567"));
System.out.println(String.format(str2, "abcdefg","1234567"));*/
//数组的操作
Object[] sendData = new Object[4];
sendData[0] = Integer.valueOf(1);
sendData[1] = "172.12.1.2";
sendData[2] = Integer.valueOf(123);
sendData[3] = "testadfaerfa";
String sendDataString = String.format("%d,%s,%d,%s",(Object[]) sendData);
System.out.println(sendDataString);
http://blog.csdn.net/feng_870906/article/details/6870788
adb shell monkey --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --ignore-native-crashes 10000000
KK版本 修改文件:packages/apps/Launcher3/src/com/android/launcher3/Workspace.java
public void syncWithScroll() {
if(enableWallpaperScroll){
//ori code -- 会根据当前screen位置调整墙纸位置
float offset = wallpaperOffsetForCurrentScroll();
mWallpaperOffset.setFinalX(offset);
}else{
//新增code -- 不会根据当前screen位置调整墙纸位置, 仅根据当前手机方向(GSensor方向)调整墙纸位置
if(mLauncher.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
mWallpaperOffset.setFinalX((float) 0.55);
}else{
mWallpaperOffset.setFinalX((float) 0.48);
}
}
updateOffset(true);
}
mLauncher.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
int sdkVersion = SystemProperties.getInt(ANDROID_BUILD_VERSION, 10);
if(sdkVersion >= ANDROID_BUILD_ICS){
toRoot_ics();
}else{
toRoot_gb();
}
private static final String RO_ADB_SECURE = "ro.adb.secure";
private static final String RO_SECURE = "ro.secure";
private static final String RO_ALLOW_MOCK_LOCATION="ro.allow.mock.location";
private static final String RO_DEBUG = "ro.debuggable";
private static final String ADB_ENABLE_GB = "persist.service.adb.enable";
private static final String ADB_ENABLE_ICS = "persist.sys.usb.config";
private static final String ATCI_USERMODE = "persist.service.atci.usermode";
private void toRoot_ics(){
SystemProperties.set(ADB_ENABLE_ICS, "none");
//SystemProperties.set("ctl.stop", "adbd");
SystemProperties.set(RO_SECURE, "0");
SystemProperties.set(RO_ADB_SECURE, "0");
//SystemProperties.set(RO_ALLOW_MOCK_LOCATION,"1" );
SystemProperties.set(RO_DEBUG, "1");
SystemProperties.set(ADB_ENABLE_ICS, "mass_storage,adb,acm");
//SystemProperties.set("ctl.start", "adbd");
SystemProperties.set(ATCI_USERMODE, "1");
try {
Process proc = Runtime.getRuntime().exec("start atcid-daemon-u");
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(User2rootActivity.this, "Update to Root Success", Toast.LENGTH_LONG).show();
}
private void toUser_ics(){
SystemProperties.set(ATCI_USERMODE, "0");
try {
Process proc = Runtime.getRuntime().exec("stop atcid-daemon-u");
} catch (IOException e) {
e.printStackTrace();
}
SystemProperties.set(ADB_ENABLE_ICS, "mass_storage");
SystemProperties.set(RO_SECURE, "1");
SystemProperties.set(RO_ADB_SECURE, "1");
//SystemProperties.set(RO_ALLOW_MOCK_LOCATION,"0" );
SystemProperties.set(RO_DEBUG, "0");
Toast.makeText(User2rootActivity.this, "Update to User Success", Toast.LENGTH_LONG).show();
}
private void toRoot_gb(){
SystemProperties.set(RO_SECURE, "0");
SystemProperties.set(RO_ALLOW_MOCK_LOCATION,"1" );
SystemProperties.set(RO_DEBUG, "1");
SystemClock.sleep(200);
SystemProperties.set(ADB_ENABLE_GB, "1");
Toast.makeText(User2rootActivity.this, "Update to Root Success", Toast.LENGTH_LONG).show();
}
private void toUser_gb(){
SystemProperties.set(RO_SECURE, "1");
SystemProperties.set(RO_ALLOW_MOCK_LOCATION,"0" );
SystemProperties.set(RO_DEBUG, "0");
SystemProperties.set(ADB_ENABLE_GB, "0");
Toast.makeText(User2rootActivity.this, "Update to User Success", Toast.LENGTH_LONG).show();
}
1、被startActivityForResult启动的acitvity的启动模式不能是singleInstance或singleTask android:launchMode="singleTask" 否则 函数onActivityResult会被立即执行,子Activity是singleTask,父Activity是singleTask也不行,把子Activity改为标准的才行
2、startActivityForResult调用时 requestCode 必须>0 才行,否则onActivityResult不会被调用
1、如果是前一个提交,可以用 git commit --amend -m "" 或 git commit --amend 来改
2、更早这样修改:假设要修改commit 65ae4f,执行
git rebase 65ae4f^ --interactive
在编辑器中把第一行的pick改为edit,保存,退出,然后按提示操作。
一般是第一种情况比较多,如果不是前一个提交也可以使用git reset commitID 把那个commit放到前一个提交,不过后面的提交要重新git add -> git commit 提交
文字颜色:#708284
背景颜色:#07242E
近似默认:文字颜色:#FFFFFF 背景:#270C1F
textview中有个内容过长加省略号的属性,即ellipsize
用法如下:
在xml中
android:ellipsize = "end" 省略号在结尾
android:ellipsize = "start" 省略号在开头
android:ellipsize = "middle" 省略号在中间
android:ellipsize = "marquee" 跑马灯
最好加一个约束android:singleline = "true"
当然也可以用代码语句
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
最好再加一个约束tv.setSingleLine(true);
不仅对于textview有此属性,对于editext也有,不过它不支持marquee
SELECT * FROM tablename WHERE intent LIKE '%$%%' escape '$' 其中$可以是任何字符
这句话就是在tablename中搜索字段 intent 含有%字符的数据
NAME
sleep - delay for a specified amount of time
SYNOPSIS
sleep NUMBER[SUFFIX]...
sleep OPTION
DESCRIPTION
Pause for NUMBER seconds. SUFFIX may be `s' for seconds (the default), `m' for minutes, `h' for hours or
`d' for days. Unlike most implementations that require NUMBER be an integer, here NUMBER may be an arbi‐
trary floating point number. Given two or more arguments, pause for the amount of time specified by the
sum of their values.
eg: date;sleep 10s;date 先显示当前日期 暂停10秒钟,再显示日期 结果如下:
Thu Jun 11 17:35:03 CST 2015
Thu Jun 11 17:35:13 CST 2015
用到了悬浮按钮,报这个错误,Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@4129fe70 -- permission denied for this window type,原因是没有加权限。
在CameraService.cpp文件中,关于调用playsound()函数的地方加入如下判断:
注意:property_get()函数需要引入头文件,
eclipse提示框的背景颜色使用的是系统的提示框颜色配置,在windows下为黄色,但在Ubuntu12.04(gnome)下却是黑色,造成提示内容很难看清。在eclipse中我们是无法修改这个颜色的配置的,只能通过修改系统的颜色配置。在ubuntu11.10以前,我们是可以能过自定义系统外观来修改这一颜色的配置的,但自ubuntu11.10以后,就没有相关的操作界面了,只能通过修改配置文件的方式实现了。这个文件位于/usr/share/themes/下对应的主题文件夹下,如你使用Radiance主题,就进入到/usr/share/themes/Radiance/目录下,
cd /usr/share/themes/Radiance
打开gtk-2.0/gtkrc文件,
sudo vim gtk-2.0/gtkrc
修改第一行的tooltip_fg_color和tooltip_bg_color两个属性的值,如果没有改属性,可以自行添加,其值仿照windows的默认值,分别设定位:
tooltip_fg_color:#000000
tooltip_bg_color:#f2edbc
然后保存退出,打开系统外观配置,切换一下主题,当切换回来的时候,修改的效果就生效了。
应用场景:在一个app中的activity中通过包名、类名启动另外一个app中的activity 下例为在contacts中启动factoryMode中的activity
错误:01-01 08:04:09.009: W/System.err(771): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.mediatek.factorymode/.versionsdialog.InternalVersion } from ProcessRecord{e742bbe 3224:com.yunos.alicontacts/u0a1} (pid=3224, uid=10001) not exported from uid 1000
解决方案: 在目的activity中增加属性 android:exported="true"
@表示引用资源,声明这是一个资源引用—随后的文本是以@[package:]type/name形式提供的资源名。 vendor/mediatek/proprietary/external/EccList/ecc_list.xml XML属性 android.intent.category.ALTERNATIVE DEFAULT .doc application/msword 默认搜索引擎设为google Paint p = new Paint(); p.setTextSize(textSize) int markTextLen = (int)p.measureText(str); 1.MTK_CTA_SUPPORT=yes 如果在一个ListView上面放置一个可以接收焦点的东西,比如Button,当使用向上方向键滚动ListView到第一条后,焦点会移到上面的Button上,这个没问题。但然后使用向下的方向键时,焦点会跳到ListView中当前窗口的最下面一条,而不是焦点离开时的第一条。在ListView下方有Button的时候,向上移动焦点,也会出现类似的情况。 方法一:重写ListView OnFocusChanged()方法 方法二: 给listView增加属性 android:descendantFocusability="blocksDescendants" 1.把含有avc denied的log保存到一个文件中: avc.txt 2、使用命令 :audit2allow -i avc.txt 结果: [ 536.338759] init: avc: denied { set } for property=usb.config.test scontext=u:r:shell:s0 tcontext=u:object_r:default_prop:s0 tclass=property_service 命令: adb shell ps -Z 在scontext所指的te文件中加入类似如下内容: The program 'audit2allow' is currently not installed. You can install it by typing: 解决方案: 在Android.mk文件中修改LOCAL_AAPT_FLAGS, 举例:高通SnapdragonCamera include $(LOCAL_PATH)/version.mk version.mk代码如下: 调用方法: 其中initTime 为第一个时间点,也是通过System.currentTimeMillis()获取并保存 /*System.currentTimeMillis():Returns the current time in milliseconds since January 1, 1970 00:00:00.0 UTC.*/ 1. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行 2. 查看Android.mk文件,加入LOCAL_CERTIFICATE := 这一行,根据这行的内容,选择相应的签名。 代码路径:modem/proc/gps 外加导入相应的qcn文件 Index: api/gnss_api.h 1、修改文件 : frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java public final class ActivityManagerService extends ActivityManagerNative app.persistent = true; 2、通过在androidmanifest.xml中的application标签中加入android:persistent="true" 并且要把app放入 system/app目录下(需重启机器)
android:exported="true"
android:theme="@android:style/Theme.Dialog" />
Android Layout 中”@+id”、”@id”和”@android:id/”、”?android:attr”区别
@android:string表明引用的系统的(android.*)资源
@string表示引用应用内部资源
对于id, 可以用@+id表明创建一个id
?表示引用属性
“?”引用主题属性,当您使用这个标记,你所提供的资源名必须能够在主题属性中找到,因为资源工具认为这个资源属性是被期望得到的,您不需要明确的指出它的类型(?android:attr/android:textDisabledColor)紧急拨号列表
TextView属性大全
android:autoLink 是否自动链接网址或邮箱地址;
android:autoText 自动检测错误;
android:bufferType 决定getText()返回的类型
android:capitalize 指定使用类型
android:cursorVisible 光标是否可见
android:digits 数字输入
android:drawableBottom 内容显示在文字的下边
android:drawableEnd 内容显示在文字的结尾
android:drawableLeft 内容显示在文字的左边
android:drawablePadding 内容和文字之间的空隙
android:drawableRight 内容显示在文字的右边
android:drawableStart 内容显示在文字的开始
android:drawableTop 内容显示在文字的上边
android:editable 编辑功能,能够使用输入法
android:editorExtras 编辑功能扩展,用户设置
android:ellipsize 椭圆区域的显示方式
android:ems 可以在更多系统上运行
android:fontFamily 字体风格
android:freezesText 冻结在光标位置
android:gravity 文字小于显示范围时,x和y轴方向的调整
android:height 文字像素高度
android:hint 文本空白时的提示语
android:imeActionId 激活输入法ID序号
android:imeActionLabel 激活输入法符号
android:imeOptions 输入法操作
android:includeFontPadding 足够空间容纳字体显示
android:inputMethod 指定输入法
android:inputType 选择输入法
android:lineSpacingExtra 额外的文字间距
android:lineSpacingMultiplier 额外的文字间距,乘数
android:lines 多行显示
android:linksClickable 点击链接
android:marqueeRepeatLimit 跑马灯重复限制
android:maxEms 最大系统兼容
android:maxHeight 最大文本高度
android:maxLength 最大文本长度
android:maxLines 最大文本行数
android:maxWidth 最大文本长度
android:minEms 最小系统兼容
android:minHeight 最小文本高度
android:minLines 最小文本行数
android:minWidth 最小文本宽度
android:numeric 支持数字输入
android:password 文本作为密码
android:phoneNumber 支持电话号码输入
android:privateImeOptions 私人输入操作
android:selectAllOnFocus 点击全部选中
android:shadowColor 阴影颜色
android:shadowDx 阴影水平偏移
android:shadowDy 阴影垂直偏移
android:shadowRadius 阴影半径
android:singleLine 单行显示
android:text 显示文本
android:textAllCaps 文本全部大写
android:textAppearance 基本的文字颜色,字体,大小,风格
android:textColor 文本颜色
android:textColorHighlight 文本高亮颜色
android:textColorHint 文本提示颜色
android:textColorLink 链接文本颜色
android:textIsSelectable 文本能够被选中
android:textScaleX 水平缩放参数
android:textSize 文本大小
android:textStyle 文本风格
android:typeface 文本字体
android:width 文本宽度Android中Intent对应的category列表大全
android.intent.category.BROWSABLE
android.intent.category.DEFAULT
android.intent.category.DEVELOPMENT_PREFERENCE
android.intent.category.EMBED
android.intent.category.HOME
android.intent.category.INFO
android.intent.category.LAUNCHER
android.intent.category.MONKEY
android.intent.category.OPENABLE
android.intent.category.PREFERENCE
android.intent.category.SELECTED_ALTERNATIVE
android.intent.category.TAB
Android 2.0,2.0.1,2.1 新增车座和充电座
android.intent.category.CAR_DOCK
android.intent.category.DESK_DOCK
Android 2.2 新增行车模式
android.intent.category.CAR_MODE
ALTERNATIVE
你将在这章的后面所看到的,一个 Intent Filter 的用途是使用动作来帮忙填入上下文菜单。 ALTERNATIVE 种类指定,在某种数据类型的项目上可以替代默认执行的动作。例如,一个联系人的默认动作时浏览它,替代的可能是去编辑或删除它。
SELECTED_ALTERNATIVE
与 ALTERNATIVE 类似,但 ALTERNATIVE 总是使用下面所述的 Intent 解析来指向单一的动作。SELECTED_ALTERNATIVE在需要一个可能性列表时使用。
BROWSABLE
指定在浏览器中的动作。当 Intent 在浏览器中被引发,都会被指定成 BROWSABLE 种类。
设置这个种类来让组件成为 Intent Filter 中定义的 data 的默认动作。这对使用显式 Intent 启动的 Activity 来说也是必要的。
GADGET
通过设置 GADGET 种类,你可以指定这个 Activity 可以嵌入到其他的 Activity 来允许。
HOME
HOME Activity 是设备启动(登陆屏幕)时显示的第一个 Activity 。通过指定 Intent Filter 为 HOME 种类而不指定动作的话,你正在将其设为本地 home 画面的替代。
LAUNCHER
使用这个种类来让一个 Activity 作为应用程序的启动项。
data
data 标签允许你指定组件能作用的数据的匹配;如果你的组件能处理多个的话,你可以包含多个条件。你可以使用下面属性的任意组合来指定组件支持的数据
android:host
指定一个有效的主机名(例如, com.google )。
android:mimetype
允许你设定组件能处理的数据类型。例如,
android:path
有效地 URI 路径值(例如, /transport/boats/ )。
android:port
特定主机上的有效端口。
android:scheme
需要一个特殊的图示(例如, content 或 http )。常用的MIME类型
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.rtf application/rtf
.xls application/vnd.ms-excel application/x-excel
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.ppt application/vnd.ms-powerpoint
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.pps application/vnd.ms-powerpoint
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pdf application/pdf
.swf application/x-shockwave-flash
.dll application/x-msdownload
.exe application/octet-stream
.msi application/octet-stream
.chm application/octet-stream
.cab application/octet-stream
.ocx application/octet-stream
.rar application/octet-stream
.tar application/x-tar
.tgz application/x-compressed
.zip application/x-zip-compressed
.z application/x-compress
.wav audio/wav
.wma audio/x-ms-wma
.wmv video/x-ms-wmv
.mp3 .mp2 .mpe .mpeg .mpg audio/mpeg
.rm application/vnd.rn-realmedia
.mid .midi .rmi audio/mid
.bmp image/bmp
.gif image/gif
.png image/png
.tif .tiff image/tiff
.jpe .jpeg .jpg image/jpeg
.txt text/plain
.xml text/xml
.html text/html
.css text/css
.js text/javascript
.mht .mhtml message/rfc822默认搜索引擎的修改:
diff --git a/frameworks/base/services/core/java/com/mediatek/search/SearchEngineManagerService.java b/frameworks/base/se
index 0835085..f66dc55 100755
--- a/frameworks/base/services/core/java/com/mediatek/search/SearchEngineManagerService.java
+++ b/frameworks/base/services/core/java/com/mediatek/search/SearchEngineManagerService.java
@@ -167,9 +167,6 @@ public class SearchEngineManagerService extends ISearchEngineManagerService.Stub
if(SystemProperties.getBoolean("ro.coolpad",false)){
searchEngines = res.getStringArray(com.mediatek.internal.R.array.coolpad_new_search_engines);
}
- if(SystemProperties.getBoolean("ro.haier",false)){
- searchEngines = res.getStringArray(com.mediatek.internal.R.array.new_search_engines_haier);
- }
if (null == searchEngines || 1 >= searchEngines.length) {
// todo: throws an exception in this case.
diff --git a/vendor/mediatek/proprietary/frameworks/base/res/res/values/donottranslate-new-search_engines.xml b/vendor/m
index 5331a73..069df47 100755
--- a/vendor/mediatek/proprietary/frameworks/base/res/res/values/donottranslate-new-search_engines.xml
+++ b/vendor/mediatek/proprietary/frameworks/base/res/res/values/donottranslate-new-search_engines.xml
@@ -37,10 +37,4 @@
-
-
-
-
-
-
diff --git a/vendor/mediatek/proprietary/frameworks/base/res/res/values/symbols.xml b/vendor/mediatek/proprietary/framew
index e4ae534..ee07099 100755
--- a/vendor/mediatek/proprietary/frameworks/base/res/res/values/symbols.xml
+++ b/vendor/mediatek/proprietary/frameworks/base/res/res/values/symbols.xml
@@ -341,8 +341,7 @@
-
vendor/mediatek/proprietary/frameworks/base/res/res/values/donottranslate-new-search_engines.xml 完整示例:
动态获取文本在窗口中占用的长度
MTK平台送CTA注意事项
2.DM短信自注册关闭,关闭
mediatek/config/
dm.SmsRegState=0
3.号码识别11位
4.删除移动适配包(如下路径):
vendor/mediatek/
5.一定要打开user2root切换,最好使用mtk原始的工模指令,入库也一样;
6.权限管理默认开启;
7.发布eng版本。ListView焦点问题
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
if (gainFocus && previouslyFocusedRect != null) {
final ListAdapter adapter = getAdapter();
final int count = adapter.getCount();
switch (direction) {
case FOCUS_DOWN:
for (int i = 0; i < count; i++) {
if (!adapter.isEnabled(i)) {
continue;
}
setSelection(i);
break;
}
break;
case FOCUS_UP:
for (int i = count-1; i>=0; i--) {
if (!adapter.isEnabled(i)) {
continue;
}
setSelection(i);
break;
}
break;
default:
break;
}
}
}
如何根据 dmesg打出的avc denied log确认是缺少哪个权限?
#============= shell ==============
allow shell default_prop:property_service set; 即为在.te文件中需要添加的权限
[ 536.338794] init: sys_prop: permission denied uid:2000 name:usb.config.test
[ 546.763292] init: avc: denied { set } for property=usb.config.test scontext=u:r:shell:s0 tcontext=u:object_r:default_prop:s0 tclass=property_service
[ 546.763330] init: sys_prop: permission denied uid:2000 name:usb.config.test如何根据 dmesg打出的avc denied log确认是哪个te文件中修改
AVC:denied万能套用公式
scontext tcontext tclass avc denied的权限
allow adbd system_data_file:dir readaudit2allow 安装
apt-get install policycoreutilsUbuntu上SourceInsight突然关闭,重新打开,一直是失败,弹出对话框提示SourceInsight遇到严重问题,需要关闭
卸载后直接删除%HOME下source insight目录,然后重新安装就OK了。
其实只要删除%HOME/Soutce Insight/Settings下的所有文件,重新运行Source Insight即可。编译过程中动态改变app info(如version-code,version-name)
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--version-name "$(version_name_package)" \
--version-code $(version_code_package) \#
# Copyright (C) 2013 Google Inc.
#
# The version code scheme for the package apk is:
# Mmbbbtad
# where
# M - major version (one or more digits)
# m - minor version (exactly 1 digit)
# bbb - manually specified build number (exactly 3 digits)
# t - build type (exactly 1 digit). Current valid values are:
# 0 : eng build
# 1 : build server build
# a - device architecture (exactly 1 digit). Current valid values are:
# 0 : non-native
# 1 : armv5te
# 3 : armv7-a
# 5 : mips
# 7 : x86
# d - asset density (exactly 1 digit). Current valid values are:
# 0 : all densities
# 2 : mdpi
# 4 : hdpi
# 6 : xhdpi
# Mmbbb is specified manually. tad is automatically set during the build.
#
# For the client jar, the version code is agnostic to the target architecture and density: Mmbbbt00
#
# NOTE: arch needs to be more significant than density because x86 devices support running ARM
# code in emulation mode, so all x86 versions must be higher than all ARM versions to ensure
# we deliver true x86 code to those devices.
#
# HISTORY:
# 2.0.001 - Factory ROM and 0-day OTA 4.4 (KK)
# 2.0.002 - 4.4 MR1 system image
# Specify the following manually. Note that base_version_minor must be exactly 1 digit and
# base_version_build must be exactly 3 digits.
base_version_major := 2
base_version_minor := 0
base_version_build := 002
#####################################################
#####################################################
# Collect automatic version code parameters
ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
# This is an eng build
base_version_buildtype := 0
else
# This is a build server build
base_version_buildtype := 1
endif
ifeq "$(TARGET_ARCH)" "x86"
base_version_arch := 7
else ifeq "$(TARGET_ARCH)" "mips"
base_version_arch := 5
else ifeq "$(TARGET_ARCH)" "arm"
ifeq ($(TARGET_ARCH_VARIANT),armv5te)
base_version_arch := 1
else
base_version_arch := 3
endif
else
base_version_arch := 0
endif
ifeq "$(package_dpi)" "mdpi"
base_version_density := 2
else ifeq "$(package_dpi)" "hdpi"
base_version_density := 4
else ifeq "$(package_dpi)" "xhdpi"
base_version_density := 6
else
base_version_density := 0
endif
# Build the version code
version_code_package := $(base_version_major)$(base_version_minor)$(base_version_build)$(base_version_buildtype)$(base_version_arch)$(base_version_density)
# The version name scheme for the package apk is:
# - For eng build (t=0): M.m.bbb eng.$(USER)-hh
# - For build server (t=1): M.m.bbb (nnnnnn-hh)
# where nnnnnn is the build number from the build server (no zero-padding)
# On eng builds, the BUILD_NUMBER has the user and timestamp inline
ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
git_hash := $(shell git --git-dir $(LOCAL_PATH)/.git log -n 1 --pretty=format:%h)
date_string := $(shell date +%m%d%y_%H%M%S)
version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) (eng.$(USER).$(git_hash).$(date_string)-$(base_version_arch)$(base_version_density))
else
# version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER)-$(base_version_arch)$(base_version_density))
version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build)
endif
# Cleanup the locals
base_version_major :=
base_version_minor :=
base_version_build :=
base_version_buildtype :=
base_version_arch :=
base_version_density :=
git_hash :=
date_string :=
计算两个时间戳之间的差值(字串表示)
/**
* 提供计算两个时间的差值
*/
public class TimeUtils {
/*
*计算time2减去time1的差值 差值只设置 几天 几个小时 或 几分钟
* 根据差值返回多长之间前或多长时间后
* */
public static String getDistanceTime(long time1,long time2 ) {
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
long diff ;
String flag;
if(time1
String timeDistance = TimeUtils.getDistanceTime(initTime , System.currentTimeMillis());手动签名apk Signapk
platform----->platform.pk8和platform.x509.pem
shared ----->shared.pk8和shared.x509.pem
3. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,
首先找到密钥文件,在我的Android源码目录中的位置
是"build\target\product\security",下面的platform.pk8和platform.x509.pem
两个文件。
然后用Android提供的Signapk工具来签名,signapk的源代码是
在"build\tools\signapk"下,
用法为"java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk",
文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。高通ELNA GPS调试
===================================================================
--- api/gnss_api.h (revision XX)
+++ api/gnss_api.h (revision XX)
#define N_MAX_GLO_FREQ (14)
-#define C_GNSS_RF_ELNA_GPIO_NUM_DEFAULT 255
+#define C_GNSS_RF_ELNA_GPIO_NUM_DEFAULT 116
#define C_PMIC_NPA_MODE_ID_RF_MODE_DEFAULT 255
#define C_NAVRF_NPA_RESOURCE_NAME_DEFAULT "UNINITIALIZED"
#define C_NAVRF_MAX_NPA_RESOURCE_NAME_LEN_DEFAULT 40
Index: gnss/mgp/me/gen8/src/cgps_ext.c
===================================================================
--- gnss/mgp/me/gen8/src/cgps_ext.c (revision XX)
+++ gnss/mgp/me/gen8/src/cgps_ext.c (revision XX)
@@ -471,7 +471,7 @@
/* Customer needs to change this variable in order to override NAVRF driver ELNA setting */
gnss_ExternalGNSSConfigStruct gnssz_ExtElnaCfg =
-{ GNSS_RF_DEFAULT_CFG, C_GNSS_RF_ELNA_GPIO_NUM_DEFAULT, NULL, C_NAVRF_NPA_RESOURCE_NAME_DEFAULT, C_PMIC_NPA_MODE_ID_RF_MODE_DEFAULT};
+{ GNSS_RF_HAS_ELNA, C_GNSS_RF_ELNA_GPIO_NUM_DEFAULT, NULL, C_NAVRF_NPA_RESOURCE_NAME_DEFAULT, C_PMIC_NPA_MODE_ID_RF_MODE_DEFAULT}; 如何修改代码避免app被android LMK杀死
app.maxAdj = ProcessList.PERSISTENT_PROC_ADJ;
}
+ if("com.xxx.xxx".equals(info.packageName)){
+ app.persistent = true; // 判断包名,修改这个属性值即可
+ app.maxAdj = ProcessList.SYSTEM_ADJ;
+ }