• 从LINUX 驱动 到APK (4)


    实现简单的apk,实现对对应节点的访问

      此次使用apk实现对相应节点的访问。

      实现apk,主要分为两个部分:实现相应的apk主体部分,编译生成apk

      一、实现相应的apk主体部分

      由于本人对Java不是很熟悉,过借鉴了老罗的代码,不同之处此次使用的Android studio来新建一个apk工程取名为welcome,选择Android6.0的sdk。

      1、主程序 welcome.java

        生成的代码需要修改相应的import 模块跟代码,以便使用mtk代码,同时由于引用了自己的代码故在Android studio 中编译会报错

    package com.example.atlas.welcome;
    
    //import com.example.atlas.welcome.R;
    //import android.support.v7.app.AppCompatActivity;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.ServiceManager;
    import android.os.IWelcomeService;
    import android.os.RemoteException;
    import android.util.Log;
    import android.util.EventLog;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.textservice.TextServicesManager;
    import android.widget.Button;
    import android.widget.EditText;
    import java.io.IOException;
    import java.util.ArrayList;
    
    import android.app.ListActivity;
    import android.content.Context;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.graphics.drawable.Drawable;
    
    public class welcome extends Activity implements  OnClickListener {
        private final static String LOG_TAG = "atlas.welcome";
        private IWelcomeService welcomeService = null;
        private EditText valueText = null;
        private Button readButton = null;
        private Button writeButton = null;
        private Button clearButton = null;
    
        // called when the activity is first created.
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_welcome);
            welcomeService = IWelcomeService.Stub.asInterface(ServiceManager.getService("welcome"));
            valueText = (EditText)findViewById(R.id.edit_value);
            readButton = (Button)findViewById(R.id.button_read);
            writeButton = (Button)findViewById(R.id.button_write);
            clearButton = (Button)findViewById(R.id.button_clear);
    
            readButton.setOnClickListener(this);
            writeButton.setOnClickListener(this);
            clearButton.setOnClickListener(this);
    
            Log.i(LOG_TAG,"Welcome Activity Created");
        }
        @Override
        public void onClick(View v){
            if(v.equals(readButton)){
                try{
                    int val = welcomeService.getVal();
                    String text = String.valueOf(val);
                    valueText.setText(text);
                }catch (RemoteException e){
                    Log.e(LOG_TAG,"Remote Exception while reading value from device.");
                }
            }else if(v.equals(writeButton)){
                try{
                    String text = valueText.getText().toString();
                    int val = Integer.parseInt(text);
                    welcomeService.setVal(val);
                }catch (RemoteException e){
                    Log.e(LOG_TAG,"Remote Exception while writing value to device.");
                }
            }else if(v.equals(clearButton)){
                String text = "";
                valueText.setText(text);
            }
        }
    }

      1.2 修改layout 目录下的activity_welcome.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">  
       <LinearLayout  
          android:layout_width="fill_parent"  
          android:layout_height="wrap_content"  
          android:orientation="vertical"   
          android:gravity="center">  
          <TextView   
             android:layout_width="wrap_content"  
             android:layout_height="wrap_content"   
             android:text="@string/value">  
          </TextView>  
          <EditText   
             android:layout_width="fill_parent"  
             android:layout_height="wrap_content"   
             android:id="@+id/edit_value"  
             android:hint="@string/hint">  
          </EditText>  
       </LinearLayout>  
       <LinearLayout  
          android:layout_width="fill_parent"  
          android:layout_height="wrap_content"  
          android:orientation="horizontal"   
          android:gravity="center">  
          <Button   
             android:id="@+id/button_read"  
             android:layout_width="wrap_content"  
             android:layout_height="wrap_content"  
             android:text="@string/read">  
          </Button>  
          <Button   
             android:id="@+id/button_write"  
             android:layout_width="wrap_content"  
             android:layout_height="wrap_content"  
             android:text="@string/write">  
          </Button>  
          <Button   
             android:id="@+id/button_clear"  
             android:layout_width="wrap_content"  
             android:layout_height="wrap_content"  
             android:text="@string/clear">  
          </Button>  
       </LinearLayout>  
    </LinearLayout>  

      1.3、 字符串文件res/values/strings.xml

    <resources>
        <string name="app_name">welcome</string>
       <string name="value">Value</string>
       <string name="hint">Please input a value...</string>
       <string name="read">Read</string>
       <string name="write">Write</string>
       <string name="clear">Clear</string>
    </resources>
    View Code

      1.4 修改styles.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    /*
     * Copyright (C) 2010, The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License"); 
     * you may not use this file except in compliance with the License. 
     * You may obtain a copy of the License at 
     *
     *     http://www.apache.org/licenses/LICENSE-2.0 
     *
     * Unless required by applicable law or agreed to in writing, software 
     * distributed under the License is distributed on an "AS IS" BASIS, 
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
     * See the License for the specific language governing permissions and 
     * limitations under the License.
     */
    -->
    
    <resources>
        <style name="TallTitleBarTheme" parent="android:Theme.NoTitleBar">
            <item name="android:windowContentOverlay">@null</item>
        </style>
    </resources>
    View Code

      1.5 程序描述文件AndroidManifest.xml:

    <?xml version="1.0" encoding="utf-8"?>  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        package="com.example.atlas.welcome"  
        android:sharedUserId="android.uid.log"
        >
        <application
            android:label="welcome" >
            <activity
                android:name=".welcome"
                android:label="welcome" >
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
    </application>  
    </manifest>   
    View Code

      二、编译生成apk

      2.1、在适当的位置建立app目录,此次选择packagesapps建立welcome目录。

        将Android studio 建立的源文件目录 welcomeappsrcmain 下的的文件copy到welcome目录下。

      2.2、添加Android.mk 文件,添加编译规则

    LOCAL_PATH:= $(call my-dir)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS:=optional
    
    LOCAL_SRC_FILES := $(call all-java-files-under, java)
    
    LOCAL_PACKAGE_NAME:=welcome
    LOCAL_CERTIFICATE := platform
    include $(BUILD_PACKAGE)
    #include $(call all-makefiles-under,$(LOCAL_PATH))

       至此apk代码部分完成。

      三、编译,下载,验证

        使用mmm package/apps/welcome 编译即可,打包下载或者直接安装。

       如有相关权限问题,添加对应的权限即可。至此,从kernel 到apk部分代码完成。

  • 相关阅读:
    PHP安全编程:更优的会话数据安全 更好地防范session暴露(转)
    PHP安全编程:会话数据注入 比会话劫持更强大的攻击(转)
    小菜学习设计模式(四)—原型(Prototype)模式
    小菜学习设计模式(三)—工厂方法(Factory Method)模式
    从头学习设计模式(一)——单例模式
    javascript Date format(js日期格式化)
    您尝试打开的文件的格式与文件扩展名指定的格式不一致
    C# foreach 中获取索引index的方法
    C# DateTime日期格式化
    oracle的常用函数 instr() 和substr()函数
  • 原文地址:https://www.cnblogs.com/atlas2016/p/7576029.html
Copyright © 2020-2023  润新知