{"id":698,"date":"2013-09-25T19:31:42","date_gmt":"2013-09-25T11:31:42","guid":{"rendered":"http:\/\/www.yeetrack.com\/?p=698"},"modified":"2013-09-27T22:36:31","modified_gmt":"2013-09-27T14:36:31","slug":"android%e5%bc%80%e5%8f%91%e3%80%81%e6%b5%8b%e8%af%95%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90%e7%8e%af%e5%a2%83jenkins%e6%90%ad%e5%bb%ba","status":"publish","type":"post","link":"https:\/\/www.yeetrack.com\/?p=698","title":{"rendered":"Android\u5f00\u53d1\u3001\u6d4b\u8bd5\u6301\u7eed\u96c6\u6210\u73af\u5883Jenkins\u642d\u5efa"},"content":{"rendered":"<p>\u4f20\u7edfjava\u9879\u76ee\u5f00\u53d1\u90fd\u4f1a\u5229\u7528maven\u3001ant\u5728hudson\u3001jenkins\u4e2d\u6301\u7eed\u96c6\u6210\uff0c\u5f00\u53d1\u3001\u6d4b\u8bd5\u3001\u6bcf\u65e5\u6784\u5efa\uff0c\u4fdd\u8bc1\u4ee3\u7801\u8d28\u91cf\u3002maven\u9ed8\u8ba4\u4e0d\u652f\u6301android\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u5229\u7528<strong>maven-android-plugin<\/strong>\u63d2\u4ef6\u6765\u8ba9maven\u652f\u6301android\u3002<\/p>\n<h3>\u73af\u5883<\/h3>\n<ul>\n<li>jdk 1.6\u53ca\u4ee5\u4e0a<\/li>\n<li>Android sdk(r21\u53ca\u4ee5\u4e0a),\u6700\u597d\u662f\u6700\u9ad8\u7248\u672c\uff0c\u6700\u597d\u4e5f\u5b89\u88c5\u4e00\u4e0bndk<\/li>\n<li>Maven 3.0.3\u53ca\u4ee5\u4e0a\uff0c\u8c8c\u4f3c3.1.0\u4e0d\u597d\u4f7f\uff0c\u6700\u597d\u4f7f\u75283.0.5\u7248\n<p>\u8bbe\u7f6eANDROID_HOME\u73af\u5883\u53d8\u91cf\uff0c\u5c06$ANDROID_HOME\/tools\u3001$ANDROID_HOME\/platform-tools\u52a0\u5165\u5230\u73af\u5883\u53d8\u91cf\u4e2d<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<h3>\u6d4b\u8bd5\u73af\u5883<\/h3>\n<p>\u4e0b\u8f7d\u793a\u4f8b\u7a0b\u5e8f\uff0c\u901a\u8fc7\u8dd1\u8fd9\u4e9b\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u68c0\u6d4b\u73af\u5883\u662f\u5426OK\uff0c\u5e76\u4e14\u4e0b\u8f7dmaven\u9700\u8981\u7684jar\u5305\u3002<a href=\"http:\/\/code.google.com\/p\/maven-android-plugin\/wiki\/Samples\">\u793a\u4f8b\u7a0b\u5e8f<\/a><\/p>\n<h2>\u4f7f\u7528Maven\u8fdb\u884cAndroid\u5f00\u53d1<\/h2>\n<h3>\u65b0\u5efaMaven Android\u9879\u76ee<\/h3>\n<p>\u5177\u4f53\u547d\u4ee4\u53c2\u8003<a href=\"http:\/\/stand.spree.de\/wiki_details_maven_archetypes\">\u6b64\u5904<\/a><\/p>\n<h3>\u624b\u52a8\u521b\u5efaMaven Android\u9879\u76ee<\/h3>\n<p>\u6709\u4e9b\u662f\u5386\u53f2\u9879\u76ee\uff0c\u4e5f\u53ef\u4ee5\u624b\u52a8\u5c06\u5176\u6539\u6210maven\u9879\u76ee\uff0c\u65b9\u6cd5\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u65b0\u5efapom.xml\u6587\u4ef6\uff0c\u62f7\u8d1d\u5176\u4ed6maven\u9879\u76ee\u7684\u4e5f\u53ef\u3002<\/li>\n<li>\u4fee\u6539&lt;groupId&gt;,&lt;artifactId&gt;,&lt;name&gt;<\/li>\n<li>\u4fee\u6539&lt;version&gt;,\u9ed8\u8ba4\u662f<strong>&lt;version&gt;0.1.0-SNAPSHOT&lt;\/version&gt;<\/strong><\/li>\n<li>\u589e\u52a0android jar\u5305\u4f9d\u8d56\uff1a\n<pre><code>&lt;dependency&gt;\n    &lt;groupId&gt;com.google.android&lt;\/groupId&gt;\n    &lt;artifactId&gt;android&lt;\/artifactId&gt;\n    &lt;version&gt;1.5_r4&lt;\/version&gt;\n    &lt;scope&gt;provided&lt;\/scope&gt;\n&lt;\/dependency&gt;\n<\/code><\/pre>\n<p>\u53ef\u5728<a href=\"http:\/\/search.maven.org\/#search%7Cga%7C1%7Ca%3A%22android%22\">\u6b64\u5904<\/a>\u67e5\u770bandroid\u6240\u6709\u7248\u672c<\/p>\n<p>5. \u5728android-maven-plugin\u914d\u7f6e\u4e2d\uff0c\u914d\u7f6eandroid platform\u7684\u7248\u672c\uff0c\u5982<code>&lt;platform&gt;7&lt;\/platform&gt;<\/code><br \/>\n6. \u53ef\u4ee5\u5220\u9664build.xml\u3001build.properties\u3001bin\u548clibs\u3002<br \/>\n7. \u6253apk\u5305<code>mvn clean install<\/code>,\u5c06apk\u5305\u5b89\u88c5\u5230\u8bbe\u5907\u4e2d<code>mvn android:deploy<\/code><\/li>\n<\/ol>\n<p>\u793a\u4f8bpom.xml\u5982\u4e0b\uff1a<\/p>\n<pre><code>    &lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n    &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\nxsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\n       &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n       &lt;parent&gt;\n          &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n          &lt;artifactId&gt;parent&lt;\/artifactId&gt;\n          &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n       &lt;\/parent&gt;\n\n       &lt;properties&gt;     \n           &lt;project.build.sourceEncoding&gt;utf-8&lt;\/project.build.sourceEncoding&gt;       \n           &lt;maven.compiler.encoding&gt;utf-8&lt;\/maven.compiler.encoding&gt;\n          &lt;platform.version&gt;4.1.1.4&lt;\/platform.version&gt;\n          &lt;android.plugin.version&gt;3.6.0&lt;\/android.plugin.version&gt;\n       &lt;\/properties&gt;\n\n       &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n       &lt;artifactId&gt;app&lt;\/artifactId&gt;\n       &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n       &lt;packaging&gt;apk&lt;\/packaging&gt;\n       &lt;name&gt;app&lt;\/name&gt;\n\n       &lt;dependencies&gt;\n          &lt;dependency&gt;\n             &lt;groupId&gt;com.google.android&lt;\/groupId&gt;\n             &lt;artifactId&gt;android&lt;\/artifactId&gt;\n             &lt;version&gt;4.1.1.4&lt;\/version&gt;\n             &lt;scope&gt;provided&lt;\/scope&gt;\n          &lt;\/dependency&gt;\n\n          &lt;dependency&gt;\n               &lt;groupId&gt;com.google.android&lt;\/groupId&gt;\n               &lt;artifactId&gt;support-v4&lt;\/artifactId&gt;\n               &lt;version&gt;r7&lt;\/version&gt;\n        &lt;\/dependency&gt;\n\n     &lt;\/dependencies&gt;\n\n&lt;!-- \u914d\u7f6epmd\u3001findbugs --&gt;\n&lt;reporting&gt;\n&lt;plugins&gt;\n  &lt;plugin&gt;\n    &lt;groupId&gt;org.codehaus.mojo&lt;\/groupId&gt;\n    &lt;artifactId&gt;findbugs-maven-plugin&lt;\/artifactId&gt;\n    &lt;version&gt;2.5&lt;\/version&gt;\n    &lt;configuration&gt;  \n                &lt;xmlOutput&gt;true&lt;\/xmlOutput&gt;  \n                &lt;effort&gt;Max&lt;\/effort&gt;  \n            &lt;\/configuration&gt;  \n  &lt;\/plugin&gt;\n&lt;\/plugins&gt;\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre><code>&lt;build&gt;\n    &lt;finalName&gt;${project.artifactId}&lt;\/finalName&gt;\n    &lt;sourceDirectory&gt;src&lt;\/sourceDirectory&gt;\n\n    &lt;plugins&gt;\n        &lt;plugin&gt;\n                    &lt;groupId&gt;com.jayway.maven.plugins.android.generation2&lt;\/groupId&gt;\n                    &lt;artifactId&gt;android-maven-plugin&lt;\/artifactId&gt;\n                    &lt;version&gt;3.6.1&lt;\/version&gt;\n                    &lt;configuration&gt;\n                            &lt;sdk&gt;&lt;platform&gt;16&lt;\/platform&gt;&lt;\/sdk&gt;\n                            &lt;manifest&gt;\n                                &lt;debuggable&gt;true&lt;\/debuggable&gt;\n                            &lt;\/manifest&gt;\n                    &lt;\/configuration&gt;\n                    &lt;!--&lt;executions&gt;\n                            &lt;execution&gt;\n                                &lt;goals&gt;\n                                        &lt;goal&gt;ndk-build&lt;\/goal&gt;\n                                &lt;\/goals&gt;\n                    &lt;configuration&gt;\n\n                                        &lt;attachNativeArtifacts&gt;true&lt;\/attachNativeArtifacts&gt;\n                                &lt;\/configuration&gt;\n                            &lt;\/execution&gt;\n                    &lt;\/executions&gt;--&gt;\n                    &lt;extensions&gt;true&lt;\/extensions&gt;\n                &lt;\/plugin&gt;\n\n        &lt;\/plugins&gt;\n    &lt;\/build&gt;\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h2>\u4f7f\u7528Maven\u8fdb\u884cAndroid\u5355\u5143\u6d4b\u8bd5<\/h2>\n<p>\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u53ef\u4ee5\u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u5e26\u6709\u5355\u5143\u6d4b\u8bd5\u7684Android\u9879\u76ee\uff1a<\/p>\n<pre><code>    mvn archetype:generate \\\n    -DarchetypeArtifactId=android-with-test \\\n    -DarchetypeGroupId=de.akquinet.android.archetypes \\\n    -DarchetypeVersion=1.0.11 \\\n    -DgroupId=com.foo.bar \\\n    -DartifactId=my-android-project \\\n    -Dpackage=com.foo.bar.android\n<\/code><\/pre>\n<p>\u6211\u4eec\u53ea\u9700\u8981\u4fee\u6539\u5176\u4e2d\u7684pom.xml\u6587\u4ef6\u5373\u53ef\u3002\u793a\u4f8b\u6587\u4ef6\u5982\u4e0b\uff1a<\/p>\n<pre><code>    &lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n    &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\nxsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\n       &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n       &lt;parent&gt;\n          &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n          &lt;artifactId&gt;parent&lt;\/artifactId&gt;\n          &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n       &lt;\/parent&gt;\n\n       &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n       &lt;artifactId&gt;test&lt;\/artifactId&gt;\n       &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n       &lt;packaging&gt;apk&lt;\/packaging&gt;\n       &lt;name&gt;Tests&lt;\/name&gt;\n\n&lt;dependencies&gt;\n    &lt;dependency&gt;\n            &lt;groupId&gt;com.google.android&lt;\/groupId&gt;\n            &lt;artifactId&gt;android-test&lt;\/artifactId&gt;\n            &lt;scope&gt;provided&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n        &lt;!--\u9700\u8981\u4f9d\u8d56\u5f00\u53d1\u4ee3\u7801\u6253\u51fa\u7684apk\u5305--&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n        &lt;artifactId&gt;app&lt;\/artifactId&gt;\n        &lt;type&gt;apk&lt;\/type&gt;\n        &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;scope&gt;provided&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n    &lt;!--\u9700\u8981\u4f9d\u8d56\u5f00\u53d1\u4ee3\u7801\u6253\u51fa\u7684jar\u5305--&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n        &lt;artifactId&gt;app&lt;\/artifactId&gt;\n        &lt;type&gt;jar&lt;\/type&gt;\n        &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;scope&gt;provided&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;\n\n&lt;build&gt;\n    &lt;finalName&gt;${project.artifactId}&lt;\/finalName&gt;\n    &lt;sourceDirectory&gt;src&lt;\/sourceDirectory&gt;\n    &lt;plugins&gt;\n        &lt;plugin&gt;\n            &lt;groupId&gt;com.jayway.maven.plugins.android.generation2&lt;\/groupId&gt;\n            &lt;artifactId&gt;android-maven-plugin&lt;\/artifactId&gt;\n            &lt;configuration&gt;\n                &lt;test&gt;\n                    &lt;!--&lt;skip&gt;true|false|auto&lt;\/skip&gt; --&gt;\n                    &lt;!--&lt;instrumentationPackage&gt;packageName&lt;\/instrumentationPackage&gt; --&gt;\n                    `\n                    &lt;!--&lt;instrumentationRunner&gt;className&lt;\/instrumentationRunner&gt; --&gt;\n                    &lt;!--&lt;debug&gt;true|false&lt;\/debug&gt; --&gt;\n                    &lt;!--&lt;coverage&gt;true|false&lt;\/coverage&gt; --&gt;\n                    &lt;!--&lt;logonly&gt;true|false&lt;\/logonly&gt; avd --&gt;\n                    &lt;!--&lt;testsize&gt;small|medium|large&lt;\/testsize&gt; --&gt;\n                    &lt;createReport&gt;true&lt;\/createReport&gt;\n                    &lt;!--&lt;classes&gt; --&gt;\n                    &lt;!--&lt;class&gt;your.package.name.YourTestClass&lt;\/class&gt; --&gt;\n                    &lt;!--&lt;\/classes&gt; --&gt;\n                    &lt;!--&lt;packages&gt; --&gt;\n                    &lt;!--&lt;package&gt;your.package.name&lt;\/package&gt; --&gt;\n                    &lt;!--&lt;\/packages&gt; --&gt;\n                &lt;\/test&gt;\n            &lt;\/configuration&gt;\n            &lt;extensions&gt;true&lt;\/extensions&gt;\n        &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n&lt;\/build&gt;\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Google\u5b98\u65b9\u63d0\u4f9bAndroid\u5355\u5143\u6d4b\u8bd5\u7684\u65b9\u6cd5\uff0c\u9700\u8981\u7ee7\u627f<code>ActivityInstrumentationTestCase2<\/code>\u8fd9\u4e2a\u7c7b,<\/p>\n<p>\u5355\u5143\u6d4b\u8bd5\u4ee3\u7801\u793a\u4f8b\uff0c\u5982\u4e0b(<strong>\u56e0\u4e3a\u6211\u4eec\u5f15\u7528\u4e86app\u6784\u9020\u7684apk\u548cjar\u5305\uff0c\u6240\u4ee5\u6211\u4eec\u80fd\u591f\u5728\u6d4b\u8bd5\u4ee3\u7801\u4e2d\u76f4\u63a5\u5f15\u7528\u5f00\u53d1\u4ee3\u7801<\/strong>)\uff1a<\/p>\n<pre><code>    package com.yeetrack.test;\n\n    import com.yeetrack.app.LoginActivity;\n    import com.yeetrack.app.R;\n\n    import android.test.ActivityInstrumentationTestCase2;\n    import android.test.UiThreadTest;\n    import android.widget.Button;\n    import android.widget.EditText;\n\n    \/**\n    * @author victor\n    * app UI\u767b\u9646\u754c\u9762\u6d4b\u8bd5\n    *\/\n    public class LoginActivityTest extends ActivityInstrumentationTestCase2&lt;LoginActivity&gt;\n    {\n       \/**\n       * \u767b\u9646\u754c\u9762\u7684activity\n       *\/\n       private LoginActivity loginActivity;\n       \/**\n        * \u7528\u6237\u8d26\u53f7\u8f93\u5165\u6846\n        *\/\n       private EditText usernameEditText;\n       \/**\n        * \u7528\u6237\u5bc6\u7801\u8f93\u5165\u6846\n        *\/\n       private EditText passwordEditText;\n       \/**\n        * \u63d0\u4ea4\u6309\u94ae\n        *\/\n       private Button submitButton;\n\n       public LoginActivityTest()\n       {\n           super(LoginActivity.class);\n       }\n\n       @Override\n       protected void setUp() throws Exception\n       {\n           \/\/ TODO Auto-generated method stub\n           super.setUp();\n           loginActivity = getActivity();\n           usernameEditText = (EditText) loginActivity.findViewById(R.id.username);\n           passwordEditText = (EditText) loginActivity.findViewById(R.id.password);\n           submitButton = (Button) loginActivity.findViewById(R.id.loginButton);\n        }\n       \/\/\u9700\u8981\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u6267\u884c\uff0candroid\u7981\u6b62\u5728\u5176\u4ed6\u7ebf\u7a0b\u4e2d\u64cd\u4f5c\u4e3b\u7ebf\u7a0b\u7684\u63a7\u4ef6\n       @UiThreadTest\n       public void testAppActivity()\n       {\n          assertNotNull(loginActivity);\n          assertNotNull(usernameEditText);\n          assertNotNull(passwordEditText);\n          assertNotNull(submitButton);\n\n          usernameEditText.setText(\"Victor Wang\");\n          passwordEditText.setText(\"password\");\n          submitButton.performClick();\n\n          try\n           {\n               Thread.sleep(10000);\n            } catch (InterruptedException e)\n            {\n               e.printStackTrace();\n            }\n       }\n\n       @Override\n        protected void tearDown() throws Exception\n        {\n           \/\/ TODO Auto-generated method stub\n           super.tearDown();\n        }\n    }\n<\/code><\/pre>\n<h2>\u4f7f\u7528Maven\u8fdb\u884cAndroid\u529f\u80fd\u6d4b\u8bd5<\/h2>\n<p>Android\u529f\u80fd\u6d4b\u8bd5\u5de5\u5177\u5f88\u591a\uff0c\u8fd9\u91cc\u7528Robotium\uff0cpom.xml\u5982\u4e0b\uff1a<\/p>\n<pre><code>    &lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n    &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n     xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\n        &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n        &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n        &lt;artifactId&gt;Robotium&lt;\/artifactId&gt;\n        &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;packaging&gt;apk&lt;\/packaging&gt;\n        &lt;name&gt;Baidutx Robotium&lt;\/name&gt;\n       &lt;description&gt;https:\/\/www.yeetrack.com&lt;\/description&gt;\n\n        &lt;parent&gt;\n          &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n          &lt;artifactId&gt;parent&lt;\/artifactId&gt;\n          &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;\/parent&gt;\n\n        &lt;properties&gt;\n          &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\n            &lt;platform.version&gt;4.1.1.4&lt;\/platform.version&gt;\n        &lt;\/properties&gt;\n\n        &lt;dependencies&gt;\n          &lt;dependency&gt;\n             &lt;groupId&gt;com.jayway.android.robotium&lt;\/groupId&gt;\n             &lt;artifactId&gt;robotium-solo&lt;\/artifactId&gt;\n             &lt;version&gt;4.3&lt;\/version&gt;\n          &lt;\/dependency&gt;\n          &lt;dependency&gt;\n            &lt;groupId&gt;com.google&lt;\/groupId&gt;\n            &lt;artifactId&gt;android&lt;\/artifactId&gt;\n            &lt;version&gt;1.0&lt;\/version&gt;\n            &lt;scope&gt;system&lt;\/scope&gt;\n            &lt;systemPath&gt;${project.basedir}\/android.jar&lt;\/systemPath&gt;\n        &lt;\/dependency&gt;\n        &lt;dependency&gt;\n         &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n         &lt;artifactId&gt;app&lt;\/artifactId&gt;\n         &lt;type&gt;apk&lt;\/type&gt;\n         &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n         &lt;scope&gt;provided&lt;\/scope&gt;\n      &lt;\/dependency&gt;\n      &lt;dependency&gt;\n        &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n        &lt;artifactId&gt;app&lt;\/artifactId&gt;\n        &lt;type&gt;jar&lt;\/type&gt;\n        &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;scope&gt;provided&lt;\/scope&gt;\n      &lt;\/dependency&gt;\n    &lt;\/dependencies&gt;\n\n    &lt;build&gt;\n        &lt;sourceDirectory&gt;src&lt;\/sourceDirectory&gt;\n        &lt;plugins&gt;\n        &lt;plugin&gt;\n            &lt;groupId&gt;com.jayway.maven.plugins.android.generation2&lt;\/groupId&gt;\n            &lt;artifactId&gt;android-maven-plugin&lt;\/artifactId&gt;\n            &lt;version&gt;3.6.1&lt;\/version&gt;\n            &lt;configuration&gt;\n                &lt;androidManifestFile&gt;${project.basedir}\/AndroidManifest.xml&lt;\/androidManifestFile&gt;\n\n                &lt;assetsDirectory&gt;${project.basedir}\/assets&lt;\/assetsDirectory&gt;\n                &lt;resourceDirectory&gt;${project.basedir}\/res&lt;\/resourceDirectory&gt;\n                &lt;nativeLibrariesDirectory&gt;${project.basedir}\/src\/main\/native&lt;\/nativeLibrariesDirectory&gt;\n                &lt;sdk&gt;\n                    &lt;platform&gt;17&lt;\/platform&gt;\n                &lt;\/sdk&gt;\n                &lt;undeployBeforeDeploy&gt;true&lt;\/undeployBeforeDeploy&gt;\n            &lt;\/configuration&gt;\n            &lt;extensions&gt;true&lt;\/extensions&gt;\n        &lt;\/plugin&gt;\n\n        &lt;plugin&gt;\n            &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\n            &lt;version&gt;2.3.2&lt;\/version&gt;\n            &lt;configuration&gt;\n                &lt;encoding&gt;UTF-8&lt;\/encoding&gt;\n                &lt;source&gt;1.6&lt;\/source&gt;\n                &lt;target&gt;1.6&lt;\/target&gt;\n            &lt;\/configuration&gt;\n        &lt;\/plugin&gt;\n        &lt;\/plugins&gt;\n        &lt;\/build&gt;\n    &lt;\/project&gt;\n<\/code><\/pre>\n<h2>\u6dfb\u52a0Parent\u9879\u76ee<\/h2>\n<p>\u5c06\u4e0a\u8ff0\u9879\u76ee\u653e\u5728parent\u6587\u4ef6\u5939\u4e2d\uff0c\u5e76\u5728parent\u521b\u5efapom.xml\uff0c\u8fd9\u6837\u8fd0\u884cparent\u7684pom.xml\u5373\u53ef\u3002<\/p>\n<pre><code>    &lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n    &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\nxsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\n       &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n       &lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n       &lt;artifactId&gt;parent&lt;\/artifactId&gt;\n       &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n       &lt;packaging&gt;pom&lt;\/packaging&gt;\n       &lt;name&gt;Parent&lt;\/name&gt;\n\n       &lt;modules&gt;\n          &lt;module&gt;app&lt;\/module&gt;\n          &lt;module&gt;test&lt;\/module&gt;\n          &lt;module&gt;robotium&lt;\/module&gt;\n       &lt;\/modules&gt;\n\n       &lt;properties&gt;\n          &lt;platform.version&gt; 4.1.1.4&lt;\/platform.version&gt;\n          &lt;android.plugin.version&gt;3.6.0&lt;\/android.plugin.version&gt;\n       &lt;\/properties&gt;\n\n       &lt;dependencyManagement&gt;\n          &lt;dependencies&gt;\n             &lt;dependency&gt;\n                    &lt;groupId&gt;com.google.android&lt;\/groupId&gt;\n                    &lt;artifactId&gt;android&lt;\/artifactId&gt;\n                    &lt;version&gt;${platform.version}&lt;\/version&gt;\n                    &lt;scope&gt;provided&lt;\/scope&gt;\n             &lt;\/dependency&gt;\n             &lt;dependency&gt;\n                    &lt;groupId&gt;com.google.android&lt;\/groupId&gt;\n                    &lt;artifactId&gt;android-test&lt;\/artifactId&gt;\n                    &lt;version&gt;${platform.version}&lt;\/version&gt;\n                    &lt;scope&gt;provided&lt;\/scope&gt;\n             &lt;\/dependency&gt;\n             &lt;dependency&gt;\n                    &lt;groupId&gt;junit&lt;\/groupId&gt;\n                    &lt;artifactId&gt;junit&lt;\/artifactId&gt;\n                    &lt;version&gt;4.11&lt;\/version&gt;\n                    &lt;scope&gt;provided&lt;\/scope&gt;\n             &lt;\/dependency&gt;\n          &lt;\/dependencies&gt;\n       &lt;\/dependencyManagement&gt;\n\n       &lt;build&gt;\n          &lt;pluginManagement&gt;\n             &lt;plugins&gt;\n                    &lt;plugin&gt;\n                       &lt;groupId&gt;com.jayway.maven.plugins.android.generation2&lt;\/groupId&gt;\n                       &lt;artifactId&gt;android-maven-plugin&lt;\/artifactId&gt;\n                       &lt;version&gt;${android.plugin.version}&lt;\/version&gt;\n                       &lt;configuration&gt;\n                          &lt;sdk&gt;\n                             &lt;platform&gt;16&lt;\/platform&gt;\n                          &lt;\/sdk&gt; \n                       &lt;\/configuration&gt;\n                    &lt;\/plugin&gt;\n                    &lt;plugin&gt;\n                       &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\n                       &lt;version&gt;3.1&lt;\/version&gt;\n                    &lt;\/plugin&gt;\n             &lt;\/plugins&gt;\n          &lt;\/pluginManagement&gt;\n       &lt;\/build&gt;\n    &lt;\/project&gt;\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f20\u7edfjava\u9879\u76ee\u5f00\u53d1\u90fd\u4f1a\u5229\u7528maven\u3001ant\u5728hudson\u3001jenkins\u4e2d\u6301\u7eed\u96c6\u6210\uff0c\u5f00\u53d1\u3001\u6d4b\u8bd5\u3001\u6bcf\u65e5\u6784\u5efa\uff0c\u4fdd\u8bc1\u4ee3\u7801\u8d28\u91cf\u3002maven\u9ed8\u8ba4\u4e0d\u652f\u6301android\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u5229\u7528maven-androi&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[33],"tags":[43,8,7,5,42,13,41],"class_list":["post-698","post","type-post","status-publish","format-standard","hentry","category-coding","tag-android","tag-java","tag-7","tag-5","tag-42","tag-13","tag-41"],"views":5867,"_links":{"self":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/698","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=698"}],"version-history":[{"count":1,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/698\/revisions"}],"predecessor-version":[{"id":699,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/698\/revisions\/699"}],"wp:attachment":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=698"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=698"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}