小编Sni*_*las的帖子

如何使用新的Android Multidex支持库启用多索引

我想使用新的Multidex支持库来打破我的某个应用程序的方法限制.

借助Android Lollipop,Google推出了一个multidex支持库,可以轻松实现多索引.

使用此库需要哪些步骤以及使用multidex支持构建我的应用程序?

android gradle android-multidex

132
推荐指数
6
解决办法
19万
查看次数

Android视图生命周期(状态图)是否有任何图形表示?

我们都知道Android Activity的生命周期Fragment的生命周期.但是有没有相同的观点?

例如,这可以帮助构建自定义视图或深入了解Android上非常常见且经常隐藏的图形操作.

提前致谢 !

lifecycle android view representation

74
推荐指数
2
解决办法
3万
查看次数

没有在路径上找到类"android.support.multidex.MultiDexApplication":DexPathList

我正在我的应用程序上尝试新的MultiDex支持,到目前为止我已经设法正确编译我的应用程序,但在运行它时,我得到以下异常:

java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
    at android.app.ActivityThread.access$1500(ActivityThread.java:139)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5086)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.Instrumentation.newApplication(Instrumentation.java:998)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
Run Code Online (Sandbox Code Playgroud)

这是我的gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion …
Run Code Online (Sandbox Code Playgroud)

android gradle dex android-multidex

50
推荐指数
6
解决办法
5万
查看次数

覆盖图像以在Android应用程序中制作教程

在许多应用程序中,我看到有一个欢迎屏幕或教程,通过在活动之上叠加解释来解释应用程序的工作原理.例如,在Android本身,欢迎屏幕"让自己回家".

我想知道可以使用哪些技术.

编辑:"让自己回家吧"的截图 在此输入图像描述 在此输入图像描述

android overlay showcaseview

31
推荐指数
2
解决办法
2万
查看次数

如何编写genymotion模拟器脚本来启动给定的avd,无头?

是否有任何方法可以通过命令行启动并通过命令avd注册adb

我也希望让模拟器无头启动.

我正在寻找这个快速运行测试.

command-line android genymotion

29
推荐指数
2
解决办法
2万
查看次数

Android加载器,要走的路?

我习惯使用适配器在android中构建列表.如果我需要一些长期获取的数据,我使用asynctask或简单的runnable来更新适配器所依赖的数据结构,并在适配器上调用notifyDataChanged.

虽然它并不简单,但我终于发现这是一个简单的模型,它允许逻辑表示(在asynctask中,更新数据结构)和视图(主要用作视图工厂的适配器)的良好分离.

不过,我最近读到了关于HoneyComb中引入的加载器并包含在向后兼容性支持库中,我尝试了它们并发现引入了很多复杂性.它们很难处理并通过装载程序管理器为整个过程添加某种魔力,添加大量代码并且不减少类或协作项目的数量,但我可能错了,并希望听到一些关于装载机.

  • 在代码行,清晰度和工作量方面,它们在加载器方面有哪些优势?
  • 在数据加载过程中角色分离方面,或者更广泛地说,在设计方面,加载程序的优势是什么?
  • 它们是要走的路,我应该替换所有列表数据加载以通过加载器实现它们吗?

好的,这是一个开发者论坛,所以这是一个例子.请用装载机做得更好:

package com.sof.test.loader;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.TextView;

/** The activity. */
public class LoaderTestActivity extends ListActivity {

    private DataSourceOrDomainModel dataSourceOrDomainModel = new DataSourceOrDomainModel();
    private List<Person> listPerson;
    private PersonListAdapter personListAdapter;
    private TextView emptyView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listPerson = new ArrayList<Person>();
        personListAdapter = new PersonListAdapter( listPerson ); …
Run Code Online (Sandbox Code Playgroud)

android list android-3.0-honeycomb android-4.0-ice-cream-sandwich

26
推荐指数
2
解决办法
7511
查看次数

TargetApi没有考虑在内

在我们的一个方法中,我们在列表视图中使用smoothScrolling.由于此方法在API Level 8(FROYO)之前不可用,因此我们使用TargetApi注释来防止在以前的SDK版本中调用该方法.

如您所见,我们在类定义和使用类对象的语句中使用TargetApi注释.这不仅仅是需要的.

我们的问题是没有考虑TargetApi注释并使我们的模拟器在版本ECLAIR(SDK 7)中崩溃.通过跟踪,我们只是意识到应该只在版本8+中执行的代码也在版本7中执行.

我们错过了什么吗?

这段代码在听众中:

@TargetApi(8)
private final class MyOnMenuExpandListener implements OnMenuExpandListener {
    @Override
    public void onMenuExpanded( int position ) {
        doScrollIfNeeded( position );
    }

    @Override
    public void onMenuCollapsed( int position ) {
        doScrollIfNeeded( position );
    }

    protected void doScrollIfNeeded( int position ) {
        if ( mListViewDocuments.getLastVisiblePosition() - 2 < position ) {
            mListViewDocuments.smoothScrollToPosition( position + 1 );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且监听器以这种方式注册:

@TargetApi(8)
private void allowSmothScrollIfSupported() {
    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO ) {
        //This …
Run Code Online (Sandbox Code Playgroud)

android annotations emulation

24
推荐指数
2
解决办法
1万
查看次数

MultiDexApplication无法识别

尝试在我的应用程序中使用MultiDexApplication,但是当我尝试使用它扩展应用程序活动时,无法识别该类.

这是我的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion '21.0.1'
    defaultConfig {
        applicationId 'com.myapp'
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 115
        versionName '4.8'
    }

    buildTypes {
        debug {
            debuggable true
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            debuggable false
            runProguard true
            zipAlign true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    lintOptions {
        checkReleaseBuilds false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.google.android.gms:play-services:6.1.11'

    compile 'com.android.support:appcompat-v7:21.0.0'

    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    compile project(':facebook')
} …
Run Code Online (Sandbox Code Playgroud)

android gradle android-multidex

21
推荐指数
2
解决办法
2万
查看次数

意图仅过滤文件

在我们的应用中,我们希望出现在"分享通过"菜单中.所以我们在我们的活动中添加了这个intent-filter:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

它工作正常,我们的应用程序出现在共享菜单中.

然而,意图过滤器并不完全符合我们想要的目标:

  1. 我们希望出现在所有文件的菜单中,无论mime类型是什么
  2. 我们只想出现在文件中.到目前为止,如果用户想要共享一个简单的文本,因为它的mime类型将是text/plain,我们的应用程序出现在菜单中,我们不想要它.

对于所有文件和仅文件,正确的intent-filter会是什么?

提前致谢.


我们尝试添加scheme = file和host =""或"*",并且它不起作用,因为许多app使用scheme = content来共享基于文件的内容.

android share intentfilter

12
推荐指数
1
解决办法
3219
查看次数

ORMLite重置所有表

我有一个使用ORMLite的应用程序.我需要创建一个函数来重置整个数据库(基本上我需要删除每个数据库中的所有行,重置自动增量和重置索引).

我可能可以通过在每个表上启动截断来实现这一点,但ORMLite是否有一些特定的方法来执行此操作?

android ormlite

11
推荐指数
1
解决办法
1万
查看次数