小编bjo*_*ncs的帖子

Android Studio和Gradle - 构建失败

我正在建立一个小型图书馆项目以及一个示例项目来说明其用途.我无法在Android Studio中运行该示例.我从头开始创建项目.我对Eclipse很有经验,但这是我第一次尝试使用Android Studio和Gradle.

给出的错误:

Gradle:任务':demo:dexDebug'的执行失败.

运行C:\ DevTools\Android\android-studio\sdk\build-tools\android-4.2.2\dx.bat失败.见输出

我有以下文件夹结构:

- demo
  - build
  - libs
    - android-support-v4.jar
  - src
    - main
      - java
      - res
  - build.gradle
- library
  - build
  - libs
    - android-support-v4.jar
  - src
    - main
      - java
      - res
  - build.gradle
- build.gradle
- settings.gradle
Run Code Online (Sandbox Code Playgroud)

项目根目录下的Build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
Run Code Online (Sandbox Code Playgroud)

项目根目录下的Settings.gradle:

include ':library', ':demo'
Run Code Online (Sandbox Code Playgroud)

库模块的Build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
} …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio android-gradle-plugin

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

Fragment实例中带有Otto事件总线的IllegalArgumentException

我正在使用Otto Event总线订阅ListFragment中的某些事件.总线实例在Application的子类中存储和创建,换句话说,它应该作为单例工作.看来这不是一个案例......

该片段正在注册到总线onActivityCreated(Bundle)并取消注册onDestroy().这不起作用.我从调用应用程序崩溃的设备获得了几个崩溃报告unregister()(java.lang.IllegalArgumentException:缺少注释方法的事件处理程序......).如果unregister()在调用register()之前调用,或者unregister()调用两次,则抛出此异常.这可能只发生在......

  • onActivityCreated(Bundle)之前没有打过电话onDestroy().
  • onDestroy() 被叫两次.
  • Application实例调用之间重建onActivityCreated(Bundle)onDestroy().

我的应用类:

public class App extends Application {

    private static App sInstance;

    private Bus bus;

    public static App getInstance() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
        bus = new Bus(ThreadEnforcer.ANY);
    }

    public Bus getEventBus() {
        return bus;
    }

}
Run Code Online (Sandbox Code Playgroud)

Fragment类:

public class MyFragment extends ListFragment {

    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-fragments otto fragment-lifecycle

13
推荐指数
1
解决办法
9166
查看次数

在Android Studio中对Java子项目运行单元测试

我无法在Android Studio中的Gradle子项目上运行任何JUnit测试.这个项目不以任何方式依赖Android,它只使用Java Gradle插件.

Android Gradle项目具有以下文件夹结构:

  • settings.gradle
  • 应用程序/的build.gradle
  • 后端/的build.gradle

settings.gradle列出了两个子项目:

include ':app', ':backend'
Run Code Online (Sandbox Code Playgroud)

应用程序文件夹中包含一个Android项目.它的build.gradle文件如下所示:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.6'
    }
}
apply plugin: 'android'
android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"
}
dependencies {
    compile project(':backend')
}
Run Code Online (Sandbox Code Playgroud)

后端文件夹中包含一个普通的Java摇篮项目,该项目的应用程序依赖于.它的build.gradle文件如下所示:

apply plugin: 'java'
repositories {
    mavenCentral()
}
dependencies {
    testCompile 'junit:junit:4.11'
}
Run Code Online (Sandbox Code Playgroud)

后端项目有几个单元测试位于src/test/java/... 当我尝试执行其中任何一个时,我得到一个错误,说明Android Studio无法找到测试类:

Class not found: "com.test.DummyTest"
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

gradle test按预期执行工作.是否有任何我错过的配置,或者单元测试是否完全无法在Android Studio中运行?

junit gradle android-studio android-gradle-plugin

8
推荐指数
1
解决办法
2571
查看次数

使用Proguard和汇编插件的Maven

我正在尝试使用以下配置的Maven:

  1. 使用maven-assembly-plugin构建一个包含所有依赖项的单个JAR(程序集:单个).
  2. 之后使用Proguard插件从包含的库中删除所有不必要的类.

我需要proguard来缩小依赖项的大小.我正在使用的OpenIMAJ库是巨大的(100MB),我只需要它的一小部分.

问题是我当前的Maven配置以相反的顺序运行插件 - Proguard首先运行并构建一个没有依赖项的JAR.

我的pom.xml的插件部分:

<plugins>
    <plugin>
        <groupId>com.github.wvengen</groupId>
        <artifactId>proguard-maven-plugin</artifactId>
        <version>2.0.6</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals><goal>proguard</goal></goals>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>net.sf.proguard</groupId>
                <artifactId>proguard-base</artifactId>
                <version>4.9</version>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
        <configuration>
            <proguardVersion>4.9</proguardVersion>
            <options>
                <option>-verbose</option>
                <option>-dontobfuscate</option>
                <option>-dontoptimize</option>
                <option>-keep class org.apache.** { *; }</option>
                <option>-keep class no.** { *; }</option>
            </options>
            <libs>
                <lib>${java.home}/lib/rt.jar</lib>
                <lib>${java.home}/lib/jsse.jar</lib>
            </libs>
        </configuration>

    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>fully.qualified.MainClass</mainClass>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id> <!-- this is used …
Run Code Online (Sandbox Code Playgroud)

proguard maven maven-assembly-plugin openimaj

7
推荐指数
1
解决办法
2125
查看次数

在片段中使用FragmentPagerAdapter

我在一些Android代码中做了一些重构,我在一个直接连接到Activity的视图中使用FragmentPagerAdapter和ViewPager.然后,FragmentPageAdapter从Activity移动到separat Fragment(现在是该活动的子代),作为重构的一部分.

这种变化并不顺利.例如,在方向更改后,缓存的选项卡会消失.NullPointerExceptions在我的Fragment子类中被抛出,因为findViewById无法找到它的View组件(看起来像片段的View层次结构在旋转更改后以某种方式被破坏).

我使用的是最新版本的Android支持库.

什么出错的想法?

编辑:

我目前的实施:

public class TabsPageAdapter extends FragmentPagerAdapter {

    ...

    @Override
    public Fragment getItem(int index) {
        // tabs = list of Fragment instances created in contructor of pager adapter - bad habbit?
        return tabs.get(index).getTabFragment();
    }

    ...

}


public class StatsFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.stats_view, container, false);

        TabsPageAdapter adapter = new TabsPageAdapter(getActivity().getSupportFragmentManager(), getActivity());
        ViewPager viewPager = (ViewPager) root.findViewById(R.id.tabPager);
        viewPager.setAdapter(adapter);
        viewPager.setOffscreenPageLimit(3);
        TabPageIndicator pageIndicator = (TabPageIndicator) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-support-library

5
推荐指数
1
解决办法
6484
查看次数