小编Dmi*_*sov的帖子

Android Gradle构建和循​​环依赖

我在IntelliJ IDEA中有一个Android项目.它由两个模块组成:app和library.应用程序依赖于库和库依赖于应用程序(是的,它不好,但我有我拥有的,不能改变这个).项目设置中的IDEA警告我循环依赖,但项目正确构建.项目结构如下所示:

project
|__app
|    |__src
|    |__build.gradle
|__libarary
|    |__src
|    |__build.gradle
|__build.gradle
|__settings.gradle
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试迁移到基于Gradle的新Android构建系统,并在这里遇到麻烦.在我的build.gradlefrom app模块中,我添加依赖library

compile project(":library")
Run Code Online (Sandbox Code Playgroud)

另外我tryed添加在依赖libraryapp

compile project(":app")
Run Code Online (Sandbox Code Playgroud)

但是当gradle试图组装库模块时,从构建系统中获取错误:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Failed to notify project evaluation listener.
   > Module version project:app:unspecified depends on libraries but is not a library itself
Run Code Online (Sandbox Code Playgroud)

在不改变项目结构的情况下,我可以做些什么

android build circular-dependency dependency-management gradle

9
推荐指数
1
解决办法
4561
查看次数

LibGDX中的表中的LinearLayout模拟

我想使用带有以下布局的scene2d包在LibGDX中创建一个游戏菜单屏幕

|    label    |
| btn btn btn |
|    label    |
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

Table table = getTable();
table.add(label1);
table.row();
table.add(button1);
table.add(button2);
table.add(button3);
table.row();
table.add(label2);
table.row();
Run Code Online (Sandbox Code Playgroud)

但不是我想要的,我得到这样的东西:

| label       |
| btn btn btn |
| label       |
Run Code Online (Sandbox Code Playgroud)

原因是因为每个table.add()方法调用都会创建一个新的单元格.但我想将所有3个按钮放在一个单元格内.我怎样才能达到预期的效果,可能在LibGDX中存在类似的东西LinearLayout或其他什么?

layout android libgdx scene2d

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

LibGDX中元素之间的边距和填充

我有一个VerticalGroupButton是我的屏幕上.问题是按钮非常靠近一对一.我想在按钮之间添加一些空格,比如填充或边距.我在API中找到了pad方法Table,但VerticalGroup没有扩展Table,因此不包含此方法.请指出我如何在内部按钮之间添加一些间距VerticalGroup

示例代码

VerticalGroup buttons = new VerticalGroup();
buttons.addActor(btn1);
buttons.addActor(bnt2);
// ... and so on
Run Code Online (Sandbox Code Playgroud)

layout android libgdx

6
推荐指数
3
解决办法
7242
查看次数

模型类文件代码生成Java,C#和Objective-C

我们在Android,iPhone和Windows Phone上有一个服务器(Java + Spring)和客户端项目.所有交互都将通过JSON格式实现.我们只想描述我们的协议一次,而不是通过此描述为所有客户端生成Java,C#和Obj-C类.我们正在寻找一种工具,比如Google ProtoBuf编译器(protoc).但是ProtoBuf生成了太复杂的代码,在这种情况下对我们来说没用,因为我们想要使用JSON而不是二进制序列化.有任何现成的解决方案吗?

c# java code-generation objective-c mdd

5
推荐指数
0
解决办法
332
查看次数

android-maven-plugin和资源过滤

我是maven的新手并试图配置它用android-maven-plugin构建我的android项目.我在assets目录中有一个application.properties文件,其中包含不同的应用程序设置.我想从我的pom中获取这些价值.在属性文件中,我将一个属性定义为

myFilteredProperty=${helloFromPOM}
Run Code Online (Sandbox Code Playgroud)

并在POM中定义相同的属性:

    <properties>
        <helloFromPOM>MY PROPERTY</helloFromPOM>
    </properties>
Run Code Online (Sandbox Code Playgroud)

切换资产dir上的过滤

<build>
    ...
    <resources>
        <resource>
            <directory>${project.basedir}/assets</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    ...
</build>
Run Code Online (Sandbox Code Playgroud)

并为android-maven-plugin的示例配置recources 插件

        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>resources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但是当我试图在我的应用程序中使用此属性显示Toast时,我看到$ {helloFromPOM}而不是MY PROPERTY.

在我的maven生成的目标目录中,我在两个地方看到这个属性文件:

  • /target/generated-sources/combined-assets/assets/application.properties
  • /target/myapp-0.0.1-SNAPSHOT.apk\application.properties

首先是错误的,它包含$ {helloFromPOM}而不是MY PROPERTY.其次,apk文件内部是正确的.但是当我在设备上安装这个apk时,它显示错误的值$ {helloFromPOM}.

我做错了什么?

编辑

谢谢你的回答,我尝试了,但得到这个错误:

[ERROR]生成源时出错.org.apache.maven.plugin.MojoExecutionException:在com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:338)在com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.execute( GenerateSourcesMojo.java:102)在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)在org.apache .maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder .buildProject(LifecycleModuleBuilder.java:84)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)在org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183 )org.apache.maven.lifecycle.internal.LifecycleS tarter.execute(LifecycleStarter.java:161)org.apache.maven.maven.DefaultMaven.doExecute(DefaultMaven.java:320)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)atg.apache.maven .cli.MavenCli.execute(MavenCli.java:537)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)org.apache.maven.cli.MavenCli.main(MavenCli.java:141 )在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在java.lang.reflect中.方法.invoke(Method.java:597)org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java: 230)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)org.codehaus.classworlds .Launche r.main(Launcher.java:47)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25)at java.lang.reflect.Method.invoke(Method.java:597)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)引起:com.jayway.maven.plugins .android.ExecutionException:ANDROID-040-001:无法执行:Command = cmd.exe/X/C""C:\ Program Files\Android\android-sdk\platform-tools\aapt.exe"package -m - JD:\ projects\myapp\target\generated-sources\r -MD:\ projects\myapp\AndroidManifest.xml -SD:\ projects\myapp\target\filtered-assets --auto-add-overlay -AD:\ projects\myapp\assets -I"C:\ Program Files\Android\android-sdk\platforms\android-8\android.jar"",结果= 1在com.jayway.maven.plugins.android.CommandExecutor …

android maven maven-resources-plugin android-maven-plugin

4
推荐指数
1
解决办法
8199
查看次数

Roboguice注入适配器

我有一个适配器,它扩展ArrayAdapter<T>并想要注入它们LayoutInflater.代码如下所示,但inflater始终如此null

public abstract class MyAdapter<T> extends ArrayAdapter<T> {

    @Inject
    protected LayoutInflater inflater;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // inflater here is null
    }
}
Run Code Online (Sandbox Code Playgroud)

android code-injection roboguice

4
推荐指数
2
解决办法
2514
查看次数

基于现有布局的自定义布局

我正在尝试为Android创建自定义布局.它通常在屏幕上绘制,但没有内部视图.仅绘制我的group_box.xml.我如何从我的自定义布局访问内部视图(带有id测试的TextView)或如何绘制它们?

main.xml中

<my.example.GroupBox
            android:layout_width="match_parent"
            android:layout_height="40sp">
        <TextView android:text="TEST"
                  android:id="@+id/test"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"/>
    </my.example.GroupBox>
Run Code Online (Sandbox Code Playgroud)

group_box.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                style="@style/groupbox">
    <LinearLayout style="@style/groupboxContent"
                  android:id="@+id/content"
                  android:layout_height="match_parent"
                  android:layout_width="match_parent"/>
    <TextView style="@style/groupboxLabel"
              android:id="@+id/caption"
              android:text="@string/visit"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

GroupBox.java

public class GroupBox extends LinearLayout {

    public GroupBox(Context context) {
        super(context);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.group_box, this);
    }

    public GroupBox(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.group_box, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

android custom-controls android-layout

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

UserDetailsS​​ervice中自动装配的CrudRepository始终为null

我是Spring-World的新手,我有Spring Security和JPA的Spring Boot应用程序.还有CrudRepository和UserDetailsS​​ervice,见下文

应用类

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

userDAO的

@Repository
public interface UserDao extends CrudRepository<User, Long> {
    public Collection<User> findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

ApiUserDetailsS​​ervice

@Component
public class ApiUserDetailsService implements UserDetailsService {

    @Autowired
    private UserDao dao;

    @Override
    public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
        assert dao != null;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

安全配置

@Configuration
@EnableWebSecurity
public class HttpBasicAuthConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception { …
Run Code Online (Sandbox Code Playgroud)

spring spring-security autowired

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

如何检查阶段期间调用的maven目标

我配置了一些插件目标,在我的构建生命周期的某些阶段(maven android应用程序)中执行.但我认为我在配置插件时遇到了一个错误,并希望确保它们真正被调用.我发现这个命令将打印所有生命周期阶段和目标:mvn help:describe -Dcmd=install但它没有显示我配置的目标.因此,我有两个问题:

  • mvn help:describe -Dcmd=install命令是否显示我在<build>/<plugins>/<plugin>/<executions>/<execution> pom标签内配置的目标?

  • 如何确保在构建生命周期中调用阶段和阶段期间调用的目标?

更新 我正在尝试配置maven-android-plugin并希望在包阶段执行zipalign目标

        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.2.0</version>
            <extensions>true</extensions>
            <configuration>
                <sdk>
                    <platform>8</platform>
                </sdk>
                <emulator>
                    <avd>2.3.3_API-10</avd>
                </emulator>
                <undeployBeforeDeploy>true</undeployBeforeDeploy>
                <assetsDirectory>${project.build.directory}/filtered-assets</assetsDirectory>
                <androidManifestFile>${project.build.directory}/filtered-manifest/AndroidManifest.xml</androidManifestFile>
                <zipalign>
                    <skip>false</skip>
                    <verbose>${build.verbosity}</verbose>
                    <inputApk>${project.build.directory}/${project.artifactId}-${build.version.name}.apk</inputApk>
                    <outputApk>${project.build.directory}/${project.artifactId}-${build.version.name}-aligned.apk</outputApk>
                </zipalign>
            </configuration>
            <executions>
                <execution>
                    <id>zipalign</id>
                    <phase>package</phase>
                    <goals>
                        <goal>zipalign</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

android maven-plugin maven android-maven-plugin

0
推荐指数
1
解决办法
1288
查看次数