我在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添加在依赖library于app像
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
我想使用带有以下布局的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或其他什么?
我有一个VerticalGroup的Button是我的屏幕上.问题是按钮非常靠近一对一.我想在按钮之间添加一些空格,比如填充或边距.我在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) 我们在Android,iPhone和Windows Phone上有一个服务器(Java + Spring)和客户端项目.所有交互都将通过JSON格式实现.我们只想描述我们的协议一次,而不是通过此描述为所有客户端生成Java,C#和Obj-C类.我们正在寻找一种工具,比如Google ProtoBuf编译器(protoc).但是ProtoBuf生成了太复杂的代码,在这种情况下对我们来说没用,因为我们想要使用JSON而不是二进制序列化.有任何现成的解决方案吗?
我是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生成的目标目录中,我在两个地方看到这个属性文件:
首先是错误的,它包含$ {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 …
我有一个适配器,它扩展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创建自定义布局.它通常在屏幕上绘制,但没有内部视图.仅绘制我的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) 我是Spring-World的新手,我有Spring Security和JPA的Spring Boot应用程序.还有CrudRepository和UserDetailsService,见下文
应用类
@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)
ApiUserDetailsService
@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) 我配置了一些插件目标,在我的构建生命周期的某些阶段(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)