文件预览:HelloJni.java

/* * Copyright (C) 2009 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. */ package cc.winboll.studio.jcndk; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import cc.winboll.studio.jcndk.R; import cc.winboll.studio.libjc.JAR_RUNNING_MODE; import cc.winboll.studio.libjc.JCMainThread; import cc.winboll.studio.libjc.Log; import cc.winboll.studio.libjc.net.JCSocketServer; import java.io.File; public class HelloJni extends Activity implements JCMainThread.OnMessageListener { public static String TAG = "HelloJni"; final public static int MSG_APPEN = 0; MessageHandler mMessageHandler; static JCMainThread _JCMainThread; StringBuilder mStringBuilder; Context mContext; ScrollView mScrollView; LinearLayout mRootLayout; TextView mTextView; EditText mEditText; Button mButton; JCSocketServer mJCSocketServer; JCMainServerThread mJCMainServerThread; // @Override // public void log(String message) { // Message msg = mMessageHandler.obtainMessage(MSG_APPEN, message); // mMessageHandler.sendMessage(msg); // } @Override public void outPrint(String message) { Message msg = mMessageHandler.obtainMessage(MSG_APPEN, message); mMessageHandler.sendMessage(msg); } @Override public void errPrint(String message) { Message msg = mMessageHandler.obtainMessage(MSG_APPEN, message); mMessageHandler.sendMessage(msg); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化日志类 Log.init(getPackageName()); Log.d(TAG, "onCreate"); // 初始化视图元素 mContext = this; mMessageHandler = new MessageHandler(); //initView(); initView2(); // 测试添加消息 方式 1 appendMessage("appendMessage(...) test.\n"); // 测试添加消息 方式 2 int szwhat = MSG_APPEN; String szobj = "mMessageHandler.sendMessage(...) test.\n"; Message msg = mMessageHandler.obtainMessage(szwhat, szobj); mMessageHandler.sendMessage(msg); // 启动主线程 _JCMainThread = JCMainThread.getInstance(getPackageName()); _JCMainThread.setOnLogListener(this); _JCMainThread.setRunningMode(JAR_RUNNING_MODE.JCNDK); _JCMainThread.start(); try { Thread.sleep(500); } catch (InterruptedException e) { Log.e(TAG, e, Thread.currentThread().getStackTrace()); } appendMessage("Switch To Termux Bash Shell ..."); File dirHome = new File(getFilesDir(), "home"); if (!dirHome.exists()) { dirHome.mkdirs(); } String szBashSwitchFileName = "switch2bash.sh"; File fDstBashSwitch = new File(dirHome, szBashSwitchFileName); FileUtils.copyAssetsToSD(this, szBashSwitchFileName, fDstBashSwitch.toPath().toString()); _JCMainThread.exeInit("cd " + dirHome.toPath().toString()); _JCMainThread.exeInit("ash " + szBashSwitchFileName); //Intent intent = new Intent(this, JCMainService.class); //startService(intent); mJCMainServerThread = new JCMainServerThread(); mJCMainServerThread.start(); } void initView2() { View mainView = getLayoutInflater().inflate(R.layout.view_main, null); mRootLayout = mainView.findViewById(R.id.viewmainLinearLayout1); mScrollView = mainView.findViewById(R.id.viewmainScrollView1); mTextView = mainView.findViewById(R.id.viewmainTextView1); mButton = mainView.findViewById(R.id.viewmainButton1); mEditText = mainView.findViewById(R.id.viewmainEditText1); setContentView(mRootLayout); mButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { mJCSocketServer.sendMessage(mEditText.getText().toString()); //System.out.println("onClick"); //_JCMainThread.exeBashCommand(mEditText.getText().toString()); mEditText.setText(""); } }); } // // // // // 函数式初始化视图元素 // // // void initView() { // // 创建一个线性布局作为根布局 // mRootLayout = new LinearLayout(mContext); // mRootLayout.setOrientation(LinearLayout.VERTICAL); // mRootLayout.setLayoutParams(new LinearLayout.LayoutParams( // ViewGroup.LayoutParams.MATCH_PARENT, // ViewGroup.LayoutParams.MATCH_PARENT // )); // // // 创建ScrollView // mScrollView = new ScrollView(mContext); // mScrollView.setLayoutParams(new LinearLayout.LayoutParams( // ViewGroup.LayoutParams.MATCH_PARENT, // ViewGroup.LayoutParams.MATCH_PARENT // )); // // // 创建TextView // mTextView = new TextView(mContext); // mTextView.setTextColor(Color.BLACK); // mTextView.setTextSize(16); // mTextView.setGravity(Gravity.LEFT); // mTextView.setLayoutParams(new LinearLayout.LayoutParams( // ViewGroup.LayoutParams.MATCH_PARENT, // ViewGroup.LayoutParams.WRAP_CONTENT // )); // // // 模拟添加文本内容 // /*String longText = ""; // for (int i = 0; i < 100; i++) { // longText += "这是一些示例文本内容,用于测试滚动效果。\n"; // } // textView.setText(longText);*/ // // // 将TextView添加到ScrollView中 // mScrollView.addView(mTextView); // // // 将ScrollView添加到根布局中 // mRootLayout.addView(mScrollView); // // // 设置Activity的内容视图为根布局 // setContentView(mRootLayout); // // } // // 添加输出消息 // void appendMessage(String szMessage) { mTextView.append(szMessage); // 让ScrollView滚动到底部 mScrollView.post(new Runnable() { @Override public void run() { mScrollView.fullScroll(ScrollView.FOCUS_DOWN); } }); } /* A native method that is implemented by the * 'hello-jni' native library, which is packaged * with this application. */ public native String stringFromJNI(); /* This is another native method declaration that is *not* * implemented by 'hello-jni'. This is simply to show that * you can declare as many native methods in your Java code * as you want, their implementation is searched in the * currently loaded native libraries only the first time * you call them. * * Trying to call this function will result in a * java.lang.UnsatisfiedLinkError exception ! */ public native String unimplementedStringFromJNI(); /* this is used to load the 'hello-jni' library on application * startup. The library has already been unpacked into * /data/data/com.example.hellojni/lib/libhello-jni.so at * installation time by the package manager. */ static { System.loadLibrary("hello-jni"); } class MessageHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_APPEN : { appendMessage(String.format("%s", msg.obj)); } } super.handleMessage(msg); } } class JCMainServerThread extends Thread { @Override public void run() { super.run(); try { Thread.sleep(1000); } catch (InterruptedException e) { System.err.println(String.format("%s Exception : %s", TAG, e.getMessage())); Log.e(TAG, e, Thread.currentThread().getStackTrace()); } System.out.println("JCMainServerThread run()"); mJCSocketServer = JCSocketServer.getInstance(); mJCSocketServer.main(null); System.out.println("JCMainServerThread exit."); } } }
返回目录