2022-02-22 Android 源码里面添加一个系统app,最简单的app demo实例,附加源码

一、主要目的是想在android系统的源码里面添加一个app,编译出来后有系统权限的应用,有时候需要用系统应用验证一些东西。

 二、这个demo的代码架构如下:

三、详细源码

1、packages\apps\InstallApkDemo\src\main\java\com\topdon\installapkdemo\MainActivity.java

package com.topdon.installapkdemo;


import android.app.Activity;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;

public class MainActivity extends  Activity implements  View.OnClickListener{
    private String TAG = "MainActivity";
    private static String mUrl;
    private static Context mContext;
    private   Button  btnConfirm;

    @Override
    public void onClick(View v) {

        if (v.getId()==R.id.confirm) {

           Toast.makeText(this, "confirm onClick", Toast.LENGTH_LONG).show();
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnConfirm = (Button) findViewById(R.id.confirm);
        btnConfirm.setOnClickListener(this);
    }
}

2、packages\apps\InstallApkDemo\AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.topdon.installapkdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.InstallApkDemo">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

3、packages\apps\InstallApkDemo\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:gravity="center">

    <Button
        android:id="@+id/confirm"
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:background="#00BCD4"
        android:textSize="35dp"
        android:text="confirm" />

</LinearLayout>


4、packages\apps\InstallApkDemo\Android.mk

LOCAL_PATH:= $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE_TAGS := optional
 
LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
LOCAL_PACKAGE_NAME := InstallApkDemo

LOCAL_SDK_VERSION := current 

include $(BUILD_PACKAGE)

5、也可以用Android.bp代替Android.mk

android_app {
    name: "InstallApkDemo",
    platform_apis: true,
    srcs: ["src/**/*.java"],
}

四、编译和执行验证

       1、执行 mmm   packages/apps/InstallApkDemo/ 编译,在out目录下会生成InstallApkDemo文件夹,adb push到设备里面执行。

        2、运行效果如下

 五、编译过程中遇到Must specify LOCAL_SDK_VERSION or LOCAL_PRIVATE_PLATFORM_APIS,解决方法是在mk里面加LOCAL_SDK_VERSION := current

 六、整个源码工程下载路径

Android源码里面添加一个系统app,最简单的appdemo实例-OS文档类资源-CSDN下载

七、参考文章

Android源码中添加APP

Android源码中添加APP - CrazyDiode - 博客园

About LOCAL_PRIVATE_PLATFORM_APIS in Android.mk - 行走的思想 - 博客园

Android 编译中的LOCAL_SDK_VERSION 和 LOCAL_PRIVATE_PLATFORM_APIS_私房菜-CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_37858386/article/details/123062639