東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

android源码编译之06XXXServicesFramework编写之可行性试验04framework层硬件访问服务及应用测试

2015年4月10日星期五



1,framework层增加硬件访问服务
①文件操作
  1. senrsl@senrsl-ubuntu:~$ cd android/source/WORKING_DIRECTORY/
  2. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ cd frameworks/base/core/java/android/os/
  3. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/os$ ll
  4. 总用量 1296
  5. drwxrwxr-x  3 senrsl senrsl   4096  3月 20 13:37 ./
  6. drwxrwxr-x 34 senrsl senrsl   4096  3月 20 13:37 ../
  7. -rw-rw-r--  1 senrsl senrsl   1671  3月 20 13:37 AsyncResult.java
  8. -rw-rw-r--  1 senrsl senrsl  26577  3月 20 13:37 AsyncTask.java
  9. -rw-rw-r--  1 senrsl senrsl   1011  3月 20 13:37 BadParcelableException.java
  10. -rw-rw-r--  1 senrsl senrsl   4769  3月 20 13:37 BatteryManager.java
  11. -rw-rw-r--  1 senrsl senrsl    667  3月 20 13:37 BatteryProperties.aidl
  12. -rw-rw-r--  1 senrsl senrsl   2909  3月 20 13:37 BatteryProperties.java
  13. -rw-rw-r--  1 senrsl senrsl 103641  3月 20 13:37 BatteryStats.java
  14. -rw-rw-r--  1 senrsl senrsl  17680  3月 20 13:37 Binder.java
  15. -rw-rw-r--  1 senrsl senrsl   7154  3月 20 13:37 Broadcaster.java
  16. -rw-rw-r--  1 senrsl senrsl  24561  3月 20 13:37 Build.java
  17. -rw-rw-r--  1 senrsl senrsl    712  3月 20 13:37 Bundle.aidl
  18. -rw-rw-r--  1 senrsl senrsl  54107  3月 20 13:37 Bundle.java
  19. -rw-rw-r--  1 senrsl senrsl   6117  3月 20 13:37 CancellationSignal.java
  20. -rw-rw-r--  1 senrsl senrsl  16852  3月 20 13:37 CommonClock.java
  21. -rw-rw-r--  1 senrsl senrsl  18701  3月 20 13:37 CommonTimeConfig.java
  22. -rw-rw-r--  1 senrsl senrsl   9487  3月 20 13:37 CommonTimeUtils.java
  23. -rw-rw-r--  1 senrsl senrsl   3921  3月 20 13:37 ConditionVariable.java
  24. -rw-rw-r--  1 senrsl senrsl   4300  3月 20 13:37 CountDownTimer.java
  25. -rw-rw-r--  1 senrsl senrsl    893  3月 20 13:37 DeadObjectException.java
  26. -rw-rw-r--  1 senrsl senrsl  58887  3月 20 13:37 Debug.java
  27. -rw-rw-r--  1 senrsl senrsl    675  3月 20 13:37 DropBoxManager.aidl
  28. -rw-rw-r--  1 senrsl senrsl  13133  3月 20 13:37 DropBoxManager.java
  29. -rw-rw-r--  1 senrsl senrsl  32366  3月 20 13:37 Environment.java
  30. -rw-rw-r--  1 senrsl senrsl   1156  3月 20 13:37 FactoryTest.java
  31. -rw-rw-r--  1 senrsl senrsl   8176  3月 20 13:37 FileObserver.java
  32. -rw-rw-r--  1 senrsl senrsl  12535  3月 20 13:37 FileUtils.java
  33. -rw-rw-r--  1 senrsl senrsl  30954  3月 20 13:37 Handler.java
  34. -rw-rw-r--  1 senrsl senrsl   4898  3月 20 13:37 HandlerThread.java
  35. -rw-rw-r--  1 senrsl senrsl    806  3月 20 13:37 IBatteryPropertiesListener.aidl
  36. -rw-rw-r--  1 senrsl senrsl    876  3月 20 13:37 IBatteryPropertiesRegistrar.aidl
  37. -rw-rw-r--  1 senrsl senrsl  11656  3月 20 13:37 IBinder.java
  38. -rw-rw-r--  1 senrsl senrsl    719  3月 20 13:37 ICancellationSignal.aidl
  39. -rw-rw-r--  1 senrsl senrsl    804  3月 20 13:37 IHardwareService.aidl
  40. -rw-rw-r--  1 senrsl senrsl   1013  3月 20 13:37 IInterface.java
  41. -rw-rw-r--  1 senrsl senrsl    814  3月 20 13:37 IMessenger.aidl
  42. -rw-rw-r--  1 senrsl senrsl  11835  3月 20 13:37 INetworkManagementService.aidl
  43. -rw-rw-r--  1 senrsl senrsl    815  3月 20 13:37 IPermissionController.aidl
  44. -rw-rw-r--  1 senrsl senrsl   2221  3月 20 13:37 IPowerManager.aidl
  45. -rw-rw-r--  1 senrsl senrsl    824  3月 20 13:37 IRemoteCallback.aidl
  46. -rw-rw-r--  1 senrsl senrsl   1093  3月 20 13:37 ISchedulingPolicyService.aidl
  47. -rw-rw-r--  1 senrsl senrsl   2594  3月 20 13:37 IServiceManager.java
  48. -rw-rw-r--  1 senrsl senrsl    849  3月 20 13:37 IUpdateLock.aidl
  49. -rw-rw-r--  1 senrsl senrsl   1973  3月 20 13:37 IUserManager.aidl
  50. -rw-rw-r--  1 senrsl senrsl    937  3月 20 13:37 IVibratorService.aidl
  51. -rw-rw-r--  1 senrsl senrsl  10781  3月 20 13:37 Looper.java
  52. -rw-rw-r--  1 senrsl senrsl  11164  3月 20 13:37 MemoryFile.java
  53. -rw-rw-r--  1 senrsl senrsl    718  3月 20 13:37 Message.aidl
  54. -rw-rw-r--  1 senrsl senrsl  16390  3月 20 13:37 Message.java
  55. -rw-rw-r--  1 senrsl senrsl  18819  3月 20 13:37 MessageQueue.java
  56. -rw-rw-r--  1 senrsl senrsl    720  3月 20 13:37 Messenger.aidl
  57. -rw-rw-r--  1 senrsl senrsl   4671  3月 20 13:37 Messenger.java
  58. -rw-rw-r--  1 senrsl senrsl   1230  3月 20 13:37 NetworkOnMainThreadException.java
  59. -rw-rw-r--  1 senrsl senrsl   1678  3月 20 13:37 NullVibrator.java
  60. -rw-rw-r--  1 senrsl senrsl   1039  3月 20 13:37 OperationCanceledException.java
  61. -rw-rw-r--  1 senrsl senrsl    135  3月 20 13:37 package.html
  62. -rw-rw-r--  1 senrsl senrsl   4874  3月 20 13:37 Parcelable.java
  63. -rw-rw-r--  1 senrsl senrsl   2223  3月 20 13:37 ParcelableParcel.java
  64. -rw-rw-r--  1 senrsl senrsl    740  3月 20 13:37 ParcelFileDescriptor.aidl
  65. -rw-rw-r--  1 senrsl senrsl  36600  3月 20 13:37 ParcelFileDescriptor.java
  66. -rw-rw-r--  1 senrsl senrsl    952  3月 20 13:37 ParcelFormatException.java
  67. -rw-rw-r--  1 senrsl senrsl  81352  3月 20 13:37 Parcel.java
  68. -rw-rw-r--  1 senrsl senrsl    660  3月 20 13:37 ParcelUuid.aidl
  69. -rw-rw-r--  1 senrsl senrsl   3658  3月 20 13:37 ParcelUuid.java
  70. -rw-rw-r--  1 senrsl senrsl    669  3月 20 13:37 PatternMatcher.aidl
  71. -rw-rw-r--  1 senrsl senrsl   6515  3月 20 13:37 PatternMatcher.java
  72. -rw-rw-r--  1 senrsl senrsl  23704  3月 20 13:37 PerformanceCollector.java
  73. -rw-rw-r--  1 senrsl senrsl  31261  3月 20 13:37 PowerManager.java
  74. -rw-rw-r--  1 senrsl senrsl  37308  3月 20 13:37 Process.java
  75. -rw-rw-r--  1 senrsl senrsl  17354  3月 20 13:37 RecoverySystem.java
  76. -rw-rw-r--  1 senrsl senrsl   2594  3月 20 13:37 Registrant.java
  77. -rw-rw-r--  1 senrsl senrsl   3176  3月 20 13:37 RegistrantList.java
  78. -rw-rw-r--  1 senrsl senrsl    672  3月 20 13:37 RemoteCallback.aidl
  79. -rw-rw-r--  1 senrsl senrsl   3020  3月 20 13:37 RemoteCallback.java
  80. -rw-rw-r--  1 senrsl senrsl  12275  3月 20 13:37 RemoteCallbackList.java
  81. -rw-rw-r--  1 senrsl senrsl    936  3月 20 13:37 RemoteException.java
  82. -rw-rw-r--  1 senrsl senrsl    828  3月 20 13:37 RemoteMailException.java
  83. -rw-rw-r--  1 senrsl senrsl    734  3月 20 13:37 ResultReceiver.aidl
  84. -rw-rw-r--  1 senrsl senrsl   4182  3月 20 13:37 ResultReceiver.java
  85. -rw-rw-r--  1 senrsl senrsl   6662  3月 20 13:37 SELinux.java
  86. -rw-rw-r--  1 senrsl senrsl   4392  3月 20 13:37 ServiceManager.java
  87. -rw-rw-r--  1 senrsl senrsl   6637  3月 20 13:37 ServiceManagerNative.java
  88. -rw-rw-r--  1 senrsl senrsl   4313  3月 20 13:37 StatFs.java
  89. drwxrwxr-x  2 senrsl senrsl   4096  3月 20 13:37 storage/
  90. -rw-rw-r--  1 senrsl senrsl  84186  3月 20 13:37 StrictMode.java
  91. -rw-rw-r--  1 senrsl senrsl   7464  3月 20 13:37 SystemClock.java
  92. -rw-rw-r--  1 senrsl senrsl   5768  3月 20 13:37 SystemProperties.java
  93. -rw-rw-r--  1 senrsl senrsl   4337  3月 20 13:37 SystemService.java
  94. -rw-rw-r--  1 senrsl senrsl   3566  3月 20 13:37 SystemVibrator.java
  95. -rw-rw-r--  1 senrsl senrsl   5978  3月 20 13:37 TokenWatcher.java
  96. -rw-rw-r--  1 senrsl senrsl  10997  3月 20 13:37 Trace.java
  97. -rw-rw-r--  1 senrsl senrsl   2969  3月 20 13:37 TransactionTooLargeException.java
  98. -rw-rw-r--  1 senrsl senrsl   8321  3月 20 13:37 UEventObserver.java
  99. -rw-rw-r--  1 senrsl senrsl   5161  3月 20 13:37 UpdateLock.java
  100. -rw-rw-r--  1 senrsl senrsl    666  3月 20 13:37 UserHandle.aidl
  101. -rw-rw-r--  1 senrsl senrsl   9783  3月 20 13:37 UserHandle.java
  102. -rw-rw-r--  1 senrsl senrsl  25003  3月 20 13:37 UserManager.java
  103. -rw-rw-r--  1 senrsl senrsl   3406  3月 20 13:37 Vibrator.java
  104. -rw-rw-r--  1 senrsl senrsl    657  3月 20 13:37 WorkSource.aidl
  105. -rw-rw-r--  1 senrsl senrsl  23097  3月 20 13:37 WorkSource.java
  106. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/os$ touch ISenrslService.aidl
  107. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/os$ gedit ISenrslService.aidl
  108. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android/os$ cd ..
  109. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core/java/android$ cd ..
  110. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core/java$ cd ..
  111. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/core$ cd ..
  112. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base$ gedit Android.mk
  113. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base$ cd services/java/com/android/server/
  114. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/services/java/com/android/server$ touch SenrslService.java
  115. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/services/java/com/android/server$ gedit SenrslService.java
  116. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/services/java/com/android/server$ gedit SystemServer.java
  117. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/frameworks/base/services/java/com/android/server$
1)ISenrslService.aidl定义ISenrslService的接口
  1. package android.os;
  2. /**
  3. *在Android系统中,硬件服务一般是运行在一个独立的进程中为各种应用程序提供服务。因此,调用这些硬件服 务的应用程序与这些硬件服务之间的通信需要通过代理来进行。为此,我们要先定义好通信接口。进入到 frameworks/base/core/java/android/os目录,新增ISenrslService.aidl 接口定义文件
  4. *ISenrslService接口主要提供了设备和获取硬件寄存器val的值的功能,分别通过setVal和 getVal两个函数来实现
  5. */
  6. interface ISenrslService {
  7.     void setVal(int val);
  8.     int getVal();
  9. }
2)/home/senrsl/android/source/WORKING_DIRECTORY/frameworks/base/Android.mk
在LOCAL_SRC_FILES += \中增加
  1.     core/java/android/os/IVibratorService.aidl \
  2.     core/java/android/os/ISenrslService.aidl \
  3.     core/java/android/service/notification/INotificationListener.aidl \
3)SenrslService.java
  1. package com.android.server;
  2. import android.content.Context;
  3. import android.os.ISenrslService;
  4. import android.util.Slog;
  5. /**
  6. *SenrslService主要是通过调用JNI方法init_native、setVal_native和 getVal_native来提供硬件服务。
  7. */
  8. public class SenrslService extends ISenrslService.Stub {
  9.     private static final String TAG = "SenrslService";
  10.     SenrslService(Context context) {
  11.         init_native();
  12.     }
  13.     public void setVal(int val) {
  14.         setVal_native(val);
  15.     }   
  16.     public int getVal() {
  17.         return getVal_native();
  18.     }
  19.    
  20.     private static native boolean init_native();
  21.         private static native void setVal_native(int val);
  22.     private static native int getVal_native();
  23. };
4)在同目录的SystemServer.java中增加
line 733.
  1.     try {
  2.                 Slog.i(TAG, "DiskStats Service");
  3.                 ServiceManager.addService("diskstats", new DiskStatsService(context));
  4.             } catch (Throwable e) {
  5.                 reportWtf("starting DiskStats Service", e);
  6.             }
  7.        try {
  8.                 Slog.i(TAG, "Senrsl Service");
  9.                 ServiceManager.addService("senrsl", new SenrslService(context));
  10.             } catch (Throwable e) {
  11.                 reportWtf("starting Senrsl Service", e);
  12.             }

②编译
1)编译增加aidl
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ mmm frameworks/base
编译完后会生成
  1. /home/senrsl/android/source/WORKING_DIRECTORY/out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes/android/os/ISenrslService.class
  2. /home/senrsl/android/source/WORKING_DIRECTORY/out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes/android/os/ISenrslService$Stub.class
  3. /home/senrsl/android/source/WORKING_DIRECTORY/out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes/android/os/ISenrslService$Stub$Proxy.class
2)编译SenrslService
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ mmm frameworks/base/services/java
③重新打包system.img
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ make snod

这样,重新打包后的system.img就在framework层包含了自定义的硬件服务SenrslService,并且会在系统启动时,自动 加载SenrslService.
应用程序可以通过java接口来访问senrsl硬件服务。

搞定2015年04月10日19:44:35

2,测试demo
开eclipse,新建android项目。
直接使用secondHallo项目。
①文件操作
1)布局文件activity_service.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="fill_parent"
  4.     android:layout_height="fill_parent"
  5.     android:orientation="vertical" >
  6.     <LinearLayout
  7.         android:layout_width="fill_parent"
  8.         android:layout_height="wrap_content"
  9.         android:gravity="center"
  10.         android:orientation="vertical" >
  11.         <TextView
  12.             android:layout_width="wrap_content"
  13.             android:layout_height="wrap_content"
  14.             android:text="@string/value" >
  15.         </TextView>
  16.         <EditText
  17.             android:id="@+id/edit_value"
  18.             android:layout_width="fill_parent"
  19.             android:layout_height="wrap_content"
  20.             android:hint="@string/hint" >
  21.         </EditText>
  22.     </LinearLayout>
  23.     <LinearLayout
  24.         android:layout_width="fill_parent"
  25.         android:layout_height="wrap_content"
  26.         android:gravity="center"
  27.         android:orientation="horizontal" >
  28.         <Button
  29.             android:id="@+id/button_read"
  30.             android:layout_width="wrap_content"
  31.             android:layout_height="wrap_content"
  32.             android:text="@string/read" >
  33.         </Button>
  34.         <Button
  35.             android:id="@+id/button_write"
  36.             android:layout_width="wrap_content"
  37.             android:layout_height="wrap_content"
  38.             android:text="@string/write" >
  39.         </Button>
  40.         <Button
  41.             android:id="@+id/button_clear"
  42.             android:layout_width="wrap_content"
  43.             android:layout_height="wrap_content"
  44.             android:text="@string/clear" >
  45.         </Button>
  46.     </LinearLayout>
  47. </LinearLayout>
2)strings.xml增加
  1.      <!-- 系统服务访问 -->
  2.    <string name="system_service">系统服务</string>
  3.     <string name="value">Value</string>
  4.     <string name="hint">请输入。。。。</string>
  5.     <string name="read">Read</string>
  6.     <string name="write">Write</string>
  7.     <string name="clear">Clear</string>
3)SystemServiceActivity.java
  1. /** 
  2.  * Filename:    SystemServiceActivity.java 
  3.  * Description:  
  4.  * Copyright:   Copyright (c)2015 
  5.  * Company:     SENRSL 
  6.  * @author:     senRsl senRsl@163.com 
  7.  * @version:    1.0 
  8.  * Create at:   2015-4-10 下午7:58:41 
  9.  * 
  10.  * Modification History: 
  11.  * Date             Author      Version     Description 
  12.  * ------------------------------------------------------------------ 
  13.  * 2015-4-10   senRsl      1.0            1.0 Version 
  14.  */
  15. package dc.study;
  16. import android.app.Activity;
  17. import android.os.ServiceManager; 
  18. import android.os.Bundle; 
  19. import android.os.ISenrslService; 
  20. import android.os.RemoteException;
  21. import android.util.Log;
  22. import android.view.View;
  23. import android.widget.Button;
  24. import android.widget.EditText;
  25. /**
  26.  * 获取自定义系统服务SenrslService
  27.  * 程序通过ServiceManager.getService("senrsl")来获得HelloService,接着通过 IHelloService.Stub.asInterface函数转换为IHelloService接口。
  28.  * 其中,服务名字"senrsl"是系统启动时加载SenrslService时指定的,而ISenrslService接口定义在 android.os.ISenrslService中
  29.  * 这个程序提供了简单的读定自定义硬件有寄存器val的值的功能,通过ISenrslService.getVal和 ISenrslService.setVal两个接口实现。
  30.  *
  31.  * @ClassName: SystemServiceActivity
  32.  * @author senrsl
  33.  *
  34.  * @Package: dc.study
  35.  * @CreateTime: 2015-4-10 下午7:58:41
  36.  */
  37. public class SystemServiceActivity extends Activity implements View.OnClickListener{
  38.     private final static String LOG_TAG = "TEST";
  39.     private ISenrslService senrslService = null;
  40.     private EditText valueText = null;
  41.     private Button readButton = null;
  42.     private Button writeButton = null;
  43.     private Button clearButton = null;
  44.     /** Called when the activity is first created. */
  45.     @Override
  46.     public void onCreate(Bundle savedInstanceState) {
  47.         super.onCreate(savedInstanceState);
  48.         setContentView(R.layout.activity_service);
  49.         senrslService = ISenrslService.Stub.asInterface(ServiceManager.getService("senrsl"));
  50.         valueText = (EditText) findViewById(R.id.edit_value);
  51.         readButton = (Button) findViewById(R.id.button_read);
  52.         writeButton = (Button) findViewById(R.id.button_write);
  53.         clearButton = (Button) findViewById(R.id.button_clear);
  54.         readButton.setOnClickListener(this);
  55.         writeButton.setOnClickListener(this);
  56.         clearButton.setOnClickListener(this);
  57.         Log.i(LOG_TAG, "获取系统服务的页面已打开");
  58.     }
  59.     @Override
  60.     public void onClick(View v) {
  61.         if (v.equals(readButton)) {
  62.             try {
  63.                 int val = senrslService.getVal();
  64.                 String text = String.valueOf(val);
  65.                 valueText.setText(text);
  66.             } catch (RemoteException e) {<activity android:name=".SystemServiceActivity" />
  67.                 Log.e(LOG_TAG,
  68.                         "Remote Exception while reading value from device.");
  69.             }
  70.         } else if (v.equals(writeButton)) {
  71.             try {
  72.                 String text = valueText.getText().toString();
  73.                 int val = Integer.parseInt(text);
  74.                 senrslService.setVal(val);
  75.             } catch (RemoteException e) {
  76.                 Log.e(LOG_TAG,
  77.                         "Remote Exception while writing value to device.");
  78.             }
  79.         } else if (v.equals(clearButton)) {
  80.             String text = "";
  81.             valueText.setText(text);
  82.         }
  83.     }
  84. }
4)mainfest.xml
  1.  <activity android:name=".SystemServiceActivity" />
5)根目录新建Android.mk
  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE_TAGS := optional
  4. LOCAL_SRC_FILES := $(call all-subdir-java-files)
  5. LOCAL_PACKAGE_NAME := secondHallo
  6. include $(BUILD_PACKAGE)
②拷贝项目到/home/senrsl/android/source/WORKING_DIRECTORY/packages /experimental,删除eclipse相关文件
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY/packages/experimental/secondHallo$ ll
  2. 总用量 32
  3. drwxrwxr-x  4 senrsl senrsl 4096  4月 10 20:20 ./
  4. drwxrwxr-x 19 senrsl senrsl 4096  4月 10 20:06 ../
  5. -rw-rw-r--  1 senrsl senrsl 2151  4月 10 20:05 AndroidManifest.xml
  6. -rw-rw-r--  1 senrsl senrsl  193  4月 10 20:10 Android.mk
  7. -rw-rw-r--  1 senrsl senrsl 1248 12月 15 15:25 proguard.cfg
  8. -rw-rw-r--  1 senrsl senrsl  361 12月 15 15:25 project.properties
  9. drwxrwxr-x  7 senrsl senrsl 4096 12月 15 15:25 res/
  10. drwxrwxr-x  3 senrsl senrsl 4096 12月 15 15:25 src/
③编译apk
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ mmm packages/experimental/secondHallo/
编译完成后会生成/home/senrsl/android/source/WORKING_DIRECTORY/out/target /product/generic/system/app/secondHallo.apk

④重新打包system.img
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ make snod
⑤启动测试
1)启动
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ emulator -kernel /home/senrsl/android/source/kernel/goldfish/arch/arm/boot/zImage
2)点击读取,日志:
  1. 04-10 08:48:40.630: I/SenrslStub(391): Senrsl Stub: get value 0 from device
  2. 04-10 08:48:40.630: I/SenrslService(391): Senrsl JNI: get value 0 from device.
  3. 04-10 08:48:40.690: I/Choreographer(550): Skipped 32 frames!  The application may be doing too much work on its main thread.
  4. 04-10 08:48:40.740: I/LatinIME:LogUtils(524): Dictionary info: dictionary = contacts.zh_CN.dict ; version = ? ; date = ?

3)点击写,日志:
  1. 04-10 08:49:46.990: I/SenrslService(391): Senrsl JNI: set value 123 to device.
  2. 04-10 08:49:46.990: I/SenrslStub(391): Senrsl Stub: set value 123 to device.

E1)一开始启动后点读或写日志报设备打不开failed to open hello device
这个问题是因为之前改了个权限0666那个地方,一直都是mmm单模块来编译,没有把权限这个编译进去。
解决:整体重新编译一下就好了
  1. senrsl@senrsl-ubuntu:~/android/source/WORKING_DIRECTORY$ make -j16

这个系列折腾了一整天,终于搞通了!
2015年04月10日20:54:14


--
senRsl
2015年04月10日17:09:22

没有评论 :

发表评论