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