{"id":14718,"date":"2023-11-29T11:06:57","date_gmt":"2023-11-29T03:06:57","guid":{"rendered":"https:\/\/www.zhidianwl.com\/zhidian\/?p=14718"},"modified":"2023-11-29T11:06:57","modified_gmt":"2023-11-29T03:06:57","slug":"java%e5%bc%80%e5%8f%91%e5%ae%89%e5%8d%93app%e6%8f%92%e4%bb%b6%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9%e4%bb%8b%e7%bb%8d","status":"publish","type":"post","link":"https:\/\/www.zhidianwl.com\/zhidian\/2023\/14718\/","title":{"rendered":"java\u5f00\u53d1\u5b89\u5353app\u63d2\u4ef6\u6ce8\u610f\u4e8b\u9879\u4ecb\u7ecd"},"content":{"rendered":"
\u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u8ba8\u8bba\u5982\u4f55\u4f7f\u7528Java\u8bed\u8a00\u5f00\u53d1Android\u5e94\u7528\u7a0b\u5e8f\u63d2\u4ef6\u3002\u63d2\u4ef6\u662f\u6307\u6269\u5c55\u6216\u589e\u5f3a\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u529f\u80fd\u7684\u72ec\u7acb\u6a21\u5757\u3002\u5728Android\u5f00\u53d1\u4e2d\uff0c\u63d2\u4ef6\u53ef\u4ee5\u7528\u4e8e\u6269\u5c55\u6838\u5fc3\u5e94\u7528\u529f\u80fd\u3001\u5b9e\u73b0\u53ef\u91cd\u7528\u7684\u4ee3\u7801\u5e93\u6216\u8005\u521b\u5efa\u7c7b\u4f3c\u4e8e\u684c\u9762\u5c0f\u5de5\u5177\u7684\u7ec4\u4ef6\u3002<\/p>\n
\u4e00\u3001\u539f\u7406<\/p>\n
\u5728Android\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u63d2\u4ef6\u901a\u5e38\u4ee5Android\u5e93\uff08.aar\uff09\u7684\u5f62\u5f0f\u63d0\u4f9b\u3002\u8fd9\u662f\u4e00\u4e2a\u5305\u542b\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u548c\u8d44\u6e90\u6587\u4ef6\u7684\u5f52\u6863\u6587\u4ef6\u3002\u5728\u9879\u76ee\u4e2d\u6dfb\u52a0\u4e86\u5e93\u540e\uff0c\u9879\u76ee\u7684\u4e3b\u8981\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u8bbf\u95ee\u5e93\u4e2d\u7684\u7c7b\u3001\u8d44\u6e90\u548c\u63a5\u53e3\uff0c\u4ece\u800c\u5141\u8bb8\u60a8\u91cd\u7528\u4ee3\u7801\u5e76\u8f7b\u677e\u6269\u5c55\u73b0\u6709\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n
\u5728\u9879\u76ee\u4e2d\uff0c\u4e3b\u8981\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u63a5\u53e3\u4e0e\u63d2\u4ef6\u4e92\u52a8\u3002\u63a5\u53e3\u5728\u63d2\u4ef6\u4ee5\u53ca\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u90fd\u5b9a\u4e49\u3002\u8fd9\u4f7f\u5f97\u4e3b\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u4ee5\u4e00\u79cd\u7c7b\u578b\u5b89\u5168\u7684\u65b9\u5f0f\u4e0e\u63d2\u4ef6\u4ea4\u4e92\uff0c\u5e76\u5177\u6709\u826f\u597d\u7684\u5206\u79bb\u5173\u6ce8\u70b9\uff08separation of concern\uff09\u3002<\/p>\n
\u4e8c\u3001\u6b65\u9aa4\u6559\u7a0b<\/p>\n
1. \u521b\u5efa\u4e00\u4e2aAndroid\u5e93\u9879\u76ee<\/p>\n
\u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2aAndroid\u5e93\u9879\u76ee\u3002\u5728Android Studio\u4e2d\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u6b65\u9aa4\u5b8c\u6210\uff1a<\/p>\n
1.1 \u6253\u5f00Android Studio\u5e76\u9009\u62e9”File”->”New”->”New Module”\u3002<\/p>\n
1.2 \u5728\u5f39\u51fa\u7684\u5bf9\u8bdd\u6846\u4e2d\uff0c\u9009\u62e9”Android Library”\uff0c\u7136\u540e\u5355\u51fb”Next”\u3002<\/p>\n
1.3 \u4e3a\u63d2\u4ef6\u6307\u5b9a\u540d\u79f0\u3001\u6a21\u5757\u540d\u79f0\u548c\u5305\u540d\u79f0\uff0c\u7136\u540e\u5355\u51fb”Finish”\u3002<\/p>\n
\u5b8c\u6210\u540e\uff0c\u5c06\u521b\u5efa\u4e00\u4e2a\u5305\u542b\u7f16\u8bd1\u7684.aar\u6587\u4ef6\u7684\u5e93\u9879\u76ee\u3002<\/p>\n
2. \u5b9a\u4e49\u63a5\u53e3<\/p>\n
\u5728\u5e93\u9879\u76ee\u4e2d\uff0c\u5b9a\u4e49\u8981\u66b4\u9732\u7ed9\u4e3b\u5e94\u7528\u7a0b\u5e8f\u7684\u63a5\u53e3\u3002\u901a\u5e38\uff0c\u8fd9\u4e2a\u63a5\u53e3\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u65b9\u6cd5\u5141\u8bb8\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e0e\u63d2\u4ef6\u4e92\u52a8\u3002<\/p>\n
\u4f8b\u5982\uff0c\u5047\u8bbe\u6211\u4eec\u6b63\u5728\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a”MyPlugin”\u7684\u63d2\u4ef6\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u5e93\u4e2d\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a”MyPluginInterface”\u7684\u63a5\u53e3\uff1a<\/p>\n
“`java<\/p>\n
public interface MyPluginInterface {<\/p>\n
void init(Context context);<\/p>\n
void performAction();<\/p>\n
}<\/p>\n
“`<\/p>\n
3. \u5b9e\u73b0\u63a5\u53e3<\/p>\n
\u73b0\u5728\uff0c\u5728\u5e93\u9879\u76ee\u4e2d\uff0c\u521b\u5efa\u4e00\u4e2a\u5b9e\u73b0\u4e0a\u8ff0\u63a5\u53e3\u7684\u7c7b\u3002\u8fd9\u4e2a\u7c7b\u5c06\u5305\u542b\u63d2\u4ef6\u7684\u6838\u5fc3\u903b\u8f91\u3002<\/p>\n
\u4f8b\u5982\uff0c\u5728\u6211\u4eec\u7684”MyPlugin”\u63d2\u4ef6\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a”MyPluginImpl”\u7684\u7c7b\uff0c\u5b9e\u73b0”MyPluginInterface”\uff1a<\/p>\n
“`java<\/p>\n
public class MyPluginImpl implements MyPluginInterface {<\/p>\n
@Override<\/p>\n
public void init(Context context) {<\/p>\n
\/\/ \u63d2\u4ef6\u521d\u59cb\u5316\u4ee3\u7801<\/p>\n
}<\/p>\n
@Override<\/p>\n
public void performAction() {<\/p>\n
\/\/ \u63d2\u4ef6\u7684\u6838\u5fc3\u529f\u80fd\u4ee3\u7801<\/p>\n
}<\/p>\n
}<\/p>\n
“`<\/p>\n
4. \u5728\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u5f15\u7528\u63d2\u4ef6<\/p>\n
\u8981\u5728\u4e3b\u5e94\u7528\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u63d2\u4ef6\uff0c\u60a8\u9700\u8981\u5c06\u63d2\u4ef6\u4f5c\u4e3a\u4f9d\u8d56\u9879\u6dfb\u52a0\u5230\u9879\u76ee\u4e2d\u3002\u5728Android Studio\u4e2d\uff0c\u8fd9\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u6b65\u9aa4\u5b8c\u6210\uff1a<\/p>\n
4.1 \u5728\u4e3b\u7a0b\u5e8f\u7684\u9879\u76ee\u6839\u76ee\u5f55\u7684build.gradle\u6587\u4ef6\u4e2d\uff0c\u6dfb\u52a0\u5e93\u6a21\u5757\u4f5c\u4e3a\u4f9d\u8d56\u9879\uff1a<\/p>\n
“`groovy<\/p>\n
dependencies {<\/p>\n
implementation project(‘:my-plugin-library’)<\/p>\n
}<\/p>\n
“`<\/p>\n
4.2 \u5728\u4e3b\u7a0b\u5e8f\u7684\u4ee3\u7801\u4e2d\uff0c\u4f7f\u7528\u63d2\u4ef6\u63a5\u53e3\uff1a<\/p>\n
“`java<\/p>\n
public class MainActivity extends AppCompatActivity {<\/p>\n
private MyPluginInterface myPlugin;<\/p>\n
@Override<\/p>\n