androiddefault
‘壹’ 什么时候加上android.intent.category.DEFAULT
android.intent.category.DEFAULT主要是用在主程序的入口上,比如默认的登陆的界面,就需要配置这个属性。
‘贰’ android-23 default可否删除
一、出现的情况
在eclipse或 android studio开发,
设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http等等,会出现有一些类找不到的错误。
二、原因
android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类).
三、解决方法
1.eclipse:
libs中加入
org.apache.http.legacy.jar
上面的jar包在:**\android-sdk-windows\platforms\android-23\optional下(需要下载android 6.0的SDK)
2.android studio:
在相应的mole下的build.gradle中加入:
android {
useLibrary 'org.apache.http.legacy'
}注意放置的位置:是在android {}中
‘叁’ Android Resource(default)
你点一下 左下角这个就出现源代码了
你这个报错,你升级一下SDK的supper包吧
‘肆’ android初始化控件是什么意思
第一种是全局的,比如你oncreate里初始化了,onresume里也可以用;
第二种是局部变量,比如你在Oncreate里初始化了,只能在Oncreate里用,到onresume里就不能使用了。
第一种不加private也可以,至于加不加,取决于
(1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
(2)对于protected修饰符,它主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。
(3)对于default来说,有点的时候也成为friendly(友员),它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
(4)对于private来说,它的访问权限仅限于类的内部,是一种封装的体现,例如,大多数的成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。
‘伍’ android default.prop 怎么生成的
1.bionic/libc/include/sys/_system_properties.h[cpp]viewplain#definePROP_SERVICE_NAME"property_service"#definePROP_PATH_RAMDISK_DEFAULT"/default.prop"#definePROP_PATH_SYSTEM_BUILD"/system/build.prop"#definePROP_PATH_SYSTEM_DEFAULT"/system/default.prop"#definePROP_PATH_LOCAL_OVERRIDE"/data/local.prop"2.后者则通过frameworks/base/core/java/Android/os/SystemProperties.java的接口定义,[java]_get(Stringkey);_get(Stringkey,Stringdef);privatestaticnativevoidnative_set(Stringkey,Stringdef);publicstaticvoidset(Stringkey,Stringval){
‘陆’ Android defaultHttpClient().execute(request)报IO异常,求解决
androidmenifest.xml中配置
<manifest>
……
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
这样才能够访问网络,就不会出现io异常了
‘柒’ 手机里的default是什么意思
default在手机里是默认的意思。
其表示,手机的默认情况,即在未被更改时优先或第一次出现的情况。
例如:
默认参数(default parameters):指的是当函数调用中省略了实参时自动使用的一个值。
默认路径(default path):指文件存储在计算机中未指定路径时自动使用的统一路径。
默认设置(default settings):指在没有手动更改或设置程序之前最初始的设置状态。
(7)androiddefault扩展阅读:
Android 应用默认安装路径
应用安装涉及到如下几个目录:
1、system/app
系统自带的应用程序,无法删除
2、data/app
用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录
3、data/data
存放应用程序的数据
4、Data/dalvik-cache
将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)
‘捌’ 什么时候加上android.intent.category.DEFAULT和LAUNCHER
1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。
Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码:
Intent intent= new Intent(this, B.class)
Implicit Intent没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。
2、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。
理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。
例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题。
我们定义的activity如果接受implicit intent的话,intent filer就一定要加上android.intent.category.DEFAULT这个category。
来自另一篇文章的解释:
在写 AndroidManifest.xml 的时候,一直没有搞明白,什么时候要给 Activityandroid.intent.category.DEFAULT 过滤器,现在才明白。
--------------------------------------------------------------------------------
Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters
--------------------------------------------------------------------------------
意思是说,每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。
从上面的论述还可以获得以下信息:
1、一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。
2、只有 Intent 的所有 category 都匹配上,Activity 才会接收这个 Intent。
‘玖’ 如何禁止android默认编译选项
为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。
Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹
proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。
在
工程的"default.properties"中添加这样一句话“proguard.config=proguard.cfg”打包签名后的.apk就
是混淆的,其实我们只要做一步就可以了就是在"default.properties"中添加这样一句话
“proguard.config=proguard.cfg”就可以了。
如果想要更加复杂地混淆代码,可以详细地对该文件进行配置.
由
于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。完全避免是不可能的,总有人能够破解你的代码。但是
有几种方式来提高被反编译取代码的难度:1 关键代码使用jni调用本地代码,用c或者c++编写,因此相对比较难于反编译
2 混淆java代码。混淆是不改变代码逻辑的情况下,增加无用代码,或者重命名,使反编译后的源代码难于看懂。 网上开源的java代码混淆工具较多,一般是用ant的方式来编译的android 混淆文件proguard.cfg详解:
-injars androidtest.jar【jar包所在地址】 -outjars out【输出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】
-optimizationpasses 5-
dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】-
【指定不去忽略非公共的库类。 】-dontpreverify 【不预校验】
-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】
-keep public class * extends android.app.Activity
【不进行混淆保持原样】-keep public class * extends android.app.Application-
keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{public protected <methods>; 【所
有方法不进行混淆】}-
keep public class com.asqw.android{public void Start(java.lang.String); 【对
该方法不进行混淆】}
-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】
native <methods>;}
-keepclasseswithmembers class * { 【保
护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】public <init>
(android.content.Context, android.util.AttributeSet);}
-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet, int);}
-keepclassmembers class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】public void *(android.view.View);}
-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}
-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】public static final android.os.Parcelable$Creator *;}
‘拾’ 怎么让android软件成为 default sms 源码
1、launcher的布局太居中,要想两边拉伸
<\packages\apps\Launcher2\res\values\dimens.xml>
<dimen name=" apps_customize_pageLayoutPaddingLeft">40dp</dimen>
<dimen name=" apps_customize_pageLayoutPaddingRight">40dp</dimen>
apps tab栏的宽度( Launcher2 icon 数目、大小)
\packages\apps\Launcher2\res\layout-sw720dp\workspace.xml>
launcher:cellCountX="10"
launcher:cellCountY="6"
2、或者不想改数目:
<\packages\apps\Launcher2\src\com\android\launcher2\AppsCustomizeTabHost.java>
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mTabs.getLayoutParams().width = contentWidth + 108;
3、workspace、AppsCustomize的cell大小:
<\packages\apps\Launcher2\res\values-sw600dp\dimens.xml>
<dimen name="workspace_cell_width">110dip</dimen>
<dimen name="workspace_cell_height">110dip</dimen>
<dimen name="apps_customize_cell_width">110dp</dimen>
<dimen name="apps_customize_cell_height">110dp</dimen>
4、里面icon的大小:
<\packages\apps\Launcher2\res\values-sw600dp\dimens.xml>
<dimen name="app_icon_size">80dp</dimen>
5、workspace没有拖动,第二页第一个icon出现在第一页的最右边:
加大workspace的宽度,或间距:
workspace的paddingLeft、paddingRight:
<\packages\apps\Launcher2\res\values-sw600dp-land\dimens.xml>
<dimen name="workspace_left_padding">50dip</dimen>
<dimen name="workspace_right_padding">50dip</dimen>
workspace两屏间距:
<dimen name="workspace_page_spacing">100dp</dimen>
修改workspace的字体大小:
如果没有就添加:
<\packages\apps\Launcher2\res\values-sw480dp\styles.xml>
<style name="WorkspaceIcon.Landscape">
<item name="android:textSize">13sp</item>
</style>
6、加wallpaper:
1.<\packages\apps\Launcher2\res\values-sw600dp\wallpapers.xml>
加wallpaper的名字
2.<\packages\apps\Launcher2\res\drawable-nodpi>
加如wallpaper
7、gallery的widget默认添加到workspace上:
<\packages\apps\Launcher2\res\xml\default_workspace.xml>
<!-- Middle screen [2] -->
<appwidget
launcher:packageName="com.android.gallery3d"
launcher:className="com.android.gallery3d.gadget.PhotoAppWidgetProvider"
launcher:screen="2"
launcher:x="1"
launcher:y="0"
launcher:spanX="3"
launcher:spanY="3" />
<\packages\apps\Gallery2\src\com\android\gallery3d\gadget\PhotoAppWidgetProvider.java>
@Override
public void onUpdate(Context context,
for (int id : appWidgetIds) {
if(id == 2){
helper.setWidget(id,WidgetDatabaseHelper.TYPE_SHUFFLE, null);
}
}
8、在桌面上添加网页的快捷方式:
<\packages\apps\Launcher2\res\xml\default_workspace.xml>
<shortcut
launcher:title="@string/application_name"
launcher:icon="@drawable/ic_no_applications"
launcher:uri="http://www.aaa.com"
launcher:screen="0"
launcher:x="0"
launcher:y="3" />
9、在桌面上默认放文件夹:
<\packages\apps\Launcher2\res\xml\default_workspace.xml>
<folder
launcher:screen="2"
launcher:x="2"
launcher:y="2"
launcher:title = "@string/application_name" >
<favorite
launcher:className="com.android.deskclock.DeskClock"
launcher:packageName="com.android.deskclock"
launcher:container="1"
launcher:x="0"
launcher:y="0" />
<favorite
launcher:className="com.android.calculator2.Calculator"
launcher:packageName="com.android.calculator2"
launcher:container="1"
launcher:x="0"
launcher:y="0" />
</folder>
10、桌面上添加快捷方式,点击播放视频:
<\packages\apps\Launcher2\res\xml-sw720dp\default_workspace.xml>
<shortcut launcher:title="@string/application_name"
launcher:icon="@drawable/ic_launcher_application"
launcher:uri="file:///mnt/sdcard/external_sdcard/1...playermenu;end"
launcher:screen="2"
launcher:x="1"
launcher:y="1" />
11、安装apk,显示隐藏的google play:
1.写google显示的apk:
GooglePlayShow的activity:
ComponentName componentname = new ComponentName("com.android.vending", "com.android.vending.AssetBrowserActivity");
packagemanager.setComponentEnabledSetting(componentname, 1, 1);
componentname = new ComponentName("com.example.googleplayshow", "com.example.googleplayshow.MainActivity");
packagemanager.setComponentEnabledSetting(componentname, 2, 1);
2.<\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>
} else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
if (!replacing) {
if(packageName.equals("com.example.googleplayshow")){
context.startActivity(new Intent().setComponent(new ComponentName("com.example.googleplayshow", "com.example.googleplayshow.MainActivity")).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
op = PackageUpdatedTask.OP_ADD;
} else {
op = PackageUpdatedTask.OP_UPDATE;
}
}
隐藏google search:
<\packages\apps\Launcher2\src\com\android\launcher2\Launcher.java>
private void setupViews() {
mSearchDropTargetBar = (SearchDropTargetBar) mDragLayer.findViewById(R.id.qsb_bar);
mSearchDropTargetBar.hideSearchBar(false);
void showWorkspace(boolean animated, Runnable onCompleteRunnable) {
//mSearchDropTargetBar.showSearchBar(wasInSpringLoadedMode);
12、widget中隐藏google play:
<\packages\apps\Launcher2\src\com\android\launcher2\AppsCustomizePagedView.java>
updatePackages里面添加:
if(!widget.provider.getPackageName().equals("com.android.vending") && !widget.provider.getPackageName().equals("com.android.vending.MarketWidgetProvider")){
mWidgets.add(widget);
}
13、clock的widget下部分显示不全,向上调
<\packages\amlogic\Launcher2\res\values\dimens.xml>
<dimen name="app_widget_preview_padding_top">10dp</dimen>
修改widget的text的size:
<\packages\amlogic\Launcher2\res\layout\apps_customize_widget.xml>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_name"
android:textSize="20sp" />
14、launcher中隐藏一个app:
需要该app的packageName,例如要隐藏settings:
<\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>
private void loadAllAppsByBatch() {
apps = packageManager.queryIntentActivities(mainIntent, 0);
ResolveInfo removeApp = null;
for(ResolveInfo info:apps){
if(info.activityInfo.packageName.equals("com.android.settings")){
removeApp = info;
}
}
if(removeApp != null){
apps.remove(removeApp);
}
15、launcher中隐藏多个app: 红色为改动部分
<\packages\apps\Launcher2\src\com\android\launcher2\LauncherModel.java>
private void loadAllAppsByBatch() {
final PackageManager packageManager = mContext.getPackageManager();
List<ResolveInfo> apps = new ArrayList<ResolveInfo>();
List<ResolveInfo> allApps = null;
int N = Integer.MAX_VALUE;
int startIndex;
int i=0;
int batchSize = -1;
while (i < N && !mStopped) {
if (i == 0) {
mAllAppsList.clear();
final long qiaTime = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0;
allApps = packageManager.queryIntentActivities(mainIntent, 0);
for(ResolveInfo info : allApps){
if(info.activityInfo != null
&& !info.activityInfo.packageName.equalsIgnoreCase("com.android.email")
&& !info.activity